コンテンツにスキップ

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