在 Kubernetes 上部署 CloudXR 远程操作#
本节将解释如何在 Kubernetes(K8s)集群上为 Isaac Lab 部署 CloudXR 远程操作。
系统要求#
最低要求: 具有至少1个NVIDIA RTX PRO 6000 / L40 GPU或等效的节点的Kubernetes集群
推荐要求: Kubernetes 集群中至少有一个节点带有至少 2 个 RTX PRO 6000 / L40 GPU 或等效设备
软件依赖#
您宿主机上的
kubectl
如果您使用 MicroK8s,您已经安装了
microk8s kubectl
否则请按照 官方 kubectl 安装指南 。
您宿主机上的
helm
如果您使用 MicroK8s,则已经拥有
microk8s helm
。否则按照 官方Helm安装指南 进行操作。
从您的Kubernetes集群访问NGC公共注册表,特别是这些容器镜像:
https://catalog.ngc.nvidia.com/orgs/nvidia/containers/isaac-lab
https://catalog.ngc.nvidia.com/orgs/nvidia/containers/cloudxr-runtime
在您的Kubernetes集群中安装了NVIDIA GPU Operator或等效程序,以暴露NVIDIA GPUs。
在您的 Kubernetes 集群节点上安装了 NVIDIA 容器工具包
准备#
在您的主机计算机上,您应该已经配置了 kubectl
来访问您的 Kubernetes 集群。要验证,运行以下命令并验证其正确返回您的节点:
kubectl get node
如果您将其安装到自己的 Kubernetes 集群中,而不是使用 附录: 使用 MicroK8s 设置本地 K8s 集群 中描述的设置,请确保您在 K8s 集群中的角色至少具有以下 RBAC 权限:
rules:
- apiGroups: [""]
resources: ["configmaps"]
verbs: ["get", "list", "watch", "create", "update", "patch", "delete"]
- apiGroups: ["apps"]
resources: ["deployments", "replicasets"]
verbs: ["get", "list", "watch", "create", "update", "patch", "delete"]
- apiGroups: [""]
resources: ["pods"]
verbs: ["get", "list", "watch", "create", "update", "patch", "delete"]
- apiGroups: [""]
resources: ["services"]
verbs: ["get", "list", "watch", "create", "update", "patch", "delete"]
安装#
备注
以下步骤已在安装了 GPU 运算符的 MicroK8s 集群上验证确认(请参见 附录: 使用 MicroK8s 设置本地 K8s 集群 中的配置)。如果遇到问题,您可以相应地配置您自己的 K8s 集群。
从 NGC 下载 Helm 图表(根据 public guide 获取您的 NGC API 密钥):
helm fetch https://helm.ngc.nvidia.com/nvidia/charts/isaac-lab-teleop-2.2.0.tgz \ --username='$oauthtoken' \ --password=<your-ngc-api-key>
安装并在默认命名空间中运行CloudXR Teleoperation for Isaac Lab pod,消耗所有主机GPUs:
helm upgrade --install hello-isaac-teleop isaac-lab-teleop-2.2.0.tgz \ --set fullnameOverride=hello-isaac-teleop \ --set hostNetwork="true"
备注
您可以通过创建外部LoadBalancer VIP(例如使用MetalLB)并在部署Helm chart时设置环境变量
NV_CXR_ENDPOINT_IP
来消除对主机网络的需要。# local_values.yml file example: fullnameOverride: hello-isaac-teleop streamer: extraEnvs: - name: NV_CXR_ENDPOINT_IP value: "<your external LoadBalancer VIP>" - name: ACCEPT_EULA value: "Y"
# command helm upgrade --install --values local_values.yml \ hello-isaac-teleop isaac-lab-teleop-2.2.0.tgz
验证部署已完成:
kubectl wait --for=condition=available --timeout=300s \ deployment/hello-isaac-teleop
在 pod 运行后,可能需要大约 5-8 分钟来完成加载资产并开始流媒体。
卸载#
您可以通过简单的运行来卸载:
helm uninstall hello-isaac-teleop
附录: 使用 MicroK8s 设置本地 K8s 集群#
您本地的工作站应该安装了 NVIDIA Container Toolkit 及其依赖项。否则,以下的设置将无法正常工作。
清理现有安装(可选)#
# Clean up the system to ensure we start fresh
sudo snap remove microk8s
sudo snap remove helm
sudo apt-get remove docker-ce docker-ce-cli containerd.io
# If you have snap docker installed, remove it as well
sudo snap remove docker
安装 MicroK8s#
sudo snap install microk8s --classic
安装 NVIDIA GPU Operator#
microk8s helm repo add nvidia https://helm.ngc.nvidia.com/nvidia
microk8s helm repo update
microk8s helm install gpu-operator \
-n gpu-operator \
--create-namespace nvidia/gpu-operator \
--set toolkit.env[0].name=CONTAINERD_CONFIG \
--set toolkit.env[0].value=/var/snap/microk8s/current/args/containerd-template.toml \
--set toolkit.env[1].name=CONTAINERD_SOCKET \
--set toolkit.env[1].value=/var/snap/microk8s/common/run/containerd.sock \
--set toolkit.env[2].name=CONTAINERD_RUNTIME_CLASS \
--set toolkit.env[2].value=nvidia \
--set toolkit.env[3].name=CONTAINERD_SET_AS_DEFAULT \
--set-string toolkit.env[3].value=true
备注
如果您已经配置GPU运算符以在设备插件上使用卷挂载作为 DEVICE_LIST_STRATEGY
,并在工具包上禁用了 ACCEPT_NVIDIA_VISIBLE_DEVICES_ENVVAR_WHEN_UNPRIVILEGED
,则此配置当前不受支持,因为没有确保分配的GPU资源在同一Pod容器之间始终共享的方法。
验证安装#
运行以下命令来验证所有的 pods 是否运行正确:
microk8s kubectl get pods -n gpu-operator
你应该看到类似的输出:
NAMESPACE NAME READY STATUS RESTARTS AGE
gpu-operator gpu-operator-node-feature-discovery-gc-76dc6664b8-npkdg 1/1 Running 0 77m
gpu-operator gpu-operator-node-feature-discovery-master-7d6b448f6d-76fqj 1/1 Running 0 77m
gpu-operator gpu-operator-node-feature-discovery-worker-8wr4n 1/1 Running 0 77m
gpu-operator gpu-operator-86656466d6-wjqf4 1/1 Running 0 77m
gpu-operator nvidia-container-toolkit-daemonset-qffh6 1/1 Running 0 77m
gpu-operator nvidia-dcgm-exporter-vcxsf 1/1 Running 0 77m
gpu-operator nvidia-cuda-validator-x9qn4 0/1 Completed 0 76m
gpu-operator nvidia-device-plugin-daemonset-t4j4k 1/1 Running 0 77m
gpu-operator gpu-feature-discovery-8dms9 1/1 Running 0 77m
gpu-operator nvidia-operator-validator-gjs9m 1/1 Running 0 77m
一旦所有的Pod都在运行,您可以继续进入 安装 部分。