本文說明如何使用 gkectl diagnose
指令,為使用 Google Distributed Cloud (僅限軟體) for VMware 建立的叢集建立診斷快照,以排解問題 (進階叢集未啟用時)。如果enableAdvancedClusters
在管理員叢集設定檔和使用者叢集設定檔中設為 false
,系統就不會啟用進階叢集。如果啟用進階叢集,請參閱「啟用進階叢集時建立快照」。
gkectl
工具提供兩項指令,可排解叢集問題:gkectl diagnose snapshot
和 gkectl diagnose cluster
。這些指令適用於管理員和使用者叢集。
如要進一步瞭解如何使用 gkectl diagnose cluster
指令診斷叢集問題,請參閱「診斷叢集問題」。
gkectl diagnose snapshot
這項指令會將叢集的狀態、設定和記錄壓縮成 tar 檔案。執行 gkectl diagnose snapshot
時,指令會自動執行 gkectl diagnose cluster
,並將輸出檔案放在快照中的新資料夾 /diagnose-report
。
預設快照
gkectl diagnose snapshot
指令的預設設定會擷取叢集的下列資訊:
Kubernetes 版本。
kube-system 和 gke-system 命名空間中的 Kubernetes 資源狀態:叢集、機器、節點、服務、端點、ConfigMap、ReplicaSet、CronJob、Pod,以及這些 Pod 的擁有者,包括 Deployment、DaemonSet 和 StatefulSet。
控制層的狀態。
每個節點設定的詳細資料,包括 IP 位址、iptables 規則、掛接點、檔案系統、網路連線和執行中的程序。
Kubernetes API 伺服器無法使用時,管理員叢集控制層節點的容器記錄。
vSphere 資訊,包括 VM 物件及其以資源集區為基礎的事件。也會收集與 VM 相關聯的資料中心、叢集、網路和資料存放區物件資訊。
F5 BIG-IP 負載平衡器資訊,包括虛擬伺服器、虛擬位址、集區、節點和監控器。
gkectl diagnose snapshot
指令的記錄。預檢工作的記錄檔。
根據情境,命名空間中容器的記錄。
快照檔案
/nodes/<admin_master_node_name>/sudo_kubeadm_certs_check-expiration
中管理員叢集 Kubernetes 憑證的到期資訊。快照中所有檔案的 HTML 索引檔案。
(選用) 用於安裝及升級叢集的管理員叢集設定檔,並搭配
--config
旗標使用。
系統會先移除憑證 (包括 vSphere 和 F5 的憑證),再建立 tar 檔案。
輕量型快照
在 Google Distributed Cloud 1.29 以上版本中,管理員和使用者叢集都可使用輕量版 gkectl diagnose snapshot
。輕量型快照擷取的叢集資訊較少,因此快照程序速度較快。在指令中加入 --scenario=lite
時,快照只會包含下列資訊:
kube-system 和 gke-system 命名空間中的 Kubernetes 資源狀態:叢集、機器、節點、服務、端點、ConfigMap、ReplicaSet、CronJob、Pod,以及這些 Pod 的擁有者,包括 Deployment、DaemonSet 和 StatefulSet
gkectl diagnose snapshot
指令的記錄
擷取叢集狀態
如果 gkectl diagnose cluster
指令發現錯誤,請擷取叢集狀態,並將相關資訊提供給 Cloud Customer Care。您可以使用 gkectl diagnose snapshot
指令擷取這項資訊。
gkectl diagnose snapshot
具有 --config
的選用旗標。除了收集叢集相關資訊,這個旗標還會收集用於建立或升級叢集的設定檔。
擷取管理員叢集狀態
如要擷取管理員叢集的狀態,請執行下列指令:
gkectl diagnose snapshot --kubeconfig=ADMIN_CLUSTER_KUBECONFIG --config
--config
參數為選用參數:
如果目標叢集中的虛擬 IP 位址 (VIP) 有問題,請使用 --config
標記提供管理員叢集設定檔,以提供更多偵錯資訊。
在 1.29 以上版本中,如果不需要預設快照中的所有資訊,可以加入 --scenario=lite
。
輸出內容會包含檔案清單和 tar 檔案名稱,如下列範例輸出內容所示:
Taking snapshot of admin cluster "[ADMIN_CLUSTER_NAME]"...
Using default snapshot configuration...
Setting up "[ADMIN_CLUSTER_NAME]" ssh key file...DONE
Taking snapshots...
commands/kubectl_get_pods_-o_yaml_--kubeconfig_...env.default.kubeconfig_--namespace_kube-system
commands/kubectl_get_deployments_-o_yaml_--kubeconfig_...env.default.kubeconfig_--namespace_kube-system
commands/kubectl_get_daemonsets_-o_yaml_--kubeconfig_...env.default.kubeconfig_--namespace_kube-system
...
nodes/[ADMIN_CLUSTER_NODE]/commands/journalctl_-u_kubelet
nodes/[ADMIN_CLUSTER_NODE]/files/var/log/startup.log
...
Snapshot succeeded. Output saved in [TAR_FILE_NAME].tar.gz.
如要將 tar 檔案解壓縮至目錄,請執行下列指令:
tar -zxf TAR_FILE_NAME --directory EXTRACTION_DIRECTORY_NAME
更改下列內容:
TAR_FILE_NAME
:tar 檔案的名稱。EXTRACTION_DIRECTORY_NAME
:要將 tar 檔案封存檔解壓縮至其中的目錄。
如要查看快照產生的檔案清單,請執行下列指令:
cd EXTRACTION_DIRECTORY_NAME/EXTRACTED_SNAPSHOT_DIRECTORY ls kubectlCommands ls nodes/NODE_NAME/commands ls nodes/NODE_NAME/files
將 NODE_NAME
替換為要查看檔案的節點名稱。
如要查看特定作業的詳細資料,請開啟其中一個檔案。
指定管理員叢集的 SSH 金鑰
取得管理員叢集快照時,gkectl
會自動尋找管理員叢集的私密 SSH 金鑰。您也可以使用 --admin-ssh-key-path
參數明確指定金鑰。
按照「使用 SSH 連線至叢集節點」一文中的操作說明下載 SSH 金鑰。
在 gkectl diagnose snapshot
指令中,將 --admin-ssh-key-path
設為解碼金鑰路徑:
gkectl diagnose snapshot --kubeconfig=ADMIN_CLUSTER_KUBECONFIG \ --admin-ssh-key-path=PATH_TO_DECODED_KEY
擷取使用者叢集狀態
如要擷取使用者叢集的狀態,請執行下列指令:
gkectl diagnose snapshot --kubeconfig=ADMIN_CLUSTER_KUBECONFIG \ --cluster-name=USER_CLUSTER_NAME
以下範例輸出內容包含檔案清單和 tar 檔案名稱:
Taking snapshot of user cluster "[USER_CLUSTER_NAME]"...
Using default snapshot configuration...
Setting up "[USER_CLUSTER_NAME]" ssh key file...DONE
commands/kubectl_get_pods_-o_yaml_--kubeconfig_...env.default.kubeconfig_--namespace_user
commands/kubectl_get_deployments_-o_yaml_--kubeconfig_...env.default.kubeconfig_--namespace_user
commands/kubectl_get_daemonsets_-o_yaml_--kubeconfig_...env.default.kubeconfig_--namespace_user
...
commands/kubectl_get_pods_-o_yaml_--kubeconfig_.tmp.user-kubeconfig-851213064_--namespace_kube-system
commands/kubectl_get_deployments_-o_yaml_--kubeconfig_.tmp.user-kubeconfig-851213064_--namespace_kube-system
commands/kubectl_get_daemonsets_-o_yaml_--kubeconfig_.tmp.user-kubeconfig-851213064_--namespace_kube-system
...
nodes/[USER_CLUSTER_NODE]/commands/journalctl_-u_kubelet
nodes/[USER_CLUSTER_NODE]/files/var/log/startup.log
...
Snapshot succeeded. Output saved in [FILENAME].tar.gz.
快照情境
透過快照情境,您可以控管快照中包含的資訊。如要指定情境,請使用 --scenario
旗標。以下列出可能的值:
system
(預設):收集支援的系統命名空間中的快照和記錄。all
:收集所有命名空間 (包括使用者定義的命名空間) 中的記錄檔快照。lite
(1.29 以上版本):只收集 Kubernetes 資源和記錄檔的快照。gkectl
系統會排除所有其他記錄,例如容器記錄和節點核心記錄。
可用的快照情境會因 Google Distributed Cloud 版本而異。
1.13 以下版本:
system
、system-with-logs
、all
和all-with-logs
。1.13 至 1.28 版:
system
和all
。system
情境與舊版system-with-logs
情境相同。all
情境與舊版all-with-logs
情境相同。1.29 以上版本:
system
、all
和lite
。
如要建立管理員叢集的快照,您不需要指定情境:
gkectl diagnose snapshot \ --kubeconfig=ADMIN_CLUSTER_KUBECONFIG
如要使用 system
情境建立使用者叢集的快照,請按照下列步驟操作:
gkectl diagnose snapshot \ --kubeconfig=ADMIN_CLUSTER_KUBECONFIG \ --cluster-name=USER_CLUSTER_NAME \ --scenario=system
如要使用 all
情境建立使用者叢集的快照,請按照下列步驟操作:
gkectl diagnose snapshot \ --kubeconfig=ADMIN_CLUSTER_KUBECONFIG \ --cluster-name=USER_CLUSTER_NAME \ --scenario=all
如要使用 lite
情境建立使用者叢集的快照,請按照下列步驟操作:
gkectl diagnose snapshot \ --kubeconfig=ADMIN_CLUSTER_KUBECONFIG \ --cluster-name=USER_CLUSTER_NAME \ --scenario=lite
使用 --log-since
限制快照
您可以使用 --log-since
標記,將記錄收集範圍限制在近期。舉例來說,您可以只收集最近兩天或最近三小時的記錄。根據預設,diagnose snapshot
會收集所有記錄。
gkectl diagnose snapshot --kubeconfig=ADMIN_CLUSTER_KUBECONFIG \ --cluster-name=CLUSTER_NAME \ --scenario=system \ --log-since=DURATION
將 <var>DURATION</var>
替換為時間值,例如 120m
或 48h
。
請注意下列事項:
--log-since
旗標僅適用於kubectl
和journalctl
記錄。- 自訂快照設定不得使用
--log-since
等指令旗標。
執行快照模擬測試
您可以使用 --dry-run
旗標顯示要執行的動作和快照設定。
如要在管理員叢集上執行試營運,請輸入下列指令:
gkectl diagnose snapshot --kubeconfig=ADMIN_CLUSTER_KUBECONFIG \ --cluster-name=ADMIN_CLUSTER_NAME \ --dry-run
如要在使用者叢集上執行試運算,請輸入下列指令:
gkectl diagnose snapshot --kubeconfig=ADMIN_CLUSTER_KUBECONFIG \ --cluster-name=USER_CLUSTER_NAME \ --dry-run
使用快照設定
如果這兩種情境 (--scenario system
或 all
) 不符合您的需求,您可以傳遞快照設定檔並使用 --snapshot-config
標記,建立自訂快照:
gkectl diagnose snapshot --kubeconfig=ADMIN_CLUSTER_KUBECONFIG \ --cluster-name=USER_CLUSTER_NAME \ --snapshot-config=SNAPSHOT_CONFIG_FILE
產生快照設定
您可以傳入 --scenario
和 --dry-run
標記,為特定情境產生快照設定。舉例來說,如要查看使用者叢集的預設情境 (system
) 快照設定,請輸入下列指令:
gkectl diagnose snapshot \ --kubeconfig=ADMIN_CLUSTER_KUBECONFIG \ --cluster-name=USER_CLUSTER_NAME \ --scenario=system --dry-run
輸出結果會與下列範例相似:
numOfParallelThreads: 10
excludeWords:
- password
kubectlCommands:
- commands:
- kubectl get clusters -o wide
- kubectl get machines -o wide
- kubectl get clusters -o yaml
- kubectl get machines -o yaml
- kubectl describe clusters
- kubectl describe machines
namespaces:
- default
- commands:
- kubectl version
- kubectl cluster-info
- kubectl get nodes -o wide
- kubectl get nodes -o yaml
- kubectl describe nodes
namespaces: []
- commands:
- kubectl get pods -o wide
- kubectl get deployments -o wide
- kubectl get daemonsets -o wide
- kubectl get statefulsets -o wide
- kubectl get replicasets -o wide
- kubectl get services -o wide
- kubectl get jobs -o wide
- kubectl get cronjobs -o wide
- kubectl get endpoints -o wide
- kubectl get configmaps -o wide
- kubectl get pods -o yaml
- kubectl get deployments -o yaml
- kubectl get daemonsets -o yaml
- kubectl get statefulsets -o yaml
- kubectl get replicasets -o yaml
- kubectl get services -o yaml
- kubectl get jobs -o yaml
- kubectl get cronjobs -o yaml
- kubectl get endpoints -o yaml
- kubectl get configmaps -o yaml
- kubectl describe pods
- kubectl describe deployments
- kubectl describe daemonsets
- kubectl describe statefulsets
- kubectl describe replicasets
- kubectl describe services
- kubectl describe jobs
- kubectl describe cronjobs
- kubectl describe endpoints
- kubectl describe configmaps
namespaces:
- kube-system
- gke-system
- gke-connect.*
prometheusRequests: []
nodeCommands:
- nodes: []
commands:
- uptime
- df --all --inodes
- ip addr
- sudo iptables-save --counters
- mount
- ip route list table all
- top -bn1
- sudo docker ps -a
- ps -edF
- ps -eo pid,tid,ppid,class,rtprio,ni,pri,psr,pcpu,stat,wchan:14,comm,args,cgroup
- sudo conntrack --count
nodeFiles:
- nodes: []
files:
- /proc/sys/fs/file-nr
- /proc/sys/net/nf_conntrack_max
seesawCommands: []
seesawFiles: []
nodeCollectors:
- nodes: []
f5:
enabled: true
vCenter:
enabled: true
輸出內容會顯示下列資訊:
numOfParallelThreads
:用於建立快照的平行執行緒數量。excludeWords
:要從快照中排除的字詞清單 (不區分大小寫)。含有這些字詞的行會從快照結果中移除。 無論您是否指定「password」,系統一律會排除這個字詞。kubectlCommands
:要執行的 kubectl 指令清單。結果已儲存。這些指令會針對對應的命名空間執行。如果是kubectl logs
指令,系統會自動新增對應命名空間中的所有 Pod 和容器。指定命名空間時,系統支援規則運算式。如果未指定命名空間,系統會採用default
命名空間。nodeCommands
:要在對應節點上執行的指令清單。結果會儲存。如未指定節點,系統會將目標叢集中的所有節點納入考量。nodeFiles
:要從對應節點收集的檔案清單。檔案已儲存。如未指定節點,系統會將目標叢集中的所有節點納入考量。seesawCommands
:要執行的指令清單,用於收集 Seesaw 負載平衡器資訊。如果叢集使用 Seesaw 負載平衡器,系統會儲存結果。seesawFiles
:要為 Seesaw 負載平衡器收集的檔案清單。nodeCollectors
:為 Cilium 節點執行的收集器,用於收集 eBPF 資訊。f5
:啟用收集 F5 BIG-IP 負載平衡器相關資訊的旗標。vCenter
:啟用收集 vCenter 相關資訊的旗標。prometheusRequests
:Prometheus 要求清單。結果已儲存。
將快照上傳至 Cloud Storage bucket
為方便記錄、分析及儲存,您可以將特定叢集的所有快照上傳至 Cloud Storage 值區。如果您需要 Cloud Customer Care 團隊的協助,這項資訊就特別實用。
將快照上傳至 Cloud Storage 值區前,請先詳閱並完成下列初始規定:
在車隊主專案中啟用
storage.googleapis.com
。雖然可以使用其他專案,但建議使用機群主專案。gcloud services enable --project=FLEET_HOST_PROJECT_ID storage.googleapis.com
在父項專案中,將
roles/storage.admin
授予服務帳戶,並使用--service-account-key-file
參數傳遞服務帳戶 JSON 金鑰檔案。您可以使用任何服務帳戶,但建議使用連結註冊服務帳戶。詳情請參閱「服務帳戶」。gcloud projects add-iam-policy-binding FLEET_HOST_PROJECT_ID \ --member "serviceAccount:CONNECT_REGISTER_SERVICE_ACCOUNT" \ --role "roles/storage.admin"
將
CONNECT_REGISTER_SERVICE_ACCOUNT
替換為連結註冊服務帳戶。
滿足這些需求後,您現在可以將快照上傳至 Cloud Storage 值區:
gkectl diagnose snapshot --kubeconfig=ADMIN_CLUSTER_KUBECONFIG \ --cluster-name CLUSTER_NAME \ --upload \ --share-with GOOGLE_SUPPORT_SERVICE_ACCOUNT
--share-with
標記可接受服務帳戶名稱清單。將 GOOGLE_SUPPORT_SERVICE_ACCOUNT
替換為 Cloud Customer Care 提供的 Cloud Customer Care 服務帳戶,以及 Cloud Customer Care 提供的任何其他服務帳戶。
使用 --upload
標記時,指令會搜尋專案中名稱開頭為「anthos-snapshot-
」的儲存空間值區。如果這類值區存在,指令會將快照上傳至該值區。如果指令找不到名稱相符的 bucket,就會建立名為 anthos-snapshot-UUID
的新 bucket,其中 UUID
是 32 位數的通用唯一 ID。
使用 --share-with
旗標時,您不需要手動與 Cloud Customer Care 分享值區存取權。
將快照上傳至 Cloud Storage bucket 時,系統會顯示下列範例輸出內容:
Using "system" snapshot configuration...
Taking snapshot of user cluster <var>CLUSTER_NAME</var>...
Setting up <var>CLUSTER_NAME</var> ssh key...DONE
Using the gke-connect register service account key...
Setting up Google Cloud Storage bucket for uploading the snapshot...DONE
Taking snapshots in 10 thread(s)...
...
Snapshot succeeded.
Snapshots saved in "<var>SNAPSHOT_FILE_PATH</var>".
Uploading snapshot to Google Cloud Storage...... DONE
Uploaded the snapshot successfully to gs://anthos-snapshot-a4b17874-7979-4b6a-a76d-e49446290282/<var>xSNAPSHOT_FILE_NAME</var>.
Shared successfully with service accounts:
<var>GOOGLE_SUPPORT_SERVICE_ACCOUNT</var>
後續步驟
如需其他協助,請與 Cloud Customer Care 團隊聯絡。
如要進一步瞭解支援資源,包括下列項目,請參閱「取得支援」: