在集群中使用过时内核安装时的注意事项#
作为 GPU Operator 一部分部署的 driver
容器需要某些软件包作为驱动程序安装的一部分可用。在运行内核不是最新的 GPU 节点上,driver
容器可能无法找到与运行内核版本对应的正确版本的这些软件包(例如 kernel-headers、kernel-devel)。在 driver
容器日志中,您很可能会看到以下错误消息:Could not resolve Linux kernel version
。
通常,将您的系统升级到最新内核应该可以解决此问题。但如果这不是一个选项,以下是在集群中的 GPU 节点可能未运行最新内核时成功部署 GPU Operator 的一种解决方法。
添加存档软件包存储库#
解决方法是找到包含您的过时内核软件包的软件包存档,并将此存储库添加到 driver
容器内运行的软件包管理器。为了实现这一点,我们可以简单地使用 ConfigMap
将存储库列表文件挂载到 driver
容器中。包含存储库列表文件的 ConfigMap
需要在 gpu-operator
命名空间中创建。
让我们通过一个示例来演示此解决方法。此示例中使用的系统运行的是带有过时内核的 CentOS 7
$ uname -r
3.10.0-1062.12.1.el7.x86_64
旧 CentOS 软件包的官方存档是 https://vault.centos.org/。通常,大多数存档的 CentOS 存储库都位于 /etc/yum.repos.d/CentOS-Vault.repo
中,但默认情况下它们处于禁用状态。如果启用了适当的存档存储库,则 driver
容器将解析内核版本,并能够安装正确版本的先决条件软件包。
我们可以简单地放入 /etc/yum.repos.d/CentOS-Vault.repo
的替换文件,以确保启用适当的 CentOS 存档。对于此示例中运行的内核,CentOS-7.7.1908
存档包含我们正在查找的 kernel-headers 版本。这是我们的示例替换文件
[C7.7.1908-base]
name=CentOS-7.7.1908 - Base
baseurl=http://vault.centos.org/7.7.1908/os/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
enabled=1
[C7.7.1908-updates]
name=CentOS-7.7.1908 - Updates
baseurl=http://vault.centos.org/7.7.1908/updates/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
enabled=1
创建 repo 列表文件后,我们可以为其创建一个 ConfigMap
$ kubectl create configmap repo-config -n gpu-operator --from-file=<path-to-repo-list-file>
使用上述命令创建 ConfigMap
后,使用此信息更新 values.yaml
,以允许 GPU Operator 在 driver
容器中挂载 repo 配置以拉取所需的软件包。
对于 Ubuntu
driver:
repoConfig:
configMapName: repo-config
destinationDir: /etc/apt/sources.list.d
对于 RHEL/Centos/RHCOS
driver:
repoConfig:
configMapName: repo-config
destinationDir: /etc/yum.repos.d
使用更新后的 values.yaml
部署 GPU Operator
$ helm install --wait --generate-name \
-n gpu-operator --create-namespace \
nvidia/gpu-operator \
--version=v24.9.2 \
-f values.yaml
检查 pod 的状态以确保所有容器都在运行
$ kubectl get pods -n gpu-operator