Kubernetes ジョブのログの分析
Kubernetes ジョブからのログを表示および分析できることは、デバッグとジョブの動作を理解するために不可欠です。このステップでは、作成したジョブからログにアクセスして分析する方法を説明します。
ジョブの Pod 名の取得
ログを表示する前に、ジョブによって作成された Pod の名前を知る必要があります。各ジョブは、ジョブ名とランダムなサフィックスを含む名前を持つ 1 つ以上の Pod を作成します。
ジョブに関連するすべての Pod を一覧表示しましょう。
kubectl get pods --show-labels
これにより、すべての Pod とそのラベルが表示されます。 job-name=hello-job や job-name=long-job などのラベルを持つ Pod を探してください。
または、ジョブ名で Pod をフィルタリングすることもできます。
kubectl get pods -l job-name=hello-job
これにより、hello-job ジョブに属する Pod のみが表示されます。
ジョブ ログの表示
Pod の名前がわかったので、ジョブのログを表示できます。次のコマンドを使用し、<pod-name> を実際の Pod の名前に置き換えます。
kubectl logs <pod-name>
たとえば、Pod の名前が hello-job-abcd1 の場合、次のように実行します。
kubectl logs hello-job-abcd1
次のような出力が表示されるはずです。
Hello, Kubernetes!
これは、ジョブが出力するようにプログラムされたメッセージです。
長いジョブのログも確認しましょう。まず、Pod の名前を見つけます。
kubectl get pods -l job-name=long-job
次に、そのログを表示します。
kubectl logs <long-job-pod-name>
次のような出力が表示されるはずです。
Starting long job...
Long job completed!
完了したジョブのログの表示
Kubernetes ジョブの利点の 1 つは、ジョブが完了した後でもログを表示できることです。これは、デバッグや監査の目的で非常に役立ちます。
失敗するジョブを作成して、デバッグ方法を確認しましょう。
cd ~/project
nano failed-job.yaml
次の YAML コンテンツをコピーして貼り付けます。
apiVersion: batch/v1
kind: Job
metadata:
name: failed-job
spec:
template:
spec:
containers:
- name: failed
image: busybox:1.28
command: ["sh", "-c", 'echo "Attempting task..." && exit 1']
restartPolicy: Never
backoffLimit: 2
このジョブは、常にステータスコード 1 で終了し、これは失敗を示します。ファイルを保存して nano を終了し、ジョブを作成します。
kubectl apply -f failed-job.yaml
ジョブが数回試行して失敗するまで(バックオフ制限まで)しばらく待ちます。次に、その状態を確認します。
kubectl get jobs failed-job
0/1 の完了が表示され、完了期限に達していることがわかります。
次に、失敗した Pod のログを確認して、何が問題だったのかを調べましょう。
kubectl get pods -l job-name=failed-job
いくつかの Pod が表示され、すべて Error 状態になっています。1 つを選択して、そのログを表示します。
kubectl logs <failed-pod-name>
次のような出力が表示されるはずです。
Attempting task...
Pod のログは、タスクが開始されたが、エラーコードで終了したことを示しています。この情報は、ジョブの失敗をデバッグするために不可欠です。
リアルタイムでのログの追跡
実行中のジョブのログをリアルタイムで追跡する場合は、-f フラグを使用できます。
kubectl logs -f <pod-name>
これは、出力が進行状況に合わせて表示されるようにしたい、より長い実行時間のジョブに特に役立ちます。
デモンストレーションのために、別の長時間実行ジョブを作成しましょう。
cd ~/project
nano counter-job.yaml
次の YAML コンテンツをコピーして貼り付けます。
apiVersion: batch/v1
kind: Job
metadata:
name: counter-job
spec:
template:
spec:
containers:
- name: counter
image: busybox:1.28
command:
[
"sh",
"-c",
'for i in $(seq 1 5); do echo "Count: $i"; sleep 5; done'
]
restartPolicy: Never
ファイルを保存して nano を終了し、ジョブを作成します。
kubectl apply -f counter-job.yaml
次に、そのログを追跡しましょう。まず、Pod の名前を見つけます。
kubectl get pods -l job-name=counter-job
次に、そのログを追跡します。
kubectl logs -f <counter-job-pod-name>
5 秒ごとにカウントが増加するのがわかります。
Count: 1
Count: 2
Count: 3
Count: 4
Count: 5
ログの追跡を停止するには、Ctrl+C を押します。
ログへのアクセスと分析の方法を理解することで、Kubernetes ジョブを効果的にトラブルシューティングし、デバッグできます。