升级 NVIDIA GPU Operator#
先决条件#
如果您的集群使用 Pod Security Admission (PSA) 来限制 Pod 的行为,请标记 Operator 的命名空间,将强制执行策略设置为特权
$ kubectl label --overwrite ns gpu-operator pod-security.kubernetes.io/enforce=privileged
使用 Helm#
GPU Operator 支持对现有资源进行动态更新。此功能使 GPU Operator 能够确保始终应用和更新集群策略规范中的设置。
由于 Helm 不支持自动升级现有 CRD,您可以手动升级 GPU Operator Chart,或通过启用 Helm Hook 来升级。
选项 1:手动升级 CRD#
flowchart LR A["从最新 Chart 更新 CRD"] --> B["使用 Helm 升级"]
通过此过程,所有现有的 GPU Operator 资源都将内联更新,并且集群策略资源将使用 values.yaml
中的更新进行修补。
在环境变量中指定 Operator 发布标签
$ export RELEASE_TAG=v23.9.0
应用集群策略和 NVIDIA 驱动程序的自定义资源定义
$ kubectl apply -f \ https://gitlab.com/nvidia/kubernetes/gpu-operator/-/raw/$RELEASE_TAG/deployments/gpu-operator/crds/nvidia.com_clusterpolicies_crd.yaml $ kubectl apply -f \ https://gitlab.com/nvidia/kubernetes/gpu-operator/-/raw/$RELEASE_TAG/deployments/gpu-operator/crds/nvidia.com_nvidiadrivers.yaml
示例输出
customresourcedefinition.apiextensions.k8s.io/clusterpolicies.nvidia.com configured customresourcedefinition.apiextensions.k8s.io/nvidiadrivers.nvidia.com created
应用节点功能发现的自定义资源定义
$ kubectl apply -f \ https://gitlab.com/nvidia/kubernetes/gpu-operator/-/raw/$RELEASE_TAG/deployments/gpu-operator/charts/node-feature-discovery/crds/nfd-api-crds.yaml
示例输出
customresourcedefinition.apiextensions.k8s.io/nodefeaturerules.nfd.k8s-sigs.io configured
更新有关 Operator Chart 的信息
$ helm repo update nvidia
示例输出
Hang tight while we grab the latest from your chart repositories... ...Successfully got an update from the "nvidia" chart repository Update Complete. ⎈Happy Helming!⎈
从 Chart 中获取值
$ helm show values nvidia/gpu-operator --version=$RELEASE_TAG > values-$RELEASE_TAG.yaml
根据需要更新 values 文件。
升级 Operator
$ helm upgrade gpu-operator nvidia/gpu-operator -n gpu-operator -f values-$RELEASE_TAG.yaml
示例输出
Release "gpu-operator" has been upgraded. Happy Helming! NAME: gpu-operator LAST DEPLOYED: Thu Apr 20 15:05:52 2023 NAMESPACE: gpu-operator STATUS: deployed REVISION: 2 TEST SUITE: None
选项 2:使用 Helm Hook 自动升级 CRD#
从 GPU Operator v22.09 开始,pre-upgrade
Helm Hook 可以自动升级到最新的 CRD。
从 GPU Operator v24.9.0 开始,升级 CRD Helm Hook 默认启用,并在您使用 Helm 升级时运行升级 CRD 作业。
在环境变量中指定 Operator 发布标签
$ export RELEASE_TAG=v23.9.0
更新有关 Operator Chart 的信息
$ helm repo update nvidia
示例输出
Hang tight while we grab the latest from your chart repositories... ...Successfully got an update from the "nvidia" chart repository Update Complete. ⎈Happy Helming!⎈
从 Chart 中获取值
$ helm show values nvidia/gpu-operator --version=$RELEASE_TAG > values-$RELEASE_TAG.yaml
根据需要更新 values 文件。
升级 Operator
$ helm upgrade gpu-operator nvidia/gpu-operator -n gpu-operator \ --disable-openapi-validation -f values-$RELEASE_TAG.yaml
注意
在这种情况下,需要选项
--disable-openapi-validation
,以便 Helm 不会尝试根据旧 CRD 验证来自新 Chart 的 CR 实例是否有效。由于 Chart 中的 CR 实例对于升级后的 CRD 有效,因此这将是兼容的。与 GPU Operator 一起使用的 Helm Hook 使用 Operator 镜像本身。如果 Operator 镜像本身无法成功拉取(由于网络错误或 NVAIE 情况下的无效 NGC 注册表密钥),Hook 将会失败。在这种情况下,需要使用
--no-hooks
选项删除 Chart,以避免删除操作因 Hook 失败而挂起。
集群策略更新#
GPU Operator 还支持使用 kubectl
对 ClusterPolicy
CustomResource 进行动态更新
$ kubectl edit clusterpolicy
完成编辑后,Kubernetes 将自动将更新应用于集群。
驱动程序升级的其他控制#
虽然大多数 GPU Operator 管理的 DaemonSet 可以无缝升级,但 NVIDIA 驱动程序 DaemonSet 有特殊的注意事项。有关更多信息,请参阅 GPU 驱动程序升级。
在 OpenShift 中使用 OLM#
有关在 OpenShift 中运行时升级 GPU Operator 的信息,请参阅有关升级已安装 Operator 的官方文档:http://docs.openshift.org.cn/container-platform/4.8/operators/admin/olm-upgrading-operators.html