7.4. kubectl-plugins

kubectl 插件是 Kubernetes 提供的一种扩展机制,允许用户通过独立可执行文件为 kubectl 添加自定义子命令,从而在不修改核心代码的前提下扩展其功能。 基于此机制,为了优化沐曦云原生产品的使用体验,沐曦提供了 kubectl-metax 插件,旨在帮助用户更便捷地获取集群及相关资源信息。

7.4.1. 安装与补全配置

安装 kubectl-metax 插件需要使用名称格式为 kubectl-plugins-packages.0.15.0.tar.gz 的离线压缩包,用户可解压直接安装使用。 解压缩后,执行以下安装命令,将插件安装到宿主机上即可使用本插件:

kubectl-plugins-0.15.0.run install

配置自动补全,通过以下命令配置即可实现 kubectl-metax <Tab> 补全体验。

echo 'source <(kubectl completion bash)' >> ~/.bashrc
echo 'source <(kubectl-metax completion bash)' >> ~/.bashrc
source ~/.bashrc

7.4.2. 卸载方式

kubectl-plugins-0.15.0.run uninstall
# 如果配置了自动补全,删除 kubectl 的补全配置
sed -i '/source <(kubectl completion bash)/d' ~/.bashrc
# 如果配置了自动补全,删除 kubectl-metax 的补全配置
sed -i '/source <(kubectl-metax completion bash)/d' ~/.bashrc

7.4.3. sgpu插件

为简化集群管理员对 sGPU 资源(算力、显存)的监控与管理,沐曦提供了专用的插件。该插件支持资源统计与快速定位,能够直观展示节点上的 sGPU 剩余资源、使用状态及关联容器信息。

包含子命令如下:

  • show-node

  • show-pod

  • show-device

7.4.3.1. 使用示例

表 7.15 全局参数列表

参数

描述

--kubeconfig

指定 kubeconfig 文件路径

-n, --namespace

指定namespace,默认使用当前上下文的namespace

show-node

以节点维度显示节点的关于GPU算力显存以及sGPU资源整体使用情况,并且支持显式指定需要的节点。当不加参数时,显示集群中所有节点的sGPU使用情况。

# 默认情况 显示集群中所有节点的sGPU资源使用情况
metax@k8s-master:~$ kubectl metax sgpu show-node
NODENAME       SGPU(FREE/TOTAL)  COMPUTE(FREE/TOTAL)  VRAM(FREE/TOTAL)
k8s-worker-1   30/32             80/200(%)            57344/65536(Mi)
k8s-worker-2   32/32             200/200(%)           65536/65536(Mi)
metax@k8s-master:~$ kubectl metax sgpu show-node k8s-worker-1
NODENAME       SGPU(FREE/TOTAL)  COMPUTE(FREE/TOTAL)  VRAM(FREE/TOTAL)
k8s-worker-1   30/32             80/200(%)            57344/65536(Mi)

其中 SGPU(FREE/TOTAL) 为节点上sGPU资源剩余与总量, COMPUTE(FREE/TOTAL) 为节点上算力剩余与总量,其中节点上一张GPU卡的算力为 100%VRAM(FREE/TOTAL) 为节点上显存剩余与总量。

show-device

支持查看节点上设备的相关信息,包括当前所有节点上GPU相关信息(算力显存分配情况、 Qos 、sGPU的 UUID 以及使用该sGPU的 podcontainernamespace )并且支持显式指定需要的节点。 默认显示该节点上使用sGPU资源的相关信息,如果没有使用sGPU将不显示内容。

表 7.16 show-device参数列表

参数

描述

--gpu GPU-UUID

过滤只显示指定GPU相关的信息

--summary

只显示GPU信息,不显示sGPU资源的相关信息

--summary-allocated

显示目前节点上GPU资源信息以及sGPU资源使用情况以及他们之间的父子设备关系

当需要查看节点上使用sGPU资源的相关信息时,直接使用以下命令即可:

metax@k8s-master:~$ kubectl metax sgpu show-device
NODENAME     SGPU-UUID                                GPU-UUID                                 COMPUTE VRAM     MODEL
k8s-worker-1 GPU-33f3a1d1-ac03-34da-8dcd-2b3b945dfc3e GPU-7a86c97a-09f9-521d-de3a-d3de9303e60f 60%     4096Mi   sgpu
k8s-worker-1 GPU-287a75d7-aa7c-7916-38de-f7812e64830a GPU-5377c1c1-3cfe-5ed0-2d61-8b8ba47292f0 60%     4096Mi   sgpu

当需要查看节点上所有GPU算力显存分配情况的信息时,可以使用 --summary 命令:

