データベース移行用の pre-upgrade Job
展開前に実行するよう Job に Annotation を付けます。
「データベース移行用の pre-upgrade Job」はCoddyKit上の無料Helm Academyレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはHelm Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Helm Academyコースには全4レッスンが含まれています。
実際のユースケース
新しいアプリケーションコードをロールアウトする前に、データベーススキーマの移行が必要になることがよくあります。その移行を安全に実行するには、pre-upgrade フックが最適です。
ロールアウト前に実行する理由
pre-upgrade として実行すると、新しい Pod が起動する前にスキーマの準備が整います。新しいコードが古く不一致なデータベースに接続することはありません。
"helm.sh/hook": pre-upgradeJob から始める
移行は 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チューター)、Helm Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Helm Academyコースには全4レッスンが含まれています。
「データベース移行用の pre-upgrade Job」で何を学びますか?
展開前に実行するよう Job に Annotation を付けます。 ブラウザで直接実行するハンズオンコードでHelm Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Helm Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのHelm Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。
「データベース移行用の pre-upgrade Job」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このHelm Academyレッスンでコードを書いて実行できますか?
はい。すべてのHelm Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- Hooks の仕組みと実行タイミング
- データベース移行用の pre-upgrade Job
- Hook の Weight と実行順序
- Hook の削除ポリシー