クラスタの問題を診断する

このページは、プラットフォーム管理者またはインフラストラクチャ オペレーターを対象としています。

このページでは、切断モードで実行中の Anthos で actl コマンドライン ツールを使用して、クラスタの問題を診断する方法について説明します。diagnose コマンドは、クラスタの状態をキャプチャするログのコレクションを含むアーカイブ ファイルを生成します。

はじめに

管理クラスタまたはユーザー クラスタの状態を取得するには、actl diagnose コマンドを使用します。診断情報により、問題の検出とデプロイメントのデバッグを効率的に行うことができます。コマンドを実行すると、定義した範囲に関連するクラスタとノード構成ファイルがすべて収集され、1 つの tar アーカイブにパッケージ化されます。コマンドのフラグを使用すると、コマンドの診断範囲を選択できます。

actl diagnose

クラスタの問題のトラブルシューティングを行うには、actl diagnose コマンドを使用します。このコマンドは、クラスタのステータス、構成、ログを tar ファイルに圧縮します。スナップショットを作成するクラスタのタイプ(管理クラスタまたはユーザー クラスタ)に応じて、異なる情報が収集されます。このコマンドのデフォルト構成で、クラスタに関する次の情報が取得されます。

  • Kubernetes のバージョン
  • kube-system と APM のコントローラ名前空間内の Kubernetes リソースのステータス: クラスタ、マシン、ノード、Service、Endpoint、ConfigMap、ReplicaSet、CronJob、Pod とそのオーナー(Deployment、DaemonSet、StatefulSet を含む)
  • ターゲット クラスタがユーザー クラスタである場合のユーザー コントロール プレーンのステータス(ユーザー クラスタのコントロール プレーンは管理クラスタで実行されます)
  • 各ノードの構成の詳細(IP アドレス、iptables ルール、マウント ポイント、ファイル システム、ネットワーク接続、実行中のプロセスなど)
  • 管理クラスタのコントロール プレーン ノードから取得したコンテナログ。Kubernetes API サーバーを使用できない場合。
  • Istio システム内の情報(Pod、サービス、デプロイ、エンドポイント、シークレット、構成マップ、すべての Istio コンポーネントとサイドカーから取得した現在のログと以前のログ、すべての Istio 構成アーティファクトなど)。
  • Config Sync の情報(config-management-system 関連の名前空間の構成を含む)。
  • actl diagnose コマンドから出力されたログ。

シナリオからスナップショットを作成する

actl diagnose コマンドは 6 つのシナリオをサポートしています。シナリオを指定するには、--scenario フラグを使用して、次のいずれかの構成のスナップショットを収集します。

  • all: (デフォルト)auth、config-management、kubernetes、management-center、observability、service-mesh など、事前定義されたすべてのシナリオが含まれます。
  • auth
  • config-management
  • kubernetes
  • management-center
  • 可観測性
  • サービス メッシュ

6 つのシナリオそれぞれを管理クラスタまたはユーザー クラスタで使用できます。すべてのシナリオでクラスタのスナップショットを作成するには:

管理クラスタ

管理クラスタの kubeconfig 認証情報があり、Cluster 情報を読み取る権限がある場合は、次のコマンドを実行してすべてのシナリオでスナップショットを作成できます。

 actl diagnose \
    --kubeconfig=ADMIN_CLUSTER_KUBECONFIG\
    --cluster=CLUSTER_NAME\
    --scenario=all

次のように置き換えます。

  • ADMIN_CLUSTER_KUBECONFIG: 管理クラスタの kubeconfig ファイル
  • CLUSTER_NAME: クラスタの名前。 クラスタ名がわからない場合にこのフラグを省略すると、スナップショットを作成するクラスタを選択するように求められます。

ユーザー クラスタ

ユーザー クラスタに対する kubeconfig 認証情報のみがある場合は、次のコマンドを使用して、特定のユーザー クラスタのスナップショットを作成できます。

actl diagnose \
    --kubeconfig=USER_CLUSTER_KUBECONFIG\
    --scenario=all

USER_CLUSTER_KUBECONFIG は、ユーザー クラスタの kubeconfig ファイルに置き換えます。

出力には、ファイルの一覧と tar ファイルの名前が含まれます。

Using ["all"] snapshot configuration...
? Choose a cluster (namespace/name) cluster-admin/admin
Taking snapshots in 10 thread(s)...
  kubectlCommands/anthos-management-center-operator/kubectl_get_updateitems
  kubectlCommands/kubectl_cluster-info
  kubectlCommands/kubectl_version
  kubectlCommands/anthos-management-center/kubectl_logs_git-server-0_--container_git-server_--since_24h0m0s
  kubectlCommands/anthos-management-center/kubectl_get_deployments
  ...
  nodes/10.200.0.5/files/lib/systemd/system/docker.service
  nodes/10.200.0.4/files/lib/systemd/system/docker.service
  ...
  istioCommands/istioctl_bug-report

Snapshot succeeded.
Snapshots saved in "[TAR_FILE_PATH]/[TAR_FILE_NAME].tar.gz".

スナップショットを一定期間に制限する

--log-since フラグを使用してログ収集を最近の期間に制限できます。たとえば、過去 2 日間や過去 3 時間のログを収集できます。デフォルトでは、diagnose は過去 24 時間のログを収集します。このフラグは、kubectl ログでのみサポートされています。

ログの収集期間を制限するには:

管理クラスタ

actl diagnose \
    --kubeconfig=ADMIN_CLUSTER_KUBECONFIG \
    --cluster=CLUSTER_NAME \
    --scenario=all \
    --log-since=DURATION

ユーザー クラスタ

