0Pricing
DevOps Bootcamp · レッスン

データベース移行用の pre-upgrade Job

展開前に実行するよう Job に Annotation を付けます。

「データベース移行用の pre-upgrade Job」はCoddyKit上の無料DevOps Bootcampレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはDevOps Bootcamp学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 DevOps Bootcampコースには全4レッスンが含まれています。

実際のユースケース

新しいアプリケーションコードをロールアウトする前に、データベーススキーマの移行が必要になることがよくあります。その移行を安全に実行するには、pre-upgrade フックが最適です。

ロールアウト前に実行する理由

pre-upgrade として実行すると、新しい Pod が起動する前にスキーマの準備が整います。新しいコードが古く不一致なデータベースに接続することはありません。

"helm.sh/hook": pre-upgrade

Job から始める

移行は 1 回実行した後に終了するため、Kubernetes の Job としてモデル化します。Helm はアップグレードを続行する前に、Job の完了を待ちます。

apiVersion: batch/v1
kind: Job
metadata:
  name: db-migrate

フックアノテーションを追加する

メタデータで Job をフックとして指定します。helm.sh/hook アノテーションを pre-upgrade に設定すると、この通常の Job がフックになります。

metadata:
  annotations:
    "helm.sh/hook": pre-upgrade

移行コマンドを実行する

Job のコンテナで移行ツールを実行します。アプリケーションが使用するものと同じデータベースを指定し、スキーマの変更が適切な場所に反映されるようにしてください。

spec:
  containers:
    - name: migrate
      image: myapp:1.4
      command: ["./migrate", "up"]

失敗時に再起動しない

Job の restartPolicy は Never または OnFailure に設定してください。移行が無限にループするとアップグレードがブロックされ、Helm が先に進めなくなります。

spec:
  template:
    spec:
      restartPolicy: Never

イメージタグをテンプレート化する

イメージタグをテンプレート化して、移行ツールをアプリケーションと同期させます。Deployment が読み取るものと同じ .Values.image.tag を再利用し、バージョンを一致させてください。

image: "myapp:{{ .Values.image.tag }}"

Helm は完了するまでブロックする

pre-upgrade フックであるため、Helm は Job が成功を報告するまでアップグレードを一時停止します。移行が失敗すると、ロールアウトは実行されません。🛑

成功後にクリーンアップする

そうしないと、古い移行 Job がたまっていきます。フックに hook-delete-policy を組み合わせ、成功した Job を削除して名前空間を不要なリソースで埋めないようにしてください。

"helm.sh/hook-delete-policy": hook-succeeded

一意の名前が役立つ

フック Job は作成後に変更できないため、固定名にすると次のアップグレードで衝突する可能性があります。名前に .Release.Revision を含めると、実行ごとに異なる名前になります。

name: db-migrate-{{ .Release.Revision }}

ドライランでテストする

実際にアップグレードする前にチャートをレンダリングし、フックが正しいことを確認してください。dry-run を使うと、クラスターに変更を加えずに Helm が作成する Job マニフェストを確認できます。

helm upgrade myapp ./mychart --dry-run

クイックチェック

アップグレード中に、新しいアプリケーション Pod が起動する前にスキーマ移行を実行する必要があります。

振り返り

移行を pre-upgrade Job としてモデル化し、restartPolicy を Never に設定して、Helm が成功するまで待機してから新しいコードをロールアウトするようにしました。🗄️

よくある質問

「データベース移行用の pre-upgrade Job」レッスンは無料ですか?

はい。「データベース移行用の pre-upgrade Job」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、DevOps Bootcampコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 DevOps Bootcampコースには全4レッスンが含まれています。

「データベース移行用の pre-upgrade Job」で何を学びますか?

展開前に実行するよう Job に Annotation を付けます。 ブラウザで直接実行するハンズオンコードでDevOps Bootcampを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

DevOps Bootcampを始めるのに経験は必要ですか?

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

「データベース移行用の pre-upgrade Job」レッスンにはどのくらい時間がかかりますか?

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

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

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

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

  1. Hooks の仕組みと実行タイミング
  2. データベース移行用の pre-upgrade Job
  3. Hook の Weight と実行順序
  4. Hook の削除ポリシー
← DevOps Bootcampに戻る