本文說明如何使用 gkectl diagnose
指令,為使用 Google Distributed Cloud (僅限軟體) for VMware 建立的叢集建立診斷快照,以便在啟用進階叢集時排解問題。在管理員叢集設定檔和使用者叢集設定檔中,將 enableAdvancedClusters
設為 true
,即可啟用進階叢集。如果未啟用進階叢集,請參閱「未啟用進階叢集時建立診斷快照」。
gkectl diagnose snapshot
這項指令會將叢集的狀態、設定和記錄壓縮成 tar 檔案。gkectl diagnose snapshot 指令的預設設定會擷取叢集的下列資訊:
Kubernetes 版本。
kube-system 和 gke-system 命名空間中的 Kubernetes 資源狀態:叢集、機器、節點、服務、端點、ConfigMap、ReplicaSet、CronJob、Pod,以及這些 Pod 的擁有者,包括 Deployment、DaemonSet 和 StatefulSet。
控制層的狀態。
每個節點設定的詳細資料,包括 IP 位址、iptables 規則、掛接點、檔案系統、網路連線和執行中的程序。
Kubernetes API 伺服器無法使用時,管理員叢集控制層節點的容器記錄。
gkectl diagnose snapshot
指令的記錄。預檢工作的記錄檔。
根據情境,命名空間中容器的記錄。
系統會先移除憑證 (包括 vSphere 和 F5 的憑證),再建立 tar 檔案。
擷取管理員叢集狀態
如要擷取管理員叢集的狀態,請執行下列指令:
gkectl diagnose snapshot --kubeconfig=ADMIN_CLUSTER_KUBECONFIG
將 ADMIN_CLUSTER_KUBECONFIG
替換為管理員叢集 kubeconfig 檔案的路徑。
輸出內容會包含檔案清單和 tar 檔案名稱,如下列範例輸出內容所示:
Using "system" snapshot configuration...
Creating ssh signer for "[ADMIN_CLUSTER_NAME]"...
Taking snapshots in 10 thread(s)...
gkectlLogs/gkectl-xxx.log
...
kubectlCommands/[NAMESPACE]/kubectl_get_pods
kubectlCommands/[NAMESPACE]/kubectl_get_deployments
kubectlCommands/[NAMESPACE]/kubectl_get_daemonsets
...
nodes/[ADMIN_CLUSTER_NODE]/commands/journalctl_-u_kubelet
nodes/[ADMIN_CLUSTER_NODE]/files/var/log/startup.log
...
Snapshot succeeded. Output saved in [FILENAME].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 檔案名稱:
Using "system" snapshot configuration...
Creating ssh signer for "[USER_CLUSTER_NAME]"...
Taking snapshots in 10 thread(s)...
gkectlLogs/gkectl-xxx.log
...
kubectlCommands/[NAMESPACE]/kubectl_get_pods
kubectlCommands/[NAMESPACE]/kubectl_get_deployments
kubectlCommands/[NAMESPACE]/kubectl_get_daemonsets
...
nodes/[USER_CLUSTER_NODE_IP_ADDRESS]/commands/journalctl_-u_kubelet
nodes/[USER_CLUSTER_NODE_IP_ADDRESS]/files/var/log/startup.logn
...
Snapshot succeeded. Output saved in [FILENAME].tar.gz.
快照情境
透過快照情境,您可以控管快照中包含的資訊。如要指定情境,請使用 --scenario
標記。以下列出可能的值:
system
(預設):收集支援的系統命名空間中的快照和記錄。all
:收集所有命名空間 (包括使用者定義的命名空間) 中的記錄檔快照。
如要建立管理員叢集的快照,您不需要指定情境:
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
使用 --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
輸出結果會與下列範例相似:
The snapshot configuration is:
numOfParallelThreads: 10
excludeWords:
- password
kubectlCommands:
- commands:
- kubectl version
- kubectl cluster-info
- kubectl top node
- kubectl top pod -A --containers
namespaces: []
- commands:
- kubectl get -o wide --ignore-not-found
- kubectl get -o yaml --ignore-not-found
- kubectl describe
namespaces:
- kube-system
...
expandResources: true
- commands:
- kubectl logs
namespaces:
- kube-system
...
kindNodeCommands: []
nodeCommands:
- nodes: []
commands:
- uptime
- df --all --inodes
- ip addr
- ip neigh
- iptables-save --counters
- mount
- ip route list table all
- top -bn1 || true
- docker info || true
...
- nodes: []
commands:
- dmesg
- systemctl status -l kubelet
- journalctl --utc -u kubelet
- journalctl --utc -u kubelet-monitor.service
...
nodeFiles:
- nodes: []
files:
- /proc/sys/fs/file-nr
- /proc/sys/net/netfilter/nf_conntrack_max
...
- nodes: []
files:
- /var/log/apiserver/audit-proxy-buffer/* || true
輸出內容會顯示下列資訊:
numOfParallelThreads
:用於建立快照的平行執行緒數量。excludeWords
:要從快照中排除的字詞清單 (不區分大小寫)。含有這些字詞的行會從快照結果中移除。 無論您是否指定「password」,系統一律會排除這個字詞。kubectlCommands
:要執行的 kubectl 指令清單。結果已儲存。這些指令會針對對應的命名空間執行。如果是kubectl logs
指令,系統會自動新增對應命名空間中的所有 Pod 和容器。指定命名空間時,系統支援規則運算式。如果未指定命名空間,系統會採用default
命名空間。nodeCommands
:要在對應節點上執行的指令清單。結果會儲存。如未指定節點,系統會將目標叢集中的所有節點納入考量。nodeFiles
:要從對應節點收集的檔案清單。檔案已儲存。如未指定節點,系統會將目標叢集中的所有節點納入考量。
後續步驟
如需其他協助,請與 Cloud Customer Care 團隊聯絡。
如要進一步瞭解支援資源,包括下列項目,請參閱「取得支援」: