1. 導入:なぜローリングアップデートが必要なのか?
Webサービスを運用していると、アプリケーションの更新(デプロイ)は避けて通れません。しかし、更新のたびにサービスを停止していては、ユーザーに不便をかけてしまいます。
Kubernetesの「Deployment」は、新しいバージョンへ入れ替える際に、古いPodを一度に消すのではなく「徐々に新しいものへ置き換える」ことで、ユーザーに影響を与えずに更新を完了させる「ローリングアップデート」という仕組みを提供します。これにより、サービスを止めない「ゼロダウンタイム」デプロイが可能になります。
2. 基礎知識:DeploymentとPodの関係
Kubernetesにおける基本的な実行単位は「Pod」ですが、Podは個別に管理するのが非常に大変です。そこで登場するのが「Deployment」です。
Deploymentは「このアプリを3つ動かしてほしい」といった「あるべき状態」を宣言することで、自動的に「ReplicaSet」という管理用リソースを作成し、Podの数を維持します。
ローリングアップデート中、Deploymentは古いPodを削除する前に新しいPodを起動させ、正常に動作することを確認してから古いPodを終了させるという制御を自動で行います。
3. 実装:Deploymentマニフェストの書き方
Deploymentを定義するには、YAMLファイルを作成し、`kubectl apply`コマンドで適用するだけです。
重要なのは、`strategy`(戦略)の設定です。デフォルトでローリングアップデートが有効になっていますが、明示的に記述することで更新の挙動を制御できます。
4. サンプルプログラム:Deployment定義ファイル
以下のコードを `deployment.yaml` として保存し、`kubectl apply -f deployment.yaml` を実行してみてください。
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-app-deployment
spec:
# 常に3つのPodが動く状態を維持する
replicas: 3
selector:
matchLabels:
app: my-web-app
template:
metadata:
labels:
app: my-web-app
spec:
containers:
- name: my-app
- containerPort: 80
5. 応用・注意点:現場で役立つTIPS
・ロールバックの活用:
万が一、デプロイ後にバグが見つかった場合でも、`kubectl rollout undo deployment/my-app-deployment` を実行するだけで、一瞬で一つ前のバージョンに戻すことができます。
・ヘルスチェックの設定:
ローリングアップデートを安全に行うためには、Podが「準備完了したか」をKubernetesに伝える「Readiness Probe(準備完了プローブ)」の設定が不可欠です。これがないと、起動した瞬間にトラフィックが流れ込み、エラーが発生する可能性があります。
・まとめ:
Deploymentは、単にアプリを動かすだけでなく「安全な更新」を約束するための強力なツールです。まずは手元の環境で`kubectl rollout status`コマンドを実行し、実際にPodが入れ替わっていく様子を観察することから始めてみてください。

コメント