ローリングアップデートとロールバック
ダウンタイムなしでアプリケーションを更新し、問題が発生した場合は以前のバージョンに戻します。
「ローリングアップデートとロールバック」はCoddyKit上の無料DevOps Bootcampレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはDevOps Bootcamp学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 DevOps Bootcampコースには全4レッスンが含まれています。
ゼロダウンタイム更新: なぜ必要か
稼働中のアプリケーションを更新する場面を想像してください。慎重に計画しなければ、ユーザーがダウンタイムやエラーに遭遇する可能性があります。ここでKubernetesのローリングアップデートが力を発揮します。
ローリングアップデートを使うと、サービスを中断せずにアプリケーションを新しいバージョンへ更新できます。新しいバージョンを段階的に展開するため、アプリケーションの利用可能な状態が保たれます。
Deploymentが更新を処理する方法
DeploymentのPodテンプレートを更新するとき(コンテナイメージの変更など)、Kubernetesはすべてを停止して再起動するわけではありません。代わりに、デフォルトでRollingUpdateストラテジーを使用します。
- 更新後の設定で新しいPodを作成します。
- 新しいPodの準備が整うと、古いPodを段階的に終了させます。
- この処理により、ダウンタイムを最小限に抑えた、または発生させないスムーズな移行が実現します。
ロールアウト速度の制御
Deploymentの.spec.strategy.rollingUpdateセクションにある2つの主要なパラメーターを使って、ローリングアップデートの動作を細かく調整できます。
maxUnavailable: 更新中に利用できなくなるPodの最大数です。絶対数またはパーセンテージで指定できます。maxSurge: 望ましいPod数を超えて作成できるPodの最大数です。こちらも絶対数またはパーセンテージで指定できます。
デフォルトでは、どちらも25%に設定されています。
最初のDeployment
シンプルなNginx Deploymentから始めましょう。このYAMLでは、nginx:1.14.2を3つのレプリカで実行する初期アプリケーションを定義しています。
次のステップでローリングアップデートを実行する際のベースとして使用します。
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-nginx
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.14.2
ports:
- containerPort: 80ローリングアップデートの実行
ここで、Nginxのバージョンを1.14.2から1.15.0に更新します。YAML内のイメージを変更して適用するだけです。
Kubernetesは変更を検出し、ローリングアップデートを自動的に開始します。以下のimageフィールドを確認してください。
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-nginx
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.15.0
ports:
- containerPort: 80ロールアウトステータスの監視
更新したYAMLを適用した後、kubectl rollout statusコマンドを使ってローリングアップデートの進行状況を監視できます。
kubectl rollout status deployment/my-nginx
更新が完了するまで、新しいPodが作成され、古いPodが終了されることを示すメッセージが表示されます。また、kubectl get rsを使って古いReplicaSetと新しいReplicaSetを確認することもできます。
ロールアウト履歴の確認
KubernetesはDeploymentのリビジョン履歴を保持します。これは変更内容の把握や、必要に応じたロールバックに非常に役立ちます。
履歴を確認するには、次のコマンドを使います。
kubectl rollout history deployment/my-nginx
Deploymentのそれぞれ異なる状態を表すリビジョンの一覧が表示されます。CHANGE-CAUSEには、多くの場合、コマンドやYAMLの変更内容が反映されます。
ロールバックが必要な場合
慎重にテストしていても、新しいアプリケーションバージョンに、見つけられなかったバグやパフォーマンスの問題が含まれることがあります。このような重大な状況では、既知の安定した状態にすぐ戻せる方法が必要です。
そこで役立つのがロールバックです。問題のある更新を取り消し、履歴にある以前の正常なバージョンへDeploymentを戻せます。
ロールバックの実行
直前のリビジョンへロールバックするには、次のコマンドを使います。
kubectl rollout undo deployment/my-nginx
特定のリビジョン(例: リビジョン1)へロールバックする場合は、次のように指定できます。
kubectl rollout undo deployment/my-nginx --to-revision=1
Kubernetesは別のローリングアップデートを実行し、Podを指定した過去の設定へ戻します。
ロールアウトストラテジーの確認
Kubernetes DeploymentのRollingUpdateストラテジーの動作を制御するために使用できるパラメーターは、次のうちどれですか。
まとめ: スムーズな更新と安全策
Kubernetes Deploymentによってゼロダウンタイムのローリングアップデートを実現し、アプリケーションを新しいバージョンへスムーズに移行できることを学びました。次の点を確認しました。
- Deploymentはデフォルトで
RollingUpdateを使用します。 maxUnavailableとmaxSurgeが更新速度を制御します。kubectl rollout statusで進行状況を監視できます。kubectl rollout historyでリビジョンを追跡できます。kubectl rollout undoで安定したバージョンへすぐにロールバックできます。
これらの機能は、アプリケーションの高可用性と信頼性を維持するうえで不可欠です。
よくある質問
「ローリングアップデートとロールバック」レッスンは無料ですか?
はい。「ローリングアップデートとロールバック」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、DevOps Bootcampコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 DevOps Bootcampコースには全4レッスンが含まれています。
「ローリングアップデートとロールバック」で何を学びますか?
ダウンタイムなしでアプリケーションを更新し、問題が発生した場合は以前のバージョンに戻します。 ブラウザで直接実行するハンズオンコードでDevOps Bootcampを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
DevOps Bootcampを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのDevOps Bootcampは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。
「ローリングアップデートとロールバック」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このDevOps Bootcampレッスンでコードを書いて実行できますか?
はい。すべてのDevOps Bootcampレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- Deploymentを理解する
- ReplicaSetによるアプリケーションのスケーリング
- ローリングアップデートとロールバック
- デプロイ戦略:Blue-GreenとCanary