目次
こんにちは!この記事では、Kubernetes の基本である「Pod のライフサイクル」について解説します。
Pod は Kubernetes の中で最も基本的なコンポーネントで、アプリケーションを動かす「容器」のようなものです。この仕組みを理解することで、Kubernetes をより効果的に使えるようになります
また、Google Cloud の Google Kubernetes Engine(以下、GKE) を使って、実際に Pod のライフサイクルを検証してみましょう
Pod とは?
まず、Pod について簡単に説明します。
- Pod は Kubernetes の最小デプロイ単位です。
- 1 つ以上のコンテナを含むことができますが、通常は 1 つのコンテナを持つことが多いです。
- 同じ Pod 内のコンテナは、同じネットワーク空間やストレージボリュームを共有します。
Pod のライフサイクル
Pod のライフサイクルにはいくつかのフェーズがあります。それぞれの状態を理解しておくと、トラブルシューティングや管理がしやすくなります。
ライフサイクルフェーズ
1. Pending
- Pod がスケジュールされたけど、まだ実行できるノードが見つかっていない状態。
- 例:ノードのリソースが不足している場合。
2. Running
- Pod が正常にノード上で実行されている状態。
3. Succeeded
- Pod 内の全てのコンテナが終了し、成功としてマークされた状態。
4. Failed
- Pod 内の少なくとも 1 つのコンテナがエラーで終了した場合。
5. Unknown
- Pod の状態が取得できない場合
GKE で Pod ライフサイクルを検証してみよう
では、GKE を使って実際に Pod のライフサイクルを見てみましょう!
ステップ 1:GKE クラスターの作成
$ gcloud container clusters create [YOUR_CLUSTER_NAME] \
--zone=[ZONE]
ステップ 2:kubectl を設定
ターミナルで以下を実行して kubectl を設定します。
$ gcloud container clusters get-credentials [YOUR_CLUSTER_NAME] --zone [ZONE]
これでクラスターにアクセスできるようになります。
ステップ 3:サンプル Pod を作成
以下の YAML ファイルを作成し、Pod をデプロイします。
sample-pod.yaml
apiVersion: v1
kind: Pod
metadata:
name: sample-pod
spec:
containers:
- name: nginx
image: nginx:1.27
kubectl apply -f sample-pod.yaml
ステップ 4:ライフサイクルを確認
1. Pod の状態を確認する:
watch "kubectl get pod sample-pod -o yaml | grep 'phase:'"
状態が Pendding -> Running に変わるを確認できるはずです
※より詳細なステータスを確認したい場合は kubectl get pod
コマンドを使ってください
2. Pod を削除して Succeeded を確認
kubectl delete pod sample-pod
状態が Running -> Succeeded に変わるを確認できるはずです
3. Restart policy を設定
Pod の spec に restartPolicy を指定することで、失敗時の挙動を変更できます。
- Always(デフォルト)
- 終了後にコンテナを自動的に再起動します。
- OnFailure
- エラーで終了した場合にのみコンテナを再起動します(終了ステータスがゼロ以外)。
- Never
- 終了したコンテナを自動的に再起動しません。
failed-sample-pod.yaml
apiVersion: v1
kind: Pod
metadata:
name: sample-pod
spec:
containers:
- name: alpine
image: alpine
command: ["sh", "-c"]
args:
- exit 10
restartPolicy: Never
4. Pod を作成して Failed を確認
kubectl apply -f failed-sample-pod.yaml
※終わったら以下を実行
kubectl delete pod sample-pod
Pod ライフサイクルの活用例
- Pending で止まる場合のトラブルシューティング
- リソース不足、スケジューリングポリシーなどを確認
- Failed の原因調査
- ログ確認:
kubectl logs sample-pod
まとめ
Kubernetes の Pod のライフサイクルを理解することは、運用やトラブルシューティングに役立ちます。
また、GKE などのクラウドサービスを使うことで簡単に検証や実験ができます。