啟用進階叢集時建立診斷快照

本文說明如何使用 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> 替換為時間值,例如 120m48h

請注意下列事項:

  • --log-since 旗標僅適用於 kubectljournalctl 記錄。
  • 自訂快照設定不得使用 --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 systemall) 不符合您的需求,您可以傳遞快照設定檔並使用 --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 團隊聯絡。

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