Project-HAMi / HAMi

Heterogeneous AI Computing Virtualization Middleware
http://project-hami.io/
Apache License 2.0
956 stars 197 forks source link

卸载hami后,资源标签Resource name:nvidia.com/vgpu 未清理 #597

Closed Hugh-yw closed 2 weeks ago

Hugh-yw commented 2 weeks ago

问题描述: 卸载hami组件后,集群中的节点资源标签Resource name:nvidia.com/vgpu 未清理

~# helm uninstall -n hami-vgpu
release "hami" uninstalled

~# kubectl get all -n hami-vgpu 
No resources found in hami-vgpu namespace.

~# kubectl get node ser-inspur-01 -oyaml|grep capacity -A 10
  capacity:
    cpu: "128"
    ephemeral-storage: 457775312Ki
    hugepages-1Gi: "0"
    hugepages-2Mi: "0"
    memory: 2113443256Ki
    nvidia.com/gpu: "8"
    nvidia.com/vgpu: "0"    # 此处为什么没有自动清理
    pods: "520"
    volcano.sh/gpu-memory: "0"    # 此处为什么没有自动清理
    volcano.sh/gpu-number: "0"      # 此处为什么没有自动清理

~# ls -lrth /var/lib/kubelet/device-plugins/
total 4.0K
srwxr-xr-x 1 root root    0 Nov  7 11:02 kubelet.sock
-rw-r--r-- 1 root root    0 Nov  7 11:02 DEPRECATION
srwxr-xr-x 1 root root    0 Nov  7 11:02 nvidia-gpu.sock
-rw------- 1 root root 2.0K Nov  7 11:07 kubelet_internal_checkpoint

Environment:

Nimbus318 commented 2 weeks ago
  1. fuser -v /var/lib/kubelet/device-plugins/nvidia-gpu.sock 确认一下这个 sock 的使用状态,如果有进程在用,再 ps -p <PID> -o pid,cmd 看看进程的具体情况
  1. 然后这里

    volcano.sh/gpu-memory: "0" # 此处为什么没有自动清理 volcano.sh/gpu-number: "0" # 此处为什么没有自动清理

    应该是 https://github.com/Project-HAMi/volcano-vgpu-device-plugin 这个 dp 上报的

Hugh-yw commented 2 weeks ago
  1. 使用fuser -v /var/lib/kubelet/device-plugins/nvidia-gpu.sock确认一下这个袜子的使用状态,如果有进程在使用,再ps -p <PID> -o pid,cmd看看进程的具体情况
  2. 然后这里

    Volcano.sh/gpu-memory: "0" # 这里为什么没有自动清理 volcano.sh/gpu-number: "0" # 这里为什么没有自动清理

    应该是https://github.com/Project-HAMi/volcano-vgpu-device-plugin这个dp上报的

这个是默认安装了gpu-operator引用的吧,安装完hami-device-plugin,然后卸载 发现 nvidia.com/vgpu: "0" 还在节点资源中

~# fuser -v /var/lib/kubelet/device-plugins/nvidia-gpu.sock
                     USER        PID ACCESS COMMAND
/var/lib/kubelet/device-plugins/nvidia-gpu.sock:
                     root      23933 F.... nvidia-device-p
root@ser-inspur-01:~# 
root@ser-inspur-01:~# ps -p 23933 -o pid,cmd
  PID CMD
23933 nvidia-device-plugin

有尝试过重启kubelet和 nvidia-device-plugin @Nimbus318

Hugh-yw commented 2 weeks ago
  1. 使用fuser -v /var/lib/kubelet/device-plugins/nvidia-gpu.sock确认一下这个袜子的使用状态,如果有进程在使用,再ps -p <PID> -o pid,cmd看看进程的具体情况
  2. 然后这里

    Volcano.sh/gpu-memory: "0" # 这里为什么没有自动清理 volcano.sh/gpu-number: "0" # 这里为什么没有自动清理

    应该是https://github.com/Project-HAMi/volcano-vgpu-device-plugin这个dp上报的

这个是默认安装了gpu-operator引用的吧,安装完成hami-device-plugin,卸载发现nvidia.com/vgpu: "0" 剩余节点资源中

~# fuser -v /var/lib/kubelet/device-plugins/nvidia-gpu.sock
                     USER        PID ACCESS COMMAND
/var/lib/kubelet/device-plugins/nvidia-gpu.sock:
                     root      23933 F.... nvidia-device-p
root@ser-inspur-01:~# 
root@ser-inspur-01:~# ps -p 23933 -o pid,cmd
  PID CMD
23933 nvidia-device-plugin

尝试重新启动 kubelet 和 nvidia-device-plugin@Nimbus318

Hugh-yw commented 2 weeks ago
  1. 使用fuser -v /var/lib/kubelet/device-plugins/nvidia-gpu.sock确认一下这个袜子的使用状态,如果有进程在使用,再ps -p <PID> -o pid,cmd看看进程的具体情况
  2. 然后这里

    Volcano.sh/gpu-memory: "0" # 这里为什么没有自动清理 volcano.sh/gpu-number: "0" # 这里为什么没有自动清理

    应该是https://github.com/Project-HAMi/volcano-vgpu-device-plugin这个dp上报的

这个是默认安装了gpu-operator引用的吧,安装完成hami-device-plugin,卸载发现nvidia.com/vgpu: "0" 剩余节点资源中

~# fuser -v /var/lib/kubelet/device-plugins/nvidia-gpu.sock
                     USER        PID ACCESS COMMAND
/var/lib/kubelet/device-plugins/nvidia-gpu.sock:
                     root      23933 F.... nvidia-device-p
root@ser-inspur-01:~# 
root@ser-inspur-01:~# ps -p 23933 -o pid,cmd
  PID CMD
23933 nvidia-device-plugin

尝试重新启动 kubelet 和 nvidia-device-plugin@Nimbus318

此问题已解决,需要调用apiserver接口去删除扩展资源

curl --header "Content-Type: application/json-patch+json" \
  --request PATCH \
  --data '[{"op": "remove", "path": "/status/capacity/nvidia.com~1vgpu"}]' \
  http://localhost:8001/api/v1/nodes/ser-inspur-01/status