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
キーで設定する。
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.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