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

📑 目次
- 概要:命令的(Imperative) vs 宣言的(Declarative)デプロイ
- Deploymentの構造:ReplicasとPod Template
- 更新戦略:RollingUpdate vs Recreate
- バージョン管理の核心:RolloutとRollback
- CKAD実践のヒント:コマンド一行でデプロイする
- ハンズオン:実践練習問題
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. ハンズオン:実践練習問題 🛠️
シナリオ:
- `app-deploy`という名前のDeploymentを作成してください。(イメージ: httpd:2.4.48、レプリカ: 2個)
- イメージをhttpd:2.4.49に更新し、デプロイプロセスを監視してください。
- 更新に問題が発生したと仮定し、直ちに以前のバージョン(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合格証書も一歩近づくでしょう!🌟
コメントを残す