Google Kubernetes Engine 上的 Pod Resources API 是否被禁用?

Google Kubernetes Engine 上的 Pod Resources API 是否被禁用?

问题摘要:

我们正在使用DCGM 出口商收集有关 GPU 工作负载的指标。在 GKE 上部署时,导出器不会返回有关其他 pod 或容器的 GPU 信息(当预期返回该信息时)。

该导出器在每个节点上运行一个副本,并查询Pod 资源 API由 kubelet 公开以获取所需数据。与其他 kubernetes 发行版相比,GKE 上似乎禁用了此 API 或配置不同。

问题演示:

我们的测试场景包括部署一个在其上运行的单节点集群以及使用 GPU 资源的dcgm-exporter单副本部署(在此演示中称为)。cuda-test

我们通过其端点查询出口商/metrics,结果如下。

在 rancher k3s 上运行时v1.20.4+k3s1containerpod标签包含一个值:

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.1600containerpod标签都具有空值:

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 和容器的信息被跳过的原因。

相关内容