[CKAD] Kubernetesの心臓、Deploymentで宣言的デプロイをマスターする

こんにちは!今日は、Kubernetesで最もよく使われるリソースであり、CKAD試験でも非常に比重の高いDeployment(デプロイメント)について深く掘り下げていきます。Podを一つ一つ手動で管理する時代は終わりました。私たちが望む状態を定義するだけで、Kubernetesが自動的に合わせてくれる「宣言的デプロイ」の魔法を15分でマスターしましょう!


📑 目次

  1. 概要:命令的(Imperative) vs 宣言的(Declarative)デプロイ
  2. Deploymentの構造:ReplicasとPod Template
  3. 更新戦略:RollingUpdate vs Recreate
  4. バージョン管理の核心:RolloutとRollback
  5. CKAD実践のヒント:コマンド一行でデプロイする
  6. ハンズオン:実践練習問題

0. 概要:なぜDeploymentなのか? 🤔

Kubernetesにおけるデプロイ方式は大きく二つに分けられます。

  • 命令的デプロイ (Imperative): 「Podを3つ作って!」「イメージを更新して!」のように、段階的な命令を直接下す方式です。直感的ですが、管理が難しいです。
  • 宣言的デプロイ (Declarative): 「私が望む最終状態は、『Nginxイメージバージョン1.21』を使用する『Pod 3つ』だよ。」と仕様書(YAML)を提出する方式です。Kubernetesはこの最終状態(Desired State)を維持するために絶えず監視し、自ら復旧します。

この宣言的デプロイを実現してくれる核心コントローラーが、まさにDeploymentです。


1. Deploymentの構造:何を、いくつ? 🏗️

DeploymentのYAMLファイルを見ると、大きく三つの部分に分かれます。

  • Replicas: 維持すべきPodの数です。
  • Selector: DeploymentがどのPodを管理するかを決定する「名札(Label)」検索ルールです。
  • Template: 実際に作成されるPodの形(イメージ、ポート、環境変数など)を定義します。

💡 主要なYAML構造

apiVersion: apps/v1
kind: Deployment
metadata:
  name: web-deployment
spec:
  replicas: 3 # Podの数を維持
  selector:
    matchLabels:
      app: my-web # このラベルを持つPodを管理
  template:
    metadata:
      labels:
        app: my-web # 作成されるPodに付与されるラベル
    spec:
      containers:
      - name: nginx
        image: nginx:1.21
        ports:
        - containerPort: 80

2. 更新戦略:サービス中断なしのデプロイ 🔄

Deploymentの最大の利点は、サービスを中断することなくアプリケーションを更新できる点です。

1) RollingUpdate (デフォルト)

既存のPodを一つずつ停止させながら、新しいバージョンのPodを一つずつ作成します。ユーザーはサービス中断をほとんど感じません。

  • maxSurge: 更新中に意図した数よりもどれだけ多くのPodを作成できるかを設定します。
  • maxUnavailable: 更新中に使用できないPodの最大数を設定します。

2) Recreate

既存のPodをすべて一度に停止させた後、新しいバージョンのPodを作成します。一時的なサービス中断(Downtime)が発生しますが、旧バージョンと新バージョンが共存してはいけない環境で使用します。


3. バージョン管理の核心:RolloutとRollback ⏪

デプロイがうまくいかなかったら?慌てないでください。Deploymentはデプロイ履歴を記録しており、いつでも過去に戻ることができます。

  • デプロイ状態の確認: kubectl rollout status deployment/my-deploy
  • デプロイ履歴の確認: kubectl rollout history deployment/my-deploy
  • 以前のバージョンに復元: kubectl rollout undo deployment/my-deploy
  • 特定のバージョン(revision 2)に復元: kubectl rollout undo deployment/my-deploy –to-revision=2

4. CKAD実践のヒント:速度が合格の鍵! ⏱️

試験会場では、YAMLを最初からタイプする時間はありません。コマンドを最大限に活用してください。

1) コマンドでDeploymentを素早く作成する

# nginxイメージを使用するデプロイを作成 (Pod 3個)
kubectl create deployment my-web --image=nginx:1.21 --replicas=3

2) イメージを更新する(試験の頻出問題!)

kubectl set image deployment/my-web nginx=nginx:1.22

3) スケーリング(Podの数を増やす/減らす)

kubectl scale deployment/my-web --replicas=5

5. ハンズオン:実践練習問題 🛠️

シナリオ:

  1. `app-deploy`という名前のDeploymentを作成してください。(イメージ: httpd:2.4.48、レプリカ: 2個)
  2. イメージをhttpd:2.4.49に更新し、デプロイプロセスを監視してください。
  3. 更新に問題が発生したと仮定し、直ちに以前のバージョン(2.4.48)にロールバックしてください。

[解答ガイド]

# 1. 作成
kubectl create deployment app-deploy --image=httpd:2.4.48 --replicas=2

# 2. 更新と確認
kubectl set image deployment/app-deploy httpd=httpd:2.4.49
kubectl rollout status deployment/app-deploy

# 3. ロールバック
kubectl rollout undo deployment/app-deploy

まとめ 🏁

Deploymentは単に複数のPodを起動するツールではありません。「最終状態を宣言し、Kubernetesがその状態を維持するように信頼して任せること」、これがまさにKubernetesらしい運用の核心です。

今日学んだ更新戦略とロールバック機能をしっかり習得すれば、実務での安定したデプロイはもちろん、CKAD合格証書も一歩近づくでしょう!🌟


Comments

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です