LoginSignup
8
4

More than 3 years have passed since last update.

【Kubernetes】Job/CronJobのmanifest作成と設定値メモ

Last updated at Posted at 2019-11-06

やること

KubernetesでCronJobを動かすためのマニフェストファイル(Manifests)を作成します。
設定値などのメモも記載します。

CronJobを作成

YAMLファイルを作成

cronjob.yml
apiVersion: batch/v1beta1
kind: CronJob
metadata:
  # Jobの名前
  name: my-cronjob
spec:
  # スケジュールはcron形式
  schedule: "*/1 * * * *"
  # スケジュール対象外にするか
  suspend: false
  # ジョブを同時実行するかどうか
  concurrencyPolicy: Forbid
  # ジョブの開始期限(秒)
  startingDeadlineSeconds: 100
  # ジョブ成功の履歴数
  successfulJobsHistoryLimit: 7
  # ジョブ失敗の履歴数
  failedJobsHistoryLimit: 3
  # 実行内容を指定
  jobTemplate:
    spec:
      # 正常終了回数
      completions: 1
      # 並列数
      parallelism: 1
      # リトライ回数
      backoffLimit: 0
      template:
        spec:
          # 再起動の設定
          restartPolicy: OnFailure
          containers:
          - name: my-cronjob
            # imageを設定
            image: busybox
            # コマンドを設定
            args:
            - /bin/sh
            - -c
            - date

補足事項

上記で作成したCronJobの設定値についての補足です。
オプションは、不要であれば行ごと削除しても問題ありません。そのときはデフォルト値が有効になります。

suspend

このフィールドはオプションです。デフォルトはfalse。
スケジュール実行を一時的に止めたいなど、対象外にしたいときはtrueを設定してください。

concurrencyPolicy

このフィールドはオプションです。デフォルトはAllow。
Allow:並列実行を許可。
Forbid:前回のジョブが終わってないときは、ジョブをスキップします。並列実行はしません。
Replace:前回のジョブが終わってないときは、ジョブをキャンセルし新しいジョブを実行します。

startingDeadlineSeconds

このフィールドはオプションです。
何らかの理由でジョブのスケジュールが遅れたときに、開始する期限(秒単位)を設け、startingDeadlineSecondsに到達するまでジョブの再試行を続けます。
値を指定しないときは、CronJobはタイムアウトしません。

successfulJobsHistoryLimit

このフィールドはオプションです。デフォルトは3。
0を設定すると、ジョブ終了後の履歴は保持されません。

failedJobsHistoryLimit

このフィールドはオプションです。デフォルトは1。
0を設定すると、ジョブ終了後の履歴は保持されません。

completions

このフィールドはJobのオプションです。
Jobの正常終了した回数を指定できます。この値に達するとJobが完了となります。

parallelism

このフィールドはJobのオプションです。デフォルトは1。
Jobの並列数です。

backoffLimit

このフィールドはJobのオプションです。デフォルトは6。
Jobのリトライ回数です。
0を設定すると、リトライしません。1を設定すると、1回リトライするのでジョブは2回動くことになります。

restartPolicy

これは、再起動するかどうかを設定する訳ではなく、どのように再起動するかを設定します。
Never:起動するごとに失敗のカウントをして、新しいPodを作成し再実行します。
OnFailure:起動するごとに失敗のカウントをせず、同じPodで再実行します。

image/args

この辺りはCronJob特有ではなくKubernetes共通なので省略します。以下のあたりを参考にしてみてください。
https://kubernetes.io/docs/concepts/containers/images/
https://kubernetes.io/docs/tasks/inject-data-application/define-command-argument-container/
ちなみにですが、imageは最速でCronJobを実行したかったのでbusyboxを利用させていただきました。
https://hub.docker.com/_/busybox

さいごに

これでManifestファイルの作成はできました。
linuxのcronと比較すると、Dockerのimageを準備しておくなど面倒なこともありますが、時間の設定や環境変数、コマンドラインなど似ているところも多いですね。
それに加えて随分と高機能になっていると思います。

このManifestファイルをもとに、kubectlコマンドを使用して実際に動かしてる記事はこちらです。
https://qiita.com/boutan/items/ec6c0f410bf32e9caa78

8
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
4