KubernetesオブジェクトのJob
5481 ワード
本節の内容を学ぶ前に、PodとReplicaSetについて基本的な理解を持ってほしい.具体的には、この2つの記事を参照してください. KubernetesオブジェクトのPod KubernetesオブジェクトのReplicaSet Jobオブジェクトは、通常、データベースの移行、バッチ・スクリプトなど、一度だけ実行するタスクを実行するために使用されます.ジョブ・オブジェクトを使用して実行中のPodを作成すると、ジョブ・コントローラは、実行に失敗したPod(例えば、Podが存在するノードの再起動やダウンタイム)を自動的に再起動するため、信頼性が高くなります.
Jobの本質は、1つまたは複数のPodが動作が完了するまで健全に動作することを確保することである.
1.ジョブオブジェクトを作成する
次に、πを小数点以下2000ビットまで計算するためのPodを開始するJobオブジェクトを作成する例を示します.
Describeコマンドを実行し、このジョブの詳細を表示します.
現在実行中のPodを表示するには、次の手順に従います.
No resources foundを返すと、このπを計算するPodが実行済みであることを示し、
2.Jobオブジェクトパラメータの詳細
2.1 .spec.completionsと.spec.parallelism
指定したらspec.parallelismパラメータは、このジョブが指定を同時に実行できることを示す.spec.parallelism数のPod.通常、メッセージキューからデータを読み出すためのworkerプログラムが指定する.spec.parallelism後、メッセージキューから複数のworkerが同時にデータを読み出す.
具体例は以下を参照してください.https://kubernetes.io/docs/tasks/job/fine-parallel-processing-work-queue/
指定したらspec.completionsパラメータは、このJobが成功する必要があることを意味する.spec.completions個のPodが終わる.このため、ジョブコントローラは順次作成する.spec.completions数のPodは、これらのPodが正常に動作するまで実行されます.
以下に具体的な例を示します.上のpi Jobは設定.spec.parallelismと.spec.completionsでは、 pi Job pi Job
もし.spec.parallelismの値はより大きい.spec.completionsは、同時に作成されません.spec.parallelism個のPodではなく、作成する.spec.completions個Pod.
2.2 .spec.template.spec.restartPolicy
Pod Controllerの
したがって、
2.3 .spec.backoffLimit
2.4 .spec.activeDeadlineSeconds
まとめは、実行中のPodを記述ファイルによって直接定義したBare Podで自己治癒性がなく、ダウンタイムまたは再起動した場合、その上で実行中のPodは再起動されません.したがって、Podを単独で実行する場合は、Bare PodではなくJobを使用して実行することをお勧めします. Jobの高可用性はReplication Controlと少し似ています.しかし、Replication Controllerは、通常、常に実行中のPod(ウェブサーバなど)を管理するために使用されます.ジョブは、必ず実行が終了するPodを管理するために使用されます.
参考記事 https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/
Jobの本質は、1つまたは複数のPodが動作が完了するまで健全に動作することを確保することである.
1.ジョブオブジェクトを作成する
次に、πを小数点以下2000ビットまで計算するためのPodを開始するJobオブジェクトを作成する例を示します.
apiVersion: batch/v1
kind: Job
metadata:
name: pi
spec:
template:
spec:
containers:
- name: pi
image: perl
command: ["perl", "-Mbignum=bpi", "-wle", "print bpi(2000)"]
restartPolicy: Never
backoffLimit: 4
$ kubectl create -f ./job.yaml
job "pi" created
Describeコマンドを実行し、このジョブの詳細を表示します.
[node1 ~]$ kubectl describe jobs/pi
Name: pi
Namespace: default
Selector: controller-uid=b207edb4-5a54-11e8-8da4-0242788d5821
Labels: controller-uid=b207edb4-5a54-11e8-8da4-0242788d5821
job-name=pi
Annotations: kubectl.kubernetes.io/last-applied-configuration={"apiVersion":"batch/v1","kind":"Job","metadata":{"annotations":{},"name":"pi","namespace":"default"},"spec":{"backoffLimit":4,"template":{"spec":{"con...
Parallelism: 1
Completions: 1
Start Time: Fri, 18 May 2018 04:34:04 +0000
Pods Statuses: 0 Running / 1 Succeeded / 0 Failed
Pod Template:
Labels: controller-uid=b207edb4-5a54-11e8-8da4-0242788d5821
job-name=pi
Containers:
pi:
Image: perl
Port:
Command:
perl
-Mbignum=bpi
-wle
print bpi(2)
Environment:
Mounts:
Volumes:
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal SuccessfulCreate 6s job-controller Created pod: pi-57qpr
現在実行中のPodを表示するには、次の手順に従います.
[node1 ~]$ kubectl get pods
NAME READY STATUS RESTARTS AGE
pi-sgklk 1/1 Running 0 6s
No resources foundを返すと、このπを計算するPodが実行済みであることを示し、
get pods
コマンドは現在実行中のPodのみを返すことができ、-a
パラメータを加えると、すべてのPodと対応するstatusを返すことができる.2.Jobオブジェクトパラメータの詳細
2.1 .spec.completionsと.spec.parallelism
指定したらspec.parallelismパラメータは、このジョブが指定を同時に実行できることを示す.spec.parallelism数のPod.通常、メッセージキューからデータを読み出すためのworkerプログラムが指定する.spec.parallelism後、メッセージキューから複数のworkerが同時にデータを読み出す.
具体例は以下を参照してください.https://kubernetes.io/docs/tasks/job/fine-parallel-processing-work-queue/
指定したらspec.completionsパラメータは、このJobが成功する必要があることを意味する.spec.completions個のPodが終わる.このため、ジョブコントローラは順次作成する.spec.completions数のPodは、これらのPodが正常に動作するまで実行されます.
以下に具体的な例を示します.
describe
コマンドでparallelism=1、completions=1のデフォルト値が見つかりました..spec.completions = 3
のみが設定場合、このとき.spec.parallelismパラメータはデフォルト値1を採用しているため、Job Controllerはまず最初のPodを作成し、実行に成功した後、2番目のPodを作成し、2番目のPodが成功した後、3番目のPodを作成します..spec.parallelism = 3
のみが設定されている場合、このJobは3つのPodを同時に実行できることを意味する.したがって、ジョブコントローラは同時に3つのPodを作成し、3つのPodの実行が終了すると、ジョブも終了状態に設定されます..spec.parallelism=3
.spec.completions = 9
が同時に設定されている場合、Job Controllerは3つのPodを作成し、ループ3の後、9つの正常に実行されたPodが存在すると、Jobは正常に実行されて終了する.もし.spec.parallelismの値はより大きい.spec.completionsは、同時に作成されません.spec.parallelism個のPodではなく、作成する.spec.completions個Pod.
2.2 .spec.template.spec.restartPolicy
.spec.template.spec.restartPolicy
プロパティには、OnFailure、Never、Alwaysの3つの候補値があります.既定値はAlwaysです.主にPodコンテンツの再起動ポリシーを記述するために使用されます.Jobでは、この属性をOnFailureまたはNeverに設定するしかありません..spec.template.spec.restartPolicy = OnFailure
の場合、Pod内のコンテナのexit codeが0でない場合、Podはその内部でこのコンテナを再起動します..spec.template.spec.restartPolicy = Never
の場合、Pod内のあるコンテナexit codeが0でない場合、コンテナの再起動はトリガーされません.Pod Controllerの
.spec.template.spec.restartPolicy
(この属性はPodの属性に属し、本質的にはJob Controllerとは無関係)に加えて、Job ControllerはPodが.spec.completions
回正常に動作することを保証します.Podの実行に失敗した場合(Podが存在し、そのダウンタイム、Pod内のコンテナの実行に失敗した場合、Podの実行が終了した状態も失敗します)、ジョブコントローラは、実行に成功したPodの数が.spec.completions
になるまで、新しいPodを作成して実行します.したがって、
.spec.template.spec.restartPolicy
をNeverに設定し、コンテナexit codeが0でない場合、ReplicaSetのようにPodの高可用性を提供する新しいPodを作成します.2.3 .spec.backoffLimit
.spec.backoffLimit
は、Jobのフォールトトレランス数を設定するために使用され、デフォルト値は6です.ジョブ実行のPod失敗回数が.spec.backoffLimit
回に達すると、ジョブコントローラは新しいPodを作成せず、このジョブの実行を直接停止し、その実行結果をFailureとマークします.また、Podの実行に失敗した後に再度実行する時間間隔は、例えば10 s,20 s,40 sのようにインクリメントされる.2.4 .spec.activeDeadlineSeconds
.spec.activeDeadlineSeconds
属性は、ジョブ実行のタイムアウト時間を設定するために使用される.ジョブの実行時間が設定された秒数を超えた場合、ジョブはすべてのPodの実行を自動的に停止し、ジョブの終了状態をreason: DeadlineExceeded
とマークする.まとめ
参考記事