在 Kubernetes 叢集中排除指標伺服器問題
瞭解如何針對 Kubernetes 叢集中的 metrics-server 進行除錯並解決常見問題,內容涵蓋問題徵兆、成因及逐步操作指南。
虛擬私有雲 經典基礎架構
下列症狀可能指出需要調整 metrics-server 資源:
-
metrics-server經常重新啟動。 -
刪除名稱空間會導致名稱空間停留在
Terminating狀態,且kubectl describe namespace包括報告度量值 API 探索錯誤的條件。 -
kubectl top pods、kubectl top nodes、其他kubectl指令或使用 Kubernetes API 來記載 Kubernetes 錯誤的應用程式,例如:The server is currently unable to handle the request (get pods.metrics.k8s.io)Discovery failed for some groups, 1 failing: unable to retrieve the complete list of server APIs: metrics.k8s.io/v1beta1: the server is currently unable to handle the request -
HorizontalPodAutoscalers (HPA) 不會擴充部署。
-
執行
kubectl get apiservices v1beta1.metrics.k8s.io會導致下列狀態:NAME SERVICE AVAILABLE AGE v1beta1.metrics.k8s.io kube-system/metrics-server False (FailedDiscoveryCheck) 139d
您的叢集在 kube-system 名稱空間中具有 metrics-server 部署所提供的度量服務。 metrics-server 資源要求及限制基於叢集裡的節點數目,並針對每個工作者節點具有 30 個或更少 Pod 的叢集進行最佳化。 如果記憶體要求太低,它會因記憶體不足錯誤而失敗,且回應會非常緩慢。 如果 CPU 要求太低,可能會因為 CPU 節流控制而使存活性及就緒性探測失敗。
metrics-server 的問題也可能導致其他區域發生問題。 如果控制平面無法使用 Konnectivity 與度量伺服器通訊,則無法使用度量 API。 許可控制 Webhook 可以防止控制平面建立 Pod,包括 metrics-server Pod。
請遵循下列步驟進行疑難排解。
-
驗證 metrics-server Pod 是否存在。
kubectl get pod -n kube-system -l k8s-app=metrics-server如果未列出任何 Pod,則
admission-controlWebhook 可能有問題。 請參閱 為何由於 Webhook 中斷而導致叢集作業失敗?。 -
驗證 apiserver 是否可以連接至
metrics-server。kubectl logs POD -n kube-system -c metrics-server --tail 5將
POD取代為先前顯示的 Pod 名稱。 傳回的任何日誌內容都不重要。如果您收到包含
<workerIP>:10250: getsockopt: connection timed out之類文字的錯誤訊息,請參閱kubectl指令逾時。 -
如果先前步驟未顯示問題,請調整
metrics-server的資源。 請參閱 調整叢集度量值提供者資源。