このドキュメントでは、gkectl diagnose
コマンドを使用して、高度なクラスタが有効になっている場合に、VMware 用 Google Distributed Cloud(ソフトウェアのみ)で作成されたクラスタの問題をトラブルシューティングするための診断スナップショットを作成する方法について説明します。管理クラスタ構成ファイルとユーザー クラスタ構成ファイルで enableAdvancedClusters
が true
に設定されている場合、高度なクラスタが有効になります。アドバンスト クラスタが有効になっていない場合は、アドバンスト クラスタが有効になっていない場合の診断スナップショットの作成をご覧ください。
gkectl diagnose snapshot
このコマンドは、クラスタのステータス、構成、ログを tar ファイルに圧縮します。gkectl diagnose snapshot コマンドのデフォルト構成では、クラスタに関する次の情報が取得されます。
Kubernetes のバージョン
kube-system と gke-system Namespace 内の Kubernetes リソースのステータス: クラスタ、マシン、ノード、Service、Endpoint、ConfigMap、ReplicaSet、CronJob、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
フラグを使用してログ収集を最近の期間に制限できます。たとえば、過去 2 日間または過去 3 時間のログのみを収集できます。デフォルトでは、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
スナップショット構成を使用する
これら 2 つのシナリオ(--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
: スナップショットから除外する単語のリスト(大文字と小文字は区別されません)。これらの単語を含む行はスナップショットの結果から削除されます。指定したかどうかにかかわらず、「パスワード」は常に除外されます。kubectlCommands
: 実行する kubectl コマンドのリスト。結果は保存されます。コマンドは、対応する Namespace に対して実行されます。kubectl logs
コマンドの場合、対応する Namespace 内のすべての Pod とコンテナが自動的に追加されます。正規表現が、Namespace の指定に使用されます。Namespace を指定しない場合は、default
Namespace が使用されます。nodeCommands
: 対応するノードで実行するコマンドのリスト。結果は保存されます。ノードが指定されていない場合、ターゲット クラスタ内のすべてのノードが考慮されます。nodeFiles
: 対応するノードから収集されるファイルのリスト。ファイルは保存されます。ノードが指定されていない場合、ターゲット クラスタ内のすべてのノードが考慮されます。