升级容器服务ACK的共享GPU专业版集群后GPU共享调度失效
问题描述
升级集群服务ACK中的共享GPU专业版集群后,kube-scheduler组件中关于ack-cgpu应用的extender配置会丢失,导致集群的GPU共享调度无法正常工作。
问题原因
ACK中的共享GPU专业版集群升级时,现有配置将被默认配置覆盖,导致extender配置丢失。
解决方案
请参考下列步骤进行处理。
步骤一:检查extender配置
- 通过远程登录到所有master节点。
- 逐个检查master节点中的以下文件。
/etc/kubernetes/manifests/kube-scheduler.yaml
- 检查该文件中是否存在类似下图中与
scheduler-extender-config.json
相关的配置。 - 如果不存在上图中相关的配置,请继续参考下文内容进行修复。如果存在,则说明extender配置未丢失,无需进行修复。
步骤二:运行修复程序
- 通过远程登录到任意一个master节点。
- 在master节点上执行以下命令,下载修复工具。
wget http://aliacs-k8s-cn-beijing.oss-cn-beijing.aliyuncs.com/gpushare/extender-config-update-linux -O /usr/local/bin/extender-config-update
- 执行以下命令,为修复工具添加可执行权限。
chmod +x /usr/local/bin/extender-config-update
- 执行以下命令,运行修复工具。
extender-config-update
- 执行以下命令,检查kube-scheduler的运行状态,确认其重启过,并且当前状态为运行(Running)状态。
kubectl get po -n kube-system -l component=kube-scheduler
系统显示类似如下,其中AGE为14s,表示刚重启过,说明修复工具已生效。NAME READY STATUS RESTARTS AGE kube-scheduler-cn-beijing.192.168.8.37 1/1 Running 0 14s kube-scheduler-cn-beijing.192.168.8.38 1/1 Running 0 14s kube-scheduler-cn-beijing.192.168.8.39 1/1 Running 0 14s
- 参考步骤一,确认
kube-scheduler.yaml
文件中extender相关配置已经复原,然后参考下一步骤,进行结果验证。
步骤三:结果验证
- 通过远程登录到任意一个master节点。
- 创建以下文件用于测试。
/tmp/cgpu-test.yaml
- 将以下内容写入
/tmp/cgpu-test.yaml
文件。apiVersion: apps/v1 kind: StatefulSet metadata: name: cgpu-test labels: app: cgpu-test spec: replicas: 3 serviceName: "cgpu-test" podManagementPolicy: "Parallel" selector: # define how the deployment finds the pods it manages matchLabels: app: cgpu-test template: # define the pods specifications metadata: labels: app: cgpu-test spec: containers: - name: cgpu-test image: registry.cn-shanghai.aliyuncs.com/tensorflow-samples/tensorflow-gpu-mem:10.0-runtime-centos7 command: - python3 - /app/main.py resources: limits: # GiB aliyun.com/gpu-mem: 3
说明:此文件用于创建3个测试pod,每个pod被分配3GiB的GPU显存。您可以根据现场实际情况调整gpu-mem的值。
- 执行以下命令,创建3个用于测试的pod。
kubectl create -f /tmp/cgpu-test.yaml
- 执行以下命令,确认3个pod都处于运行状态。
kubectl get po -l app=cgpu-test
系统显示类似如下。NAME READY STATUS RESTARTS AGE cgpu-test-0 1/1 Running 0 4m32s cgpu-test-1 1/1 Running 0 4m32s cgpu-test-2 1/1 Running 0 4m32s
- 从3个pod中任选其一,执行以下命令,查看其日志,确认容器实际申请的显存与
/tmp/cgpu-test.yaml
文件中指定的显存一致。kubectl logs cgpu-test-0 | grep "totalMemory"
说明:此处以cgpu-test-0为例,您可以自行调整。
系统显示类似如下。totalMemory: 3.15GiB freeMemory: 2.85GiB
- 执行以下命令,检查上述pod实际被分配的显存,确认其与
/tmp/cgpu-test.yaml
文件中指定的显存一致。kubectl exec -ti cgpu-test-0 nvidia-smi
说明:此处以cgpu-test-0为例,您可以自行调整。
系统显示类似如下,该pod实际被分配了3226MiB,符合预期,说明GPU共享调度恢复正常。如果GPU共享调度未生效,容器被分配的显存等于宿主机的GPU显存容量。Mon Apr 13 11:52:25 2020 +-----------------------------------------------------------------------------+ | NVIDIA-SMI 418.87.01 Driver Version: 418.87.01 CUDA Version: 10.1 | |-------------------------------+----------------------+----------------------+ | GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC | | Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. | |===============================+======================+======================| | 0 Tesla V100-SXM2... On | 00000000:00:07.0 Off | 0 | | N/A 33C P0 56W / 300W | 629MiB / 3226MiB | 1% Default | +-------------------------------+----------------------+----------------------+ +-----------------------------------------------------------------------------+ | Processes: GPU Memory | | GPU PID Type Process name Usage | |=============================================================================| +-----------------------------------------------------------------------------+
相关文档
适用于
- 容器服务ACK专有版集群已安装共享GPU普通版