◾️はじめに
https://dk521123.hatenablog.com/entry/2022/01/12/110555
の続き。 最近、バグ調査のために、kubectlコマンドを使っている。 デバッグに役立つコマンドとして以下「【0】デバッグに役立つkubectlコマンド」として あげてみた。 その中で「kubectl debug」コマンドが、今回のテーマ。
目次
【0】デバッグに役立つkubectlコマンド 【1】kubectl debugコマンド 1)特徴 【2】構文 1)オプション 【3】使用上の注意 1)本番環境で kubectl debug を使いたい場合の対応案 【4】サンプル 例1:curlコマンドを打てるエフェメラルコンテナを作成する場合 例2:curlコマンドを打って、終了する場合
【0】デバッグに役立つkubectlコマンド
* もっとあるかもしれないけど、ひとまず使って役立ったのは以下。
Commands | Explanation |
---|---|
kubectl get/describe | Podなどの状態などの情報を取得 |
kubectl debug | デバッグ用のサイドカーコンテナを立ち上げる(★今回のテーマ) |
kubectl exec | コンテナ内に入る |
kubectl cp | コンテナ-Client内のファイル移動 |
kubectl logs | コンテナのログを取得 |
* 以下の公式ドキュメントも参照するといいかも
https://kubernetes.io/ja/docs/tasks/debug/debug-cluster/kubectl-node-debug/
https://kubernetes.io/ja/docs/tasks/debug/debug-application/debug-running-pod/
【1】kubectl debugコマンド
* デバッグ用の一時的なコンテナを立ち上げるコマンド * From Kubernetes v1.25 stable cf. エフェメラルコンテナ(Ephemeral Container) = 一時的なコンテナ
1)特徴
* デバッグ対象のPodと同じネットワーク、同じボリュームを それぞれのローカルネットワーク、ローカルボリュームとして参照可能
【2】構文
* 公式ドキュメントは以下。
https://kubernetes.io/docs/reference/kubectl/generated/kubectl_debug/
# kubectl debug --stdin --tty <デバッグ対象のPod名> -n <namespace> ¥ # --image=<image_id> --target=<デバッグ対象のコンテナ名> # -i/--interactive: # kubectl debug -it <デバッグ対象のPod名> -n <namespace> --image=<image_id> kubectl debug -it demo-app -n demo --image=busybox:1.28 # kubectl debug -it <デバッグ対象のPod名> -n <namespace> --image=<image_id> -- <打ちたいコマンド> kubectl debug demo-app -it -n demo --image=curlimages/curl -- curl localhost:8080
1)オプション
Options | Explanation |
---|---|
--attach=true/false | 新しいコンテナにアタッチする・しない(デフォルトはする) |
--share-processes | Pod内のコンテナが、Pod内の他のコンテナのプロセスを参照 |
--copy-to <Copy先のPod名> | 対象Podをコピーしてアタッチする |
【3】使用上の注意
(自分の理解としては) デフォルトは、デバッグ用の別Pod名を一時的に立ち上げるものじゃない => 内部的には対象Podのspecを書き換えている => デフォルトだとアタッチされて、デタッチもできない(kubectl delete podするしかない) => 何回も kubectl debug しまくってたら、どんどんエフェメラルコンテナがアタッチされ kubectl delete pod で対応するしか無くなる(本番環境ではやらない方がいい)
複数回打った後のkubectl execコマンド出力例
# 「debugger-xxxx (ephem)」ってコマンド回数分だけ表示される、、、 $ kubectl exec -it demo-app -n demo -- bash Defaulted container "xxxxx" out of: xxxxx, debugger-xxxx (ephem), debugger-xxxx (ephem), ... debugger-xxxx (ephem), debugger-xxxx (ephem), debugger-xxxx (ephem)
1)本番環境で kubectl debug を使いたい場合の対応案
# --copy-to を使う kubectl debug -it demo-app --copy-to demo-app-for-debug --share-processes --image alpine -- sh
【4】サンプル
例1:curlコマンドを打てるエフェメラルコンテナを作成する場合
kubectl debug demo-app -it --image=radial/busyboxplus:curl # この後、エフェメラルコンテナにログインした状態になる curl localhost:8080 curl localhost:8080 ...
補足:--image=radial/busyboxplus:curl
https://hub.docker.com/layers/radial/busyboxplus/curl/images/a68c05ab1112fd90ad7b14985a48520e9d26dbbe00cb9c09aa79fdc0ef46b372
例2:curlコマンドを打って、終了する場合
kubectl debug demo-app -it -n demo --image=curlimages/curl -- curl localhost:8080
関連記事
Kubernetes ~ 基礎知識編 ~
https://dk521123.hatenablog.com/entry/2020/04/27/224624
Kubernetes ~ Windows / 環境構築編 ~
https://dk521123.hatenablog.com/entry/2020/05/01/000000
Kubernetes ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2020/05/04/013529
kubectlコマンド ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2022/01/12/110555
デバッグに役立つkubectlコマンド ~ kubectl logs ~
https://dk521123.hatenablog.com/entry/2025/03/15/231209
デバッグに役立つkubectlコマンド ~ kubectl get/describe/api-resources ~
https://dk521123.hatenablog.com/entry/2025/03/21/151944
Kubernetes ~ ConfigMap ~
https://dk521123.hatenablog.com/entry/2025/03/11/000418
Kubernetes ~ トラブルシュート方法 ~
https://dk521123.hatenablog.com/entry/2025/02/13/233043
screenコマンド
https://dk521123.hatenablog.com/entry/2024/01/03/015517
tmuxコマンド ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2023/11/13/020744
tmuxコマンド ~ 基本編 ~
https://dk521123.hatenablog.com/entry/2024/01/08/171950
watchコマンド
https://dk521123.hatenablog.com/entry/2024/03/24/232633