0Pricing
Kubernetes Basics · レッスン

ローリングアップデートとロールバック

ダウンタイムなしでアプリケーションを更新し、問題が発生した場合は以前のバージョンに戻します。

「ローリングアップデートとロールバック」はCoddyKit上の無料Kubernetes Basicsレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはKubernetes Basics学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Kubernetes Basicsコースには全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チューター)、Kubernetes Basicsコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Kubernetes Basicsコースには全4レッスンが含まれています。

「ローリングアップデートとロールバック」で何を学びますか?

ダウンタイムなしでアプリケーションを更新し、問題が発生した場合は以前のバージョンに戻します。 ブラウザで直接実行するハンズオンコードでKubernetes Basicsを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Kubernetes Basicsを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのKubernetes Basicsは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。

「ローリングアップデートとロールバック」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このKubernetes Basicsレッスンでコードを書いて実行できますか?

はい。すべてのKubernetes Basicsレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. Deploymentを理解する
  2. ReplicaSetによるアプリケーションのスケーリング
  3. ローリングアップデートとロールバック
  4. デプロイ戦略:Blue-GreenとCanary
← Kubernetes Basicsに戻る