gkectl
工具提供兩項指令,可排解叢集問題:gkectl diagnose cluster
和 gkectl 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-system
和gke-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 團隊聯絡。
如要進一步瞭解支援資源,包括下列項目,請參閱「取得支援」: