Lab 2: Deployment

このラボでは、Deploymentリソースを使ってアプリケーションをデプロイし、レプリカ数の管理とスケーリングを学びます。

1. YAMLマニフェストの作成

まずDeploymentのマニフェストファイルを作成します。

cat << 'EOF' > whoami-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: whoami
  labels:
    app: whoami
spec:
  replicas: 3
  selector:
    matchLabels:
      app: whoami
  template:
    metadata:
      labels:
        app: whoami
    spec:
      containers:
      - name: whoami
        image: containous/whoami
        ports:
        - containerPort: 80
EOF
💡 マニフェストの構造:
spec.replicas … 起動するPodの数
spec.selector … Deploymentが管理するPodを特定するラベルセレクタ
spec.template … 作成されるPodの定義(ラベルとコンテナ仕様)

2. Deploymentを作成する

# マニフェストを適用
kubectl apply -f whoami-deployment.yaml

# Deploymentの状態を確認
kubectl get deployments

# Podが3つ起動していることを確認
kubectl get pods -l app=whoami
💡 ポイント: -l app=whoami でラベルによるフィルタリングができます。

3. ReplicaSetの確認

DeploymentはReplicaSetを介してPodを管理しています。

# ReplicaSetを確認
kubectl get replicasets

# ReplicaSetの詳細
kubectl describe replicaset -l app=whoami
💡 関係性: Deployment → ReplicaSet → Pod の階層構造で管理されています。Deploymentは「あるべき状態」を宣言し、ReplicaSetが実際のPod数を維持します。

4. スケーリング

# レプリカ数を5に増やす
kubectl scale deployment whoami --replicas=5

# Podが増えたことを確認
kubectl get pods -l app=whoami

# レプリカ数を2に減らす
kubectl scale deployment whoami --replicas=2

# Podが減ったことを確認
kubectl get pods -l app=whoami

5. 自己回復(セルフヒーリング)の確認

Podを手動で削除して、Deploymentが自動的に再作成することを確認します。

# 現在のPod一覧(Pod名を確認)
kubectl get pods -l app=whoami

# Podを1つ削除(表示されたPod名に置き換えてください)
kubectl delete pod [Pod名]

# すぐにPod一覧を確認 - 新しいPodが作成されている
kubectl get pods -l app=whoami
💡 セルフヒーリング: Deploymentで指定したレプリカ数を常に維持するよう、Kubernetesが自動的にPodを再作成します。これがDeploymentを使う大きなメリットです。

6. クリーンアップ

# Deploymentを削除(配下のReplicaSet、Podも自動削除される)
kubectl delete -f whoami-deployment.yaml

# 確認
kubectl get deployments
kubectl get pods -l app=whoami

📝 練習問題

課題: nginxのDeploymentを作成・操作してみましょう。
  1. nginx-deploy という名前で、nginx イメージを使ったDeploymentをレプリカ数2で作成する
  2. Podが2つ起動していることを確認する
  3. レプリカ数を4にスケールアップする
  4. Podを1つ削除して、自動で再作成されることを確認する
  5. Deploymentを削除してクリーンアップする

解答例

# 1. Deployment作成(コマンドラインで作成する方法)
kubectl create deployment nginx-deploy --image=nginx --replicas=2

# 2. Pod確認
kubectl get pods -l app=nginx-deploy

# 3. スケールアップ
kubectl scale deployment nginx-deploy --replicas=4
kubectl get pods -l app=nginx-deploy

# 4. セルフヒーリング確認
kubectl delete pod $(kubectl get pods -l app=nginx-deploy -o jsonpath='{.items[0].metadata.name}')
kubectl get pods -l app=nginx-deploy

# 5. クリーンアップ
kubectl delete deployment nginx-deploy

次のラボへ → Lab 3: Service