kubernetesのCronJobについて
kubernetesのCronJobについて
業務でk8sのクローンジョブを利用して、定期バッジ処理をする機会があった。
忘れない為に学んだ内容を記載する
クローンジョブを行うようなケースは下記のようなものがあります。
1. 定期的に送信メールを送る 2. 1日一回ユーザー情報を取得して、不正ユーザーがいない確認する
k8sのcronjobの仕組み
k8sを利用すれば、CronJobというリソースで定期バッジ処理を行うことが可能です。
K8s CronJob ではコントローラーがスケジュールを管理し、実行ごとに Pod を作成して、終了したらそれを破棄します。(コンテナを stateless, immutable, ephemeral に保てます)
cronJobの作成方法
例)
apiVersion: batch/v1beta1 kind: CronJob metadata: name: hello spec: schedule: "*/1 * * * *" ※1 concurrencyPolicy: Forbid ※2 startingDeadlineSeconds: 10 ※3 jobTemplate: spec: template: spec: containers: - name: hello image: busybox imagePullPolicy: IfNotPresent command: - /bin/sh - -c - date; echo Hello from the Kubernetes cluster restartPolicy: OnFailure ※4
※1 実行時間の指定
# ┌───────────── minute (0 - 59) # │ ┌───────────── hour (0 - 23) # │ │ ┌───────────── day of the month (1 - 31) # │ │ │ ┌───────────── month (1 - 12) # │ │ │ │ ┌───────────── day of the week (0 - 6) (Sunday to Saturday; # │ │ │ │ │ 7 is also Sunday on some systems) # │ │ │ │ │ # │ │ │ │ │ # * * * * *
例)毎日午前0時01分に定期実行したい場合
1 0 * * *
※2 古いJobがまだ動いてる際に、新しいJobを実行するかどうかのポリシーを設定する
Allow(default):同時実行に対して制限を行わない Forbid:前のJobが終了していない場合は次のJobは実行しない(同時実行を行わない) Replace:前のJobをキャンセルし、新たにJobを開始する
※3 開始時刻が遅れた場合に許容できる秒数
※4 kebectl runによってpodを作成する時のrestart policy
--restart=AlwaysならDeploymentが作成される --restart=OnFailureならJobがが作成される --restart=Neverなら通常のpodが作成される