actl diagnose \
    --kubeconfig=USER_CLUSTER_KUBECONFIG \
    --scenario=all \
    --log-since=DURATION

DURATION を、2 日、3 時間などの値に置き換えます。デフォルトの期間は 24 時間です。

スナップショットのドライランの実行

--dry-run フラグを使用して、実行するアクションとスナップショット構成を表示できます。

クラスタでドライランを実行するには、次のようにします。

管理クラスタ

actl diagnose \
    --kubeconfig=ADMIN_CLUSTER_KUBECONFIG \
    --cluster=CLUSTER_NAME \
    --dry-run

ユーザー クラスタ

actl diagnose \
    --kubeconfig=USER_CLUSTER_KUBECONFIG \
    --dry-run

スナップショット構成をカスタマイズする

6 つのシナリオがニーズに合わない場合は、カスタマイズしたスナップショットを作成できます。構成を生成して新しい構成ファイルに貼り付けるか、構成ファイルをゼロから作成する方法があります。つづいて、カスタム構成ファイルからスナップショットを作成できます。

手順 1: スナップショット構成を生成する

特定のシナリオのスナップショット構成を生成するには、--scenario フラグと --dry-run フラグを渡します。たとえば、クラスタの all(デフォルト)シナリオのスナップショット構成を表示するには、次のコマンドを入力します。

actl diagnose \
    --scenario=all  \
    --dry-run

出力例を次に示します。

ExcludeWords:
- certificateAuthorityData
- password
IstioBugReport:
  Enabled: true
KubectlCommands:
- Commands:
  - kubectl get deployments
  - kubectl get deployments -o yaml
  - kubectl get pods
  - kubectl get pods -o yaml
  - kubectl get secret
  - kubectl logs
  - kubectl get gateways -o yaml
  Namespaces:
  - istio-system
NodeCommands:
- Commands:
  - uptime
  - df --all --inodes
  - ip addr
  - iptables-save --counters
  - mount
  - ip route list table all
  - top -bn1
  - docker info
  - docker ps -a
  - ps -edF
  - ps -eo pid,tid,ppid,class,rtprio,ni,pri,psr,pcpu,stat,wchan:14,comm,args,cgroup
  - conntrack --count
  Nodes: []
NodeFiles:
- Files:
  - /proc/sys/fs/file-nr
  - /proc/sys/net/netfilter/nf_conntrack_max
  - /lib/systemd/system/kubelet.service
  - /etc/systemd/system/kubelet.service.d/10-kubeadm.conf
  - /lib/systemd/system/docker.service
  - /etc/docker/daemon.json
  Nodes: []
NomosBugReport:
  Enabled: true
NumOfParallelThreads: 10

このコマンドの出力をコマンドライン インターフェースからコピーして、作成する新しい構成ファイル(myconfig.yaml など)に貼り付けます。次の値を編集します。

  • ExcludeWords: スナップショットから除外する単語のリスト(大文字と小文字は区別されません)。これらの単語を含む行はスナップショットの結果から削除されます。指定した場合でも、「パスワード」は常に除外されます。
  • IstioBugReport: istioctl bug-report スナップショットを有効にするフラグ。
  • KubectlCommands: 実行する kubectl コマンドのリスト。コマンドは、対応する Namespace に対して実行されます。kubectl logs コマンドの場合、対応する Namespace 内のすべての Pod とコンテナが自動的に追加されます。正規表現が、Namespace の指定に使用されます。Namespace を指定しない場合は、default Namespace が使用されます。
  • NodeCommands: 対応するノードで実行するコマンドのリスト。結果は保存されます。ノードが指定されていない場合は、ターゲット クラスタ内のすべてのノードが考慮されます。
  • NodeFiles: 対応するノードから収集されるファイルのリスト。ファイルは保存されます。ノードが指定されていない場合は、ターゲット クラスタ内のすべてのノードが考慮されます。
  • NomosBugReport: nomos bugreport スナップショットを有効にするフラグ。
  • NumOfParallelThreads: スナップショットの作成に使用される並列スレッドの数。

方法 2: カスタム スナップショット構成ファイルを手動で定義する

必要なスナップショット パラメータを含む YAML ファイルを作成します。次に例を示します。

ExcludeWords:
- certificateAuthorityData
- password
NumOfParallelThreads: 10
KubectlCommands:
- Commands:
  - kubectl get deployments
  - kubectl get deployments -o yaml
  - kubectl get pods
  - kubectl get pods -o yaml
  - kubectl get secret
  - kubectl logs
  - kubectl get gateways -o yaml
  Namespaces:
  - istio-system

カスタム スナップショット構成を使用してスナップショットを作成する

--snapshot-config フラグを使用して、カスタム スナップショット構成ファイルを渡します。

管理クラスタ

actl diagnose \
    --kubeconfig=ADMIN_CLUSTER_KUBECONFIG \
    --cluster=CLUSTER_NAME \
    --snapshot-config=SNAPSHOT_CONFIG_FILE

ユーザー クラスタ

actl diagnose \
    --kubeconfig=USER_CLUSTER_KUBECONFIG \
    --snapshot-config=SNAPSHOT_CONFIG_FILE

SNAPSHOT_CONFIG_FILE は、カスタム スナップショット構成ファイルの名前(myconfig.yaml など)に置き換えます。

スナップショットの内容を確認する

tar ファイルの内容を確認するには、次のコマンドを使用して抽出します。

tar -zxf TAR_FILE_PATHTAR_FILENAME.tar.gz  --directory EXTRACTION_DIRECTORY_NAME

tar ファイルの内容は、サポートとやり取りする前に確認してください。

次のステップ