診斷叢集問題

gkectl 工具提供兩項指令,可排解叢集問題:gkectl diagnose clustergkectl diagnose snapshot。這些指令適用於管理員和使用者叢集。本文說明如何使用 gkectl diagnose 指令診斷叢集問題。

請注意,進階叢集有下列限制:

  • 1.31 版:gkectl diagnose 指令不支援進階叢集
  • 1.32 以上版本:進階叢集支援 gkectl diagnose 指令。

如要進一步瞭解如何使用 gkectl diagnose snapshot 指令建立快照,協助 Cloud Customer Care 診斷問題,請參閱「建立快照來診斷叢集」。

gkectl diagnose cluster

這項指令會對叢集執行健康檢查,並回報錯誤。這項指令會對下列元件執行健康狀態檢查:

  • vCenter
    • 憑證
    • DRS
    • 反相依性群組
    • 網路
    • 版本
    • 資料中心
    • Datastore
    • ResourcePool
    • 資料夾
    • 網路
  • 負載平衡器 (F5、Seesaw 或手動)
  • 使用者叢集和節點集區
  • 叢集物件
  • 使用者叢集的 Konnectivity 伺服器就緒狀態
  • 機器物件和對應的叢集節點
  • kube-systemgke-system 命名空間中的 Pod
  • 控制層
  • 叢集中的 vSphere 永久磁碟區
  • 使用者和管理員叢集 vCPU (虛擬 CPU) 和記憶體爭用信號
  • 使用者和管理員叢集 ESXi 預先設定的主機 CPU 使用率和記憶體用量警報
  • 時段 (TOD)
  • 已啟用 Dataplane V2 的叢集節點網路政策
  • Dataplane V2 節點代理程式的整體健康狀態

診斷管理員叢集

如要診斷管理員叢集,請指定管理員叢集的路徑:

gkectl diagnose cluster --kubeconfig=ADMIN_CLUSTER_KUBECONFIG

ADMIN_CLUSTER_KUBECONFIG 替換為管理員叢集 kubeconfig 檔案的路徑。

以下是 gkectl diagnose cluster 指令傳回的輸出範例:

Preparing for the diagnose tool...
Diagnosing the cluster......DONE

- Validation Category: Admin Cluster Connectivity
Checking VMs TOD (availability)...SUCCESS
Checking Konnectivity Server (readiness)...SUCCESS

- Validation Category: Admin Cluster F5 BIG-IP
Checking f5 (credentials, partition)...SUCCESS

- Validation Category: Admin Cluster VCenter
Checking Credentials...SUCCESS
Checking DRS enabled...SUCCESS
Checking Hosts for AntiAffinityGroups...SUCCESS
Checking Version...SUCCESS
Checking Datacenter...SUCCESS
Checking Datastore...SUCCESS
Checking Resource pool...SUCCESS
Checking Folder...SUCCESS
Checking Network...SUCCESS

- Validation Category: Admin Cluster
Checking cluster object...SUCCESS
Checking machine deployment...SUCCESS
Checking machineset...SUCCESS
Checking machine objects...SUCCESS
Checking kube-system pods...SUCCESS
Checking anthos-identity-service pods...SUCCESS
Checking storage...SUCCESS
Checking resource...SUCCESS
Checking virtual machine resource contention...SUCCESS
Checking host resource contention...SUCCESS
All validation results were SUCCESS.
Cluster is healthy!

如果目標叢集中的虛擬 IP 位址 (VIP) 有問題,請使用 --config 標記提供管理員叢集設定檔,以提供更多偵錯資訊。

gkectl diagnose cluster --kubeconfig ADMIN_CLUSTER_KUBECONFIG --config CLUSTER_CONFIG

CLUSTER_CONFIG 替換為管理或使用者叢集設定檔的路徑。

以下輸出範例顯示 gkectl diagnose cluster 指令現在可以正確連線至叢集,並檢查問題:

Failed to access the api server via LB VIP "...": ...
Try to use the admin master IP instead of problematic VIP...
Reading config with version "[CONFIG_VERSION]"
Finding the admin master VM...
Fetching the VMs in the resource pool "[RESOURCE_POOL_NAME]"...
Found the "[ADMIN_MASTER_VM_NAME]" is the admin master VM.
Diagnosing admin|user cluster "[TARGET_CLUSTER_NAME]"...
...

診斷使用者叢集

如要診斷使用者叢集,請務必指定使用者叢集名稱。如要取得使用者叢集名稱,請執行下列指令:

kubectl get cluster --kubeconfig=USER_CLUSTER_KUBECONFIG

USER_CLUSTER_KUBECONFIG 替換為使用者叢集 kubeconfig 檔案的路徑。

指定使用者叢集名稱和設定檔,如下所示:

gkectl diagnose cluster --kubeconfig=ADMIN_CLUSTER_KUBECONFIG \
    --cluster-name=USER_CLUSTER_NAME

USER_CLUSTER_NAME 替換為使用者叢集的名稱。

以下是 gkectl diagnose cluster 指令傳回的輸出範例:

Preparing for the diagnose tool...
Diagnosing the cluster......DONE

Diagnose result is saved successfully in <DIAGNOSE_REPORT_JSON_FILE>

- Validation Category: User Cluster Connectivity
Checking Node Network Policy...SUCCESS
Checking VMs TOD (availability)...SUCCESS
Checking Dataplane-V2...Success

