本文来源于阿里云社区电子书《阿里云产品四月刊》
GPU 设备插件(GPU Device-Plugin)是 Kubernetes 集群中用于管理每个节点的 GPU 的组件,它使得 Kubernetes 能够更方便、高效地利用 GPU 资源。本文介绍在独占 GPU 调度场景下,如何对节点的 GPU Device-Plugin 进行重启和 GPU 设备隔离等操作,以及如何查看和更新 Device-Plugin 版本。
GPU Device-Plugin 重启
在 ACK 的独占 GPU 调度场景下,节点上 GPU 的设备上报的 Device Plugin 默认以一个Static Pod 的形式部署,所以重启过程需要在目标节点上进行。具体操作如下:
mv /etc/kubernetes/manifests/nvidia device plugin.yml /etc/kubernetes/ # 等待几秒,旧 Pod 被清理的过程。 mv /etc/kubernetes/nvidia device plugin.yml /etc/kubernetes/manifests/
GPU 设备隔离
重要
GPU 设备隔离操作仅支持在 nvidia-device-plugin 的 v0.9.1 及以上版本中使用。如何查看 nvidia-device-plugin 的版本,请参见查看并更新 Device-Plugin 版本。
在 ACK 的独占 GPU 调度场景下,出于某些原因(例如 GPU 设备故障等),您需要隔离节点上的某个 GPU 设备,ACK 提供了一个机制可供您手动对节点上的某个设备进行隔离,以避免新的 Kubernetes 设备调度到这个设备上。具体的操作方式如下:
在目标节点/etc/nvidia-device-plugin/的目录下操作 unhealthyDevices.json 这个文件,如果此文件不存在,请新建此文件。unhealthyDevices.json 的文件格式请按照以下 JSON 格式编排。
{ "index": ["x", "x" ..], "uuid": ["xxx", "xxx" ..]}
您可以根据个人偏好,在 JSON 中填写目标隔离设备的 index 或 uuid(同一个设备只需填写任意一个),保存文件后即自动生效。
设 置 完 成 后 , 您 可 以 通 过 查 看 Kubernetes Node 上 报 的 Resource 中 的nvidia.com/gpu 资源的数量以查看隔离的效果。
查看并更新 Device-Plugin 版本
您在目标节点上/etc/kubernetes/manifests/nvidia-device-plugin.yml 文件中查看的 device-plugin 的镜像 Tag,其所代表的版本号即为 Device-Plugin 的版本。
目前 ACK 所支持的最新的版本为 v0.9.1-3f942982-aliyun , 如需将节点中的nvidia-device-plugin 升级至最新版本,请将 nvidia-device-plugin 的static 的YAML 文件即/etc/kubernetes/manifests/nvidia-device-plugin.yml 更新为以下内容:
apiVersion: v1kind: Podmetadata: annotations: scheduler.alpha.kubernetes.io/critical pod: "" labels: component: nvidia device plugin name: nvidia device plugin namespace: kube systemspec: priorityClassName: system node critical hostNetwork: true containers: image: registry <REGION ID> vpc.ack.aliyuncs.com/acs/k8s device plugin:v0.9. 1 3f942982 aliyun # Image 中的<REGION ID>需要替换为您节点所在的阿里云的 Region Id,例如cn beijing、cn hangzhou 等。 name: nvidia device plugin ctr args: [" fail on init error=false"," pass device specs=true"," device i d strategy=index"] livenessProbe: httpGet: path: /health port: 30080 initialDelaySeconds: 10 timeoutSeconds: 2 periodSeconds: 5 failureThreshold: 3 resources: limits: memory: "200Mi" cpu: "500m" env: name: DP DISABLE HEALTHCHECKS value: all securityContext: allowPrivilegeEscalation: false capabilities: drop: ["ALL"] volumeMounts: name: device plugin mountPath: /var/lib/kubelet/device plugins name: device plugin config mountPath: /etc/nvidia device plugin volumes: name: device plugin hostPath: path: /var/lib/kubelet/device plugins name: device plugin config hostPath: path: /etc/nvidia device plugin type: DirectoryOrCreate
相关文档
如遇到 GPU 节点相关问题,请参见自助诊断 GPU 节点问题、GPU FAQ。如需了解共享 GPU 调度的相关信息,请参见共享 GPU 调度概述。