grasys blog

Kubernetes の Pod のライフサイクルを理解しよう!初心者向け解説と GKE での検証

こんにちは!この記事では、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 などのクラウドサービスを使うことで簡単に検証や実験ができます。


採用情報
お問い合わせ