
# 创建使用GPU虚拟化多卡均分调度功能的工作负载之后，大量Pod执行失败
#### 问题现象
创建使用GPU虚拟化多卡均分调度功能的工作负载之后，大量的GPU Pod执行失败。具体示例如下：
```
kubectl get pods
```
回显结果如下：
```
NAME                         READY   STATUS                     RESTARTS   AGE
test-586cf9464c-54g4s        0/1     UnexpectedAdmissionError    0         57s
test-586cf9464c-58n6d        0/1     UnexpectedAdmissionError    0         10s
test1-689cf9462f-5bzcv       0/1     UnexpectedAdmissionError    0         58s
...
```
#### 问题原因
使用GPU虚拟化多卡均分调度功能，集群版本与CCE AI套件（NVIDIA GPU）插件版本需要适配，具体如下：
- 插件版本在2.1.41及以上时：集群版本在1.27.16-r20、1.28.15-r10、1.29.10-r10、1.30.6-r10、v1.31.4-r0及以上。
- 插件版本在2.7.57及以上时：集群版本在1.28.15-r10、1.29.10-r10、1.30.6-r10、v1.31.4-r0及以上。
 
当集群版本不兼容时，若节点的GPU虚拟化资源未耗尽，则Pod可以正常调度。但在资源耗尽后，当前版本的kubelet无法正确处理多卡均分调度请求，导致持续调度失败的Pod堆积，引发内存泄漏，最终造成批量Pod执行失败。
#### 解决方案
- 如果需要继续使用GPU虚拟化多卡均分调度功能，则需要先将执行失败的工作负载删除，再将集群升级至适配版本，升级的具体步骤请参见[集群升级流程](https://support.huaweicloud.com/usermanual-cce/cce_10_0197.html#section1)。集群升级成功后，重新创建对应工作负载，即可正常调度。
- 如果不需要使用GPU虚拟化多卡均分调度功能，则需要依次重启对应节点的kubelet组件，以恢复其性能。具体步骤如下：
  1. 执行以下命令，查看问题Pod的所在节点，记录所有节点IP，后续需要根据节点IP依次恢复节点kubelet组件。
     ```
     kubectl get pod -l volcano.sh/gpu-num  -owide
     ```
     回显结果如下：
     ```
     NAME                        READY   STATUS                      RESTARTS   AGE      IP              NODE
     test-586cf9464c-54g4s       0/1     UnexpectedAdmissionError    0          5m57s    <none>          11.84.252.4
     test-586cf9464c-58n6d       0/1     UnexpectedAdmissionError    0          5m10s    172.19.0.24     11.84.252.4
     test-586cf9464c-5bzcv       0/1     UnexpectedAdmissionError    0          5m58s    <none>          11.84.252.4
     test-586cf9464c-6bb5d       0/1     UnexpectedAdmissionError    0          6m15s    <none>          11.84.252.4
     test-586cf9464c-6r2bq       0/1     UnexpectedAdmissionError    0          5m11s    <none>          11.84.252.4
     test-586cf9464c-6rcpl       0/1     UnexpectedAdmissionError    0          6m11s    172.19.0.21     11.84.252.4
     ...
     ```
     
  
  2. 执行以下命令，删除使用GPU虚拟化多卡均分调度的工作负载，deployment请替换为对应的工作负载类型，test请替换成对应的工作负载名称。
     ```
     kubectl delete deployment test  # 删除无状态工作负载test
     ```
     回显结果如下：
     ```
     deployment.apps/test deleted
     ```
     
  
  3. 依次登录[1]中涉及的节点，执行以下命令，重启kubelet服务。
     ```
     systemctl restart kubelet
     ```
     在回显中输入节点密码，无错误提示则说明重启成功。重启成功后，之前执行失败的非多卡均分调度的Pod将正常调度。
     
   
 
