在集群中使用过时内核安装时的注意事项#

作为 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