我想在 GKE 中运行 X.Org 服务器和多个桌面应用程序。每个都在一个单独的容器中(可能每个都在单独的容器中)。理想情况下,X.Org 将是一个 DaemonSet,每个节点上都有一个服务器。
但这只是一个运行两个容器的 Pod 的测试:X.Org 和一个应用程序:
apiVersion: v1
kind: Pod
metadata:
name: app-pod
spec:
volumes:
- name: x11-socket
hostPath:
path: /tmp/x11-socket
containers:
- name: xserver
image: xserver
command: ["sleep"]
args: ["infinity"]
volumeMounts:
- name: x11-socket
mountPath: /tmp/.X11-unix
securityContext:
privileged: true
resources:
limits:
nvidia.com/gpu: 1
- name: app
image: app
command: ["sleep"]
args: ["infinity"]
volumeMounts:
- name: x11-socket
mountPath: /tmp/.X11-unix
securityContext:
privileged: true
resources:
limits:
nvidia.com/gpu: 0
pod 总体声明它需要 1 个 GPU,因此它可以获取它,甚至可以从两个容器内部使用它。
问题是 NVIDIA 驱动程序文件
/usr/local/nvidia/
仅出现在具有 nvidia.com/gpu: 1
的容器中。如果我将驱动程序复制到另一个容器,那么 glxinfo
也会在那里报告 NVIDIA GPU。
如何让它将驱动程序放入所有容器中,就像 NVIDIA 容器运行时在主机上运行多个 Docker 容器时所做的那样?
当您使用 NVIDIA 容器运行时 来部署容器时,它具有用于部署容器的内置功能以及 GPU 加速应用程序所需的 NVIDIA gpu 驱动程序 或 插件。同样,在谷歌云中,如果您想将GPU配置到您的pod或容器,您需要提及以下键值对
值:要消耗的 GPU 数量(您为 XOrg 服务器定义的)
当您提到上述键值对时 GKE 将部署您的 pod 以及所需的 NVIDIA 驱动程序。您还可以稍后通过复制二进制文件或运行所需的命令来安装它们。但是,不建议这样做,因为如果重新创建您的 Pod,新创建的 Pod 不包含这些驱动程序,因此建议使用上述键值对或使用内置 NVIDIA 驱动程序包的容器映像。
如果您希望所有容器都具有 NVIDIA 支持,请使用包含 NVIDIA 插件的容器映像,或者在 pod 规范中定义 键值对。