Kubectlを用いたKubernetesノードのデバッグ

このページでは、Kubernetesクラスター上で動作しているノードkubectl debugコマンドを使用してデバッグする方法について説明します。

始める前に

Kubernetesクラスターが必要、かつそのクラスターと通信するためにkubectlコマンドラインツールが設定されている必要があります。 このチュートリアルは、コントロールプレーンのホストとして動作していない少なくとも2つのノードを持つクラスターで実行することをおすすめします。 まだクラスターがない場合、minikubeを使って作成するか、 以下のいずれかのKubernetesプレイグラウンドも使用できます:

作業するKubernetesサーバーは次のバージョン以降のものである必要があります: 1.2. バージョンを確認するには次のコマンドを実行してください: kubectl version.

Podを作成し、それらの新しいPodを任意のノードに割り当てる権限が必要です。 また、ホストのファイルシステムにアクセスするPodを作成する権限も必要です。

kubectl debug nodeを用いてノードをデバッグする

kubectl debug nodeコマンドを使用して、トラブルシューティングしたいノードにPodをデプロイします。 このコマンドは、SSH接続を使用してノードにアクセスできないシナリオで役に立ちます。 Podが作成されると、そのPodはノード上で対話型シェルを開きます。 mynodeという名前のノード上で対話型シェルを作成するには、次のように実行します。

kubectl debug node/mynode -it --image=ubuntu
mynodeという名前のノード上に、コンテナデバッガーを持つデバッグの用Pod、node-debugger-mynode-pdx84を作成します。
コマンドプロンプトが表示されない場合は、エンターキーを押してみてください。
root@mynode:/#

デバッグコマンドは、情報を収集し、問題をトラブルシューティングするのに役立ちます。 使用する可能性のあるコマンドには、ipifconfigncpingpsなどがあります。 また、mtrtcpdumpcurlなどの他のツールもそれぞれのパッケージマネージャーからインストールすることができます。

デバッグ用のPodは、Pod内の/hostにマウントされたノードのルートファイルシステムにアクセスできます。 kubeletをファイルシステムのネームスペースで実行している場合、デバッグ用のPodはそのネームスペースのルートを見ることになり、ノード全体のルートではありません。 典型的なLinuxノードの場合、関連するログを見つけるために以下のパスを確認できます。

/host/var/log/kubelet.log
ノード上でコンテナを実行する責任があるkubeletからのログです。
/host/var/log/kube-proxy.log
サービスのエンドポイントへのトラフィックを指示する責任があるkube-proxyからのログです。
/host/var/log/containerd.log
ノード上で実行されているcontainerdプロセスからのログです。
/host/var/log/syslog
システムに関する一般的なメッセージや情報です。
/host/var/log/kern.log
カーネルログです。

ノード上でデバッグセッションを作成する際には、以下の点を考慮してください。

  • kubectl debugは、新しいPodの名前をノードの名前に基づいて自動的に生成します。
  • ノードのルートファイルシステムは/hostにマウントされます。
  • コンテナはホストのIPC、ネットワーク、PID Namespaceで実行されますが、Podは特権を持っていません。 これは、一部のプロセス情報の読み取りが失敗する可能性があることを意味します。 その情報へのアクセスはスーパーユーザーに制限されているためです。 例えば、chroot /hostは失敗します。 特権Podが必要な場合は、手動で作成するか、--profile=sysadminを使用してください。
  • デバッグ用のPodにデバッグプロファイルを適用することで、securityContextなどの特定のプロパティを設定できます。

クリーンアップ

デバッグ用のPodの使用が終了したら、それを削除してください。

kubectl get pods
NAME                          READY   STATUS       RESTARTS   AGE
node-debugger-mynode-pdx84    0/1     Completed    0          8m1s
# Podの名前は適宜変更してください
kubectl delete pod node-debugger-mynode-pdx84 --now
pod "node-debugger-mynode-pdx84" deleted
最終更新 July 02, 2024 at 12:29 AM PST: [ja] Add description about debugging profile (#47050) (f29f4a5a47)