本頁面說明如何解決 Google Kubernetes Engine (GKE) 叢集的系統指標相關問題。
叢集指標未顯示在 Cloud Monitoring 中
請確認您已在專案中啟用 Monitoring API 和 Logging API。您也應確認可以在Google Cloud 控制台的 Cloud Monitoring 總覽中查看專案。
如果問題持續發生,請檢查下列可能原因:
是否已在叢集上啟用監控功能?
根據預設,透過 Google Cloud 控制台和 Google Cloud CLI 建立的叢集會啟用監控功能,但您可以在 Google Cloud 控制台中點選叢集的詳細資料,執行下列指令來驗證:
gcloud container clusters describe CLUSTER_NAME這個指令的輸出內容應在
monitoringConfig區段的enableComponents清單中包含SYSTEM_COMPONENTS,類似以下範例:monitoringConfig: componentConfig: enableComponents: - SYSTEM_COMPONENTS如果未啟用監控功能,請執行下列指令來啟用:
gcloud container clusters update CLUSTER_NAME --monitoring=SYSTEM叢集建立或啟用監控功能多久了?
新叢集的指標最多可能需要一小時,才會開始顯示在 Cloud Monitoring 中。
叢集中的
kube-system命名空間是否正在執行heapster或gke-metrics-agent(OpenTelemetry Collector)?叢集資源不足,因此這個 Pod 可能無法排定工作負載。執行
kubectl get pods --namespace=kube-system並檢查名稱中含有heapster或gke-metrics-agent的 Pod,確認 Heapster 或 OpenTelemetry 是否正在執行。叢集的控制層是否能與節點通訊?
Cloud Monitoring 依賴這項通訊。您可以執行下列指令,檢查控制層是否與節點通訊:
kubectl logs POD_NAME如果這個指令傳回錯誤,則問題可能是 SSH 通道所致。如需疑難排解步驟,請參閱「排解 SSH 問題」。
找出並修正寫入指標的權限問題
GKE 會使用附加至節點的 IAM 服務帳戶,執行記錄和監控等系統工作。這些節點服務帳戶至少須具備專案的 Kubernetes Engine 預設節點服務帳戶 (roles/container.defaultNodeServiceAccount) 角色。根據預設,GKE 會使用Compute Engine 預設服務帳戶 (系統會在專案中自動建立) 做為節點服務帳戶。
如果貴機構強制執行iam.automaticIamGrantsForDefaultServiceAccounts機構政策限制,專案中的預設 Compute Engine 服務帳戶可能不會自動取得 GKE 的必要權限。
如要找出問題,請檢查叢集系統監控工作負載中的
401錯誤:[[ $(kubectl logs -l k8s-app=gke-metrics-agent -n kube-system -c gke-metrics-agent | grep -cw "Received 401") -gt 0 ]] && echo "true" || echo "false"如果輸出內容為
true,表示系統工作負載發生 401 錯誤,這表示缺少權限。如果輸出內容為false, 請略過其餘步驟,並嘗試其他疑難排解程序。
如要將 roles/container.defaultNodeServiceAccount 角色授予 Compute Engine 預設服務帳戶,請完成下列步驟:
控制台
- 前往「歡迎」頁面:
- 在「專案編號」欄位中,按一下「複製到剪貼簿」。
- 前往「IAM」(身分與存取權管理) 頁面:
- 按一下 「授予存取權」。
- 在「New principals」(新主體) 欄位中,指定下列值:
將PROJECT_NUMBER-compute@developer.gserviceaccount.comPROJECT_NUMBER替換為您複製的專案編號。 - 在「選取角色」選單中,選取「Kubernetes Engine 預設節點服務帳戶」角色。
- 按一下 [儲存]。
gcloud
- 找出 Google Cloud 專案編號:
gcloud projects describe PROJECT_ID \ --format="value(projectNumber)"
將
PROJECT_ID替換為專案 ID。輸出結果會與下列內容相似:
12345678901
- 將
roles/container.defaultNodeServiceAccount角色授予 Compute Engine 預設服務帳戶:gcloud projects add-iam-policy-binding PROJECT_ID \ --member="serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com" \ --role="roles/container.defaultNodeServiceAccount"
將
PROJECT_NUMBER替換為上一個步驟中的專案編號。
確認指標代理程式有足夠的記憶體
如果嘗試上述疑難排解步驟後,指標仍未顯示,可能是指標代理程式的記憶體不足。
在大多數情況下,預設分配給 GKE 指標代理程式的資源就已足夠。不過,如果 DaemonSet 持續當機,您可以按照下列指示查看終止原因:
取得 GKE 指標代理程式 Pod 的名稱:
kubectl get pods -n kube-system -l component=gke-metrics-agent找出狀態為
CrashLoopBackOff的 Pod。輸出結果會與下列內容相似:
NAME READY STATUS RESTARTS AGE gke-metrics-agent-5857x 0/1 CrashLoopBackOff 6 12m描述狀態為
CrashLoopBackOff的 Pod:kubectl describe pod POD_NAME -n kube-system將
POD_NAME替換為上一個步驟中的 Pod 名稱。如果 Pod 的終止原因是
OOMKilled,表示代理程式需要額外記憶體。輸出結果會與下列內容相似:
containerStatuses: ... lastState: terminated: ... exitCode: 1 finishedAt: "2021-11-22T23:36:32Z" reason: OOMKilled startedAt: "2021-11-22T23:35:54Z"為指標代理程式失敗的節點新增節點標籤。您可以使用永久或暫時節點標籤。建議您嘗試再增加 20 MB。如果代理程式持續異常終止,您可以再次執行這個指令,並將節點標籤替換為要求更多額外記憶體的標籤。
如要使用永久標籤更新節點集區,請執行下列指令:
gcloud container node-pools update NODEPOOL_NAME \ --cluster=CLUSTER_NAME \ --node-labels=ADDITIONAL_MEMORY_NODE_LABEL \ --location=COMPUTE_LOCATION更改下列內容:
NODEPOOL_NAME:節點集區的名稱。CLUSTER_NAME:現有叢集的名稱。ADDITIONAL_MEMORY_NODE_LABEL:其中一個額外記憶體節點標籤;請使用下列其中一個值:- 如要加購 10 MB,請按
cloud.google.com/gke-metrics-agent-scaling-level=10。 - 如要加購 20 MB,請按照下列步驟操作:
cloud.google.com/gke-metrics-agent-scaling-level=20 - 如要加購 50 MB,請按
cloud.google.com/gke-metrics-agent-scaling-level=50 - 如要加購 100 MB:
cloud.google.com/gke-metrics-agent-scaling-level=100 - 如要加購 200 MB:
cloud.google.com/gke-metrics-agent-scaling-level=200 - 如要新增 500 MB:
cloud.google.com/gke-metrics-agent-scaling-level=500
- 如要加購 10 MB,請按
COMPUTE_LOCATION:叢集的 Compute Engine 位置。
或者,您也可以使用下列指令,新增升級後不會保留的暫時節點標籤:
kubectl label node/NODE_NAME \ ADDITIONAL_MEMORY_NODE_LABEL --overwrite更改下列內容:
NODE_NAME:受影響指標代理程式的節點名稱。ADDITIONAL_MEMORY_NODE_LABEL:額外記憶體節點標籤之一;請使用上述範例中的其中一個值。
後續步驟
如果遇到 Cloud Logging 代理程式相關問題,請參閱疑難排解說明文件。
如果說明文件無法解決您的問題,請參閱「取得支援」一文,瞭解如何取得進一步協助,包括下列主題的建議:
- 向 Cloud Customer Care 團隊申請開立支援案件。
- 在 StackOverflow 提問,並使用
google-kubernetes-engine標記搜尋類似問題,向社群尋求支援。你也可以加入#kubernetes-engineSlack 頻道,取得更多社群支援。 - 使用公開 Issue Tracker 提出問題或功能要求。