Job系@リソース定義¶
はじめに¶
本サイトにつきまして、以下をご認識のほど宜しくお願いいたします。
01. 専用Job¶
Jobに、ArgoCDのSyncに伴う処理を設定する。
02.metadata¶
generateName¶
Jobに、Syncフェーズフック名を設定する。
apiVersion: batch/v1
kind: Job
metadata:
namespace: argocd
name: foo-job
generateName: foo-hook
annotations¶
▼ argocd.argoproj.io/hook¶
Jobに、ArgoCDのSyncフェーズを設定する。
設定したフェーズのタイミングで、ArgoCDはこのJobをフックする。
| 設定項目 | 処理の実行タイミング | 適するJobの処理 |
|---|---|---|
| PreSync | Syncの前 | DBマイグレーション処理 |
| Sync | Syncと同時 | Deploymentのアップデート戦略以外のデプロイ実行処理 |
| Skip | Syncスキップ時 | |
| PostSync | Syncの後 | ヘルスチェック |
| SyncFail | Syncの失敗時 | Sync失敗の残骸となったKubernetesリソースの削除処理 |
*実行例*
DBマイグレーションを実行するJobを定義しておき、これをArgoCDのSync前にフックする。
フックのタイミングは、argocd.argoproj.io/hookキーで設定する。
その場合、DBマイグレーション ---> ArgoCD Sync開始 ---> アプリ起動 ---> ArgoCD Sync完了という流れになる。
apiVersion: batch/v1
kind: Job
metadata:
namespace: argocd
name: foo-migration-job
annotations:
# Syncの前に実行する。
argocd.argoproj.io/hook: PreSync
# 次のフック前に削除する。
argocd.argoproj.io/hook-delete-policy: BeforeHookCreation
# 優先度を設定する。
argocd.argoproj.io/sync-wave: 1
spec:
backoffLimit: 0
template:
spec:
containers:
- name: foo-app
image: foo-app:1.0.0
command: ["<マイグレーションを実行するためのコマンド>"]
envFrom:
- secretRef:
# DBの接続情報 (ホスト、ユーザー名、パスワード) はSecretに設定しておく。
name: foo-secret
restartPolicy: Never
もしArgoCDのSyncフェーズを使用しない場合、アプリケーションの起動直前にDBマイグレーションを実行してしまってもよい。
その場合、ArgoCD Sync開始 ---> DBマイグレーション ---> アプリ起動 ---> ArgoCD Sync完了という流れになる。
FROM node:22.11.0-bullseye-slim as base
...
# Nodeアプリケーションの起動直前にDBマイグレーションを実行してしまう
ENTRYPOINT ["npx prisma migrate deploy", "npm run start"]
もし手動でマイグレーションを実行する運用であれば、kubectl execコマンドで接続した後に、マイグレーションコマンドを実行する。
$ kubectl exec -it <Pod名> -- bash
/usr/local/src/foo/node_modules/.bin/prisma migrate deploy
▼ argocd.argoproj.io/sync-wave¶
同じSyncフェーズに実行するように設定したJobが複数ある場合、Jobの実行の優先度付けを設定する。
正負の数字を設定でき、数字が小さい方が優先される。
優先度が同じ場合、ArgoCDがよしなに順番を決めてしまう。
デフォルトでは優先度が0であるため、必ず明示的に設定しておく。
apiVersion: batch/v1
kind: Job
metadata:
namespace: argocd
name: foo-job
annotations:
argocd.argoproj.io/hook: SyncFail
argocd.argoproj.io/sync-wave: -1 # 優先度-1 (3個の中で一番優先される)
apiVersion: batch/v1
kind: Job
metadata:
namespace: argocd
name: foo-job
annotations:
argocd.argoproj.io/hook: SyncFail
argocd.argoproj.io/sync-wave: 0 # 優先度0 (デフォルトで0になる)
apiVersion: batch/v1
kind: Job
metadata:
namespace: argocd
name: foo-job
annotations:
argocd.argoproj.io/hook: SyncFail
argocd.argoproj.io/sync-wave: 1 # 優先度1