问题摘要:
我们正在使用DCGM 出口商收集有关 GPU 工作负载的指标。在 GKE 上部署时,导出器不会返回有关其他 pod 或容器的 GPU 信息(当预期返回该信息时)。
该导出器在每个节点上运行一个副本,并查询Pod 资源 API由 kubelet 公开以获取所需数据。与其他 kubernetes 发行版相比,GKE 上似乎禁用了此 API 或配置不同。
问题演示:
我们的测试场景包括部署一个在其上运行的单节点集群以及使用 GPU 资源的dcgm-exporter
单副本部署(在此演示中称为)。cuda-test
我们通过其端点查询出口商/metrics
,结果如下。
在 rancher k3s 上运行时v1.20.4+k3s1
,container
和pod
标签包含一个值:
dcgm_sm_clock{gpu="0",UUID="GPU-a2bf9768-0411-f0bb-791c-67d5fec65e2f",device="nvidia0",Hostname="dcgm-exporter-xzpt9",container="cuda-test-main",namespace="default",pod="cuda-test-687bddf45c-qjl6x"} 1860
dcgm_memory_clock{gpu="0",UUID="GPU-a2bf9768-0411-f0bb-791c-67d5fec65e2f",device="nvidia0",Hostname="dcgm-exporter-xzpt9",container="cuda-test-main",namespace="default",pod="cuda-test-687bddf45c-qjl6x"} 9501
dcgm_gpu_temp{gpu="0",UUID="GPU-a2bf9768-0411-f0bb-791c-67d5fec65e2f",device="nvidia0",Hostname="dcgm-exporter-xzpt9",container="cuda-test-main",namespace="default",pod="cuda-test-687bddf45c-qjl6x"} 41
但是在 GKE 上运行时v1.19.8-gke.1600
,container
和pod
标签都具有空值:
dcgm_sm_clock{gpu="0",UUID="GPU-bcb71627-8b00-b4aa-70d7-ce39fd6cbb01",device="nvidia0",Hostname="dcgm-exporter-ln6x4",container="",namespace="",pod=""} 585
dcgm_memory_clock{gpu="0",UUID="GPU-bcb71627-8b00-b4aa-70d7-ce39fd6cbb01",device="nvidia0",Hostname="dcgm-exporter-ln6x4",container="",namespace="",pod=""} 5000
dcgm_gpu_temp{gpu="0",UUID="GPU-bcb71627-8b00-b4aa-70d7-ce39fd6cbb01",device="nvidia0",Hostname="dcgm-exporter-ln6x4",container="",namespace="",pod=""} 76
我找不到任何关于 GKE 是否禁用此 API(在 k8s 中引入1.13
)或限制某些值公开的信息。我想了解有关此事的更多信息并找到解决方案,以便导出器可以访问和收集信息。
答案1
看来,将参数添加--kubernetes-gpu-id-type device-name
到就dcgm-exporter
可以了。
在 GKE 上,显然,pod 资源 API 没有返回 GPU 的值uid
(这是参数的默认值),这就是有关 pod 和容器的信息被跳过的原因。