今回は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を作るリソースです。
特徴:
label
とselector
の付与は推奨しないlabel
とselector
というのは、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
ここまで読んでいただいて、お疲れ様でした。
今度からネットワークリソースについて、触れていきたいと考えています。
宜しくお願い致します。
コメント