広告

kubernetes – JobとCronJob Workload

infrastructure as code

今回はWorkloadの最後2種類のリソースJobとCronJobについて、ご紹介していきたいと思います。

Workloads リソースの概要

  • Pod:Workloadsリソースの最小単位
  • ReplicaSet(旧ReplicationController):Podのレプリカを作成し、指定した数のPodを維持し続けるリソースです。
  • Deployment:ローリングアップデートやロールバックなどを実現するリソースです。
  • DaemonSet(ReplicaSet亜種):各ノードにPodを一つずつ配置するリソースです。
  • StatefulSet(ReplicaSet亜種):ステートフルなPodを作成できるリソースです。
  • Job:Podを利用して、指定回数のみ処理を実行させるリソースです。(使い捨てPod)
  • CronJob:Jobを管理するリソースです。

Job

Jobは、Podを利用して、指定回数の処理を実行させるリソースです。簡単にいうと、使い捨てのPodを作るリソースです。

特徴:

  • labelselectorの付与は推奨しない
    • labelselectorというのは、Podを識別や分類するための属性です。
  • Pod起動失敗時の制御spec.template.restartPolicy
    • OnFailure:Pod起動失敗の場合、新規Podを作成して、起動を試みる
    • Never:Pod起動失敗の場合、失敗のPodの再起動を試みる
      • 試みる度び、カウンターが増加する
    • Always(JobのPodは使えない):
  • 実行回数制御
    • spec.competions:実行成功回数。成功回数まで繰り返し実行する。(デフォルト値は1)
    • spec.parallelism:実行に同時起動するPod数。(デフォルト値は1)
    • spec.backoffLimit:失敗時に試みる回数。回数超えた場合Jobが失敗する。(デフォルト値は6)
      • 0に設定すると、失敗したら即終了
      • 無制限にすることはできない

job manifest 例

apiVersion: batch/v1
kind: Job
metadata:
  name: pi  # Job名
spec:
  template:  # Podの設定
    spec:
      containers:
      - name: pi
        image: perl
        command: ["perl",  "-Mbignum=bpi", "-wle", "print bpi(2000)"]
      restartPolicy: Never
  backoffLimit: 4

※公式ドキュメント例を使用

CronJob

CronJobは、Jobを管理するリソースです。定期的にJobを実行させることができます。

時間の指定はcronの形式で指定できます。

特徴:

  • 定期の実行を一時的に停止することが可能
  • Job衝突時の設定spec.concurrencyPolicy
    • Allow(デフォルト):CornJobのスケジュールによるJob同時実行に大して制限を行わない
    • Forbid:前回のJobが終わらない場合、次のJobは開始しない
    • Replace:前回のJobが終わらない場合、次のJob開始時間になると、前回のJobをキャンセルし、Jobを開始する
  • 実行開始時間に関する制御spec.startingDeadlineSeconds
    • デフォルト:Jobの開始がどんなに遅れても、開始は必ずする
    • 時間指定:指定する場合、指定時間を過ぎると、Jobの開始がスキップされる
  • CronJobの履歴:
    • sepc.successfulJobsHistoryLimit:成功したJobの履歴保持数。(デフォルト値は3)
    • spec.failedJobsHistoryLimit:失敗したJobの履歴保持数。(デフォルト値は3)

CronJob、Job、Podの関係、以下になります。
CronJob (管理)→ Job (管理)→ Pod

CronJob manifest 例

apiVersion: batch/v1beta1
kind: CronJob
metadata:
  name: hello  # CronJob名
spec:
  schedule: "*/1 * * * *"  # Job実行スケジュール
  jobTemplate:  # Jobの設定
    spec:
      template:  # Podの設定
        spec:
          containers:
          - name: hello
            image: busybox
            args:
            - /bin/sh
            - -c
            - date; echo Hello from the Kubernetes cluster
          restartPolicy: OnFailure

※公式ドキュメント例を使用

最後に

3回を分けて、いよいよk8sのWorkloadリソースについてすべてご紹介しました。
Kubernetesが実際に仕事をしてくれる大事なリソースとなります。
概念を理解するために7種類をすべて紹介しましたが、Kubernetes運用の推奨を考慮して、実際に運用で作成するものは以下のご種類です。

  • Deployment(ReplicaSetとPodを収めている)
  • DaemonSet
  • StatefulSet
  • Job
  • CronJob

ここまで読んでいただいて、お疲れ様でした。
今度からネットワークリソースについて、触れていきたいと考えています。

宜しくお願い致します。

コメント

タイトルとURLをコピーしました