在 Kubernetes 上部署 CloudXR 远程操作#

本节将解释如何在 Kubernetes(K8s)集群上为 Isaac Lab 部署 CloudXR 远程操作。

系统要求#

  • 最低要求: 具有至少1个NVIDIA RTX PRO 6000 / L40 GPU或等效的节点的Kubernetes集群

  • 推荐要求: Kubernetes 集群中至少有一个节点带有至少 2 个 RTX PRO 6000 / L40 GPU 或等效设备

软件依赖#

  • 您宿主机上的 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 集群。

  1. 从 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>
    
  2. 安装并在默认命名空间中运行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
    
  3. 验证部署已完成:

    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都在运行,您可以继续进入 安装 部分。