- Validation Category: User Cluster F5 BIG-IP
Checking f5 (credentials, partition)...SUCCESS

- Validation Category: User Cluster VCenter
Checking Credentials...SUCCESS
Checking DRS enabled...SUCCESS
Checking Hosts for AntiAffinityGroups...SUCCESS
Checking VSphere CSI Driver...SUCCESS
Checking Version...SUCCESS
Checking Datacenter...SUCCESS
Checking Datastore...SUCCESS
Checking Resource pool...SUCCESS
Checking Folder...SUCCESS
Checking Network...SUCCESS

- Validation Category: User Cluster
Checking user cluster and node pools...SUCCESS
Checking cluster object...SUCCESS
Checking machine deployment...SUCCESS
Checking machineset...SUCCESS
Checking machine objects...SUCCESS
Checking control plane pods...SUCCESS
Checking kube-system pods...SUCCESS
Checking gke-system pods...SUCCESS
Checking gke-connect pods...SUCCESS
Checeking anthos-identity-service pods...SUCCESS
Checking storage...SUCCESS
Checking resource...SUCCESS
Checking virtual machine resource contention...SUCCESS
Checking host resource contention...SUCCESS
All validation results were SUCCESS.
Cluster is healthy!

診斷虛擬機器狀態

如果建立虛擬機器時發生問題,請執行 gkectl diagnose cluster ,取得虛擬機器狀態的診斷結果。

輸出結果會與下列內容相似:


- Validation Category: Cluster Healthiness
Checking cluster object...SUCCESS
Checking machine deployment...SUCCESS
Checking machineset...SUCCESS
Checking machine objects...SUCCESS
Checking machine VMs...FAILURE
    Reason: 1 machine VMs error(s).
    Unhealthy Resources:
    Machine [NODE_NAME]: The VM's UUID "420fbe5c-4c8b-705a-8a05-ec636406f60" does not match the machine object's providerID "420fbe5c-4c8b-705a-8a05-ec636406f60e".
    Debug Information:
    null
...
Exit with error:
Cluster is unhealthy!
Run gkectl diagnose cluster automatically in gkectl diagnose snapshot
Public page https://cloud.google.com/anthos/clusters/docs/on-prem/latest/diagnose#overview_diagnose_snapshot

疑難排解

下表列出執行 gkectl diagnose cluster 指令時可能發生的問題,以及可能的解決方案:

問題可能原因解決方法
Kubernetes API 伺服器無法連線,無論是管理員叢集或使用者叢集都一樣。 檢查虛擬機器的健康狀態 OOB (開箱即用) 記憶體延遲圖表,理想情況下,記憶體延遲應接近零。記憶體爭用也可能增加 CPU 爭用,且 CPU 準備就緒圖表可能會出現尖峰,因為會涉及交換作業。 增加實體記憶體。如需其他選項,請參閱 VMware 疑難排解建議
節點集區建立作業逾時。 VMDK 讀取/寫入延遲時間過長。檢查 VM 健康狀態 OOB,瞭解虛擬磁碟讀寫延遲時間。根據 VMware 的說法,總延遲時間超過 20 毫秒表示有問題。 請參閱 VMware 磁碟效能問題解決方案

BundleUnexpectedDiff 個錯誤

Google Distributed Cloud 套裝組合管理的 Kubernetes 叢集 API 資源可能會遭到意外修改,導致系統元件故障,或叢集升級/更新失敗。

在 Google Distributed Cloud 1.13 以上版本中,onprem-user-cluster-controller 會定期檢查物件狀態,並透過記錄和事件回報與所需狀態的任何非預期差異。這些物件包括使用者叢集控制層,以及 Services 和 DaemonSets 等外掛程式。

以下輸出範例顯示非預期的差異事件:

 Type     Reason                 Age    From                              Message
 ----     ------                 ----   ----                              -------
 Warning  BundleUnexpectedDiff   13m    onpremusercluster/ci-bundle-diff  Detected unexpected difference of user control plane objects: [ConfigMap/istio], please check onprem-user-cluster-controller logs for more details.

以下範例輸出內容顯示 onprem-user-cluster-controller 產生的記錄:

2022-08-06T02:54:42.701352295Z W0806 02:54:42.701252       1 update.go:206] Detected unexpected difference of user addon object(ConfigMap/istio), Diff:   map[string]string{
2022-08-06T02:54:42.701376406Z -    "mesh": (
2022-08-06T02:54:42.701381190Z -        """
2022-08-06T02:54:42.701385438Z -        defaultConfig:
2022-08-06T02:54:42.701389350Z -          discoveryAddress: istiod.gke-system.svc:15012
...
2022-08-06T02:54:42.701449954Z -        """
2022-08-06T02:54:42.701453099Z -    ),
2022-08-06T02:54:42.701456286Z -    "meshNetworks": "networks: {}",
2022-08-06T02:54:42.701459304Z +    "test-key":     "test-data",
2022-08-06T02:54:42.701462434Z   }

事件和記錄不會阻礙叢集運作。如果物件與所需狀態有非預期的差異,系統會在下次叢集升級時覆寫這些物件。

後續步驟

如需其他協助,請與 Cloud Customer Care 團隊聯絡。

如要進一步瞭解支援資源,包括下列項目,請參閱「取得支援」: