Monitoring
Google Kubernetes Engine 上是否禁用了 Pod 資源 API?
問題總結:
我們正在使用DCGM Exporter收集有關 GPU 工作負載的指標。在 GKE 上部署時,導出器不會返回有關其他 pod 或容器的 GPU 資訊(當它應該返回該資訊時)。
該導出器在每個節點上執行一個副本,並查詢kubelet 公開的Pod 資源 API以獲取所需的數據。似乎在 GKE 上,與其他 kubernetes 發行版相比,此 API 被禁用或配置不同。
問題展示:
我們的測試場景包括部署一個
dcgm-exporter
在其上執行的單節點集群以及一個cuda-test
使用 GPU 資源的單副本部署(在此展示中稱為)。我們通過exporter的
/metrics
endpoint查詢exporter,結果如下。在 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
)或限制某些值被公開的任何資訊。我想了解有關此事的更多資訊並找到解決方案,以便出口商訪問和收集資訊。
似乎將參數添加
--kubernetes-gpu-id-type device-name
到了dcgm-exporter
它。顯然,在 GKE 上,pod 資源 API 不會返回 GPU 的值
uid
(這是參數的預設值),這就是跳過有關 pod 和容器的資訊的原因。