Monitoring

Google Kubernetes Engine 上是否禁用了 Pod 資源 API?

  • May 6, 2021

問題總結:

我們正在使用DCGM Exporter收集有關 GPU 工作負載的指標。在 GKE 上部署時,導出器不會返回有關其他 pod 或容器的 GPU 資訊(當它應該返回該資訊時)。

該導出器在每個節點上執行一個副本,並查詢kubelet 公開的Pod 資源 API以獲取所需的數據。似乎在 GKE 上,與其他 kubernetes 發行版相比,此 API 被禁用或配置不同。

問題展示:

我們的測試場景包括部署一個dcgm-exporter在其上執行的單節點集群以及一個cuda-test使用 GPU 資源的單副本部署(在此展示中稱為)。

我們通過exporter的/metricsendpoint查詢exporter,結果如下。

在 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)或限制某些值被公開的任何資訊。我想了解有關此事的更多資訊並找到解決方案,以便出口商訪問和收集資訊。

似乎將參數添加--kubernetes-gpu-id-type device-name到了dcgm-exporter它。

顯然,在 GKE 上,pod 資源 API 不會返回 GPU 的值uid(這是參數的預設值),這就是跳過有關 pod 和容器的資訊的原因。

引用自:https://serverfault.com/questions/1062677