metax@k8s-master:~$ kubectl metax sgpu show-device --summary
NODENAME     SGPU(FREE/TOTAL) COMPUTE(FREE/TOTAL) VRAM(FREE/TOTAL)   QOS          MODEL
k8s-worker-1 15/16            40/100(%)          28672/32768(Mi)   best-effort  sgpu
k8s-worker-1 15/16            40/100(%)          28672/32768(Mi)   best-effort  sgpu
k8s-worker-2 16/16            100/100(%)         32768/32768(Mi)   /            native
k8s-worker-2 16/16            100/100(%)         32768/32768(Mi)   /            native

metax@k8s-master:~$ kubectl metax sgpu show-device k8s-worker-1 --summary
NODENAME     SGPU(FREE/TOTAL) COMPUTE(FREE/TOTAL) VRAM(FREE/TOTAL)   QOS          MODEL
k8s-worker-1 15/16            40/100(%)          28672/32768(Mi)   best-effort  sgpu
k8s-worker-1 15/16            40/100(%)          28672/32768(Mi)   best-effort  sgpu

当需要查看目前节点上GPU资源相关信息、sGPU资源使用情况以及他们之间的父子设备关系时,可以使用 --summary-allocated 命令:

# --summary-allocated 显示的SGPU COMPUTE VRAM 为该设备使用率
metax@k8s-master:~$ kubectl metax sgpu show-device --summary-allocated
NODENAME     GPU-UUID                                 SGPU COMPUTE VRAM    QOS          MODEL PODNAME
k8s-worker-1 GPU-5377c1c1-3cfe-5ed0-2d61-8b8ba47292f0 1    60%     4096Mi  best-effort  sgpu  sample-pod-jzk5l
           GPU-287a75d7-aa7c-7916-38de-f7812e64830a        60%     4096Mi  best-effort  sgpu  sample-pod-jzk5l
k8s-worker-1 GPU-7a86c97a-09f9-521d-de3a-d3de9303e60f 1    60%     4096Mi  best-effort  sgpu  sample-pod-jzk5l
           GPU-33f3a1d1-ac03-34da-8dcd-2b3b945dfc3e        60%     4096Mi  best-effort  sgpu  sample-pod-jzk5l
k8s-worker-2 GPU-5377c1c1-3cfe-5ed0-2d61-8b8ba47292f0 0    0%      0Mi     /            native
k8s-worker-2 GPU-7a86c97a-09f9-521d-de3a-d3de9303e60f 0    0%      0Mi     /            native

metax@k8s-master:~$ kubectl metax sgpu show-device k8s-worker-1 --summary-allocated
NODENAME     GPU-UUID                                 SGPU COMPUTE   VRAM    QOS        MODEL PODNAME
k8s-worker-1 GPU-5377c1c1-3cfe-5ed0-2d61-8b8ba47292f0 1    60%     4096Mi  best-effort  sgpu  sample-pod-jzk5l
           GPU-287a75d7-aa7c-7916-38de-f7812e64830a        60%     4096Mi  best-effort  sgpu  sample-pod-jzk5l
k8s-worker-1 GPU-7a86c97a-09f9-521d-de3a-d3de9303e60f 1    60%     4096Mi  best-effort  sgpu  sample-pod-jzk5l
           GPU-33f3a1d1-ac03-34da-8dcd-2b3b945dfc3e        60%     4096Mi  best-effort  sgpu  sample-pod-jzk5l

show-pod

指定pod 显示 pod 关于sGPU资源的使用情况以及相关信息(容器名、容器使用sGPU数量、使用sGPU的 UUID、所属 GPUUUID 以及使用的算力显存)。

表 7.17 show-pod参数列表

参数

描述

-owide

额外显示pod的appclass、 qos、 namespace、 nodename等信息

metax@k8s-master:~$ kubectl metax sgpu show-pod sample-pod-jzk5l
PODNAME             CONTAINER           SGPU    SGPU-UUID                                GPU-UUID                                  COMPUTE   VRAM
sample-pod-jzk5l    ubuntu-container    2       GPU-33f3a1d1-ac03-34da-8dcd-2b3b945dfc3e GPU-7a86c97a-09f9-521d-de3a-d3de9303e60f  60%       4096Mi
                                                GPU-287a75d7-aa7c-7916-38de-f7812e64830a GPU-5377c1c1-3cfe-5ed0-2d61-8b8ba47292f0  60%       4096Mi

metax@k8s-master:~$ kubectl metax sgpu show-pod sample-pod-jzk5l -owide
PODNAME             APPCLASS  QOS         NAMESPACE  NODENAME       CONTAINER           SGPU  SGPU-UUID                                GPU-UUID                                 COMPUTE  VRAM
sample-pod-jzk5l    normal    best-effort default    k8s-worker-1   ubuntu-container    2     GPU-33f3a1d1-ac03-34da-8dcd-2b3b945dfc3e GPU-7a86c97a-09f9-521d-de3a-d3de9303e60f 60%      4096Mi
                                                                                              GPU-287a75d7-aa7c-7916-38de-f7812e64830a GPU-5377c1c1-3cfe-5ed0-2d61-8b8ba47292f0 60%      4096Mi