はじめに
これまでDeploymentの動作を確認してきましたが、これからはJobの動作を確認したいと思います。
JobとはReplicaSetと同様にPodを管理する上位リソースですが、ReplicaSetと違って何かしらのジョブを実行したら、そのPodは削除されます。
なので、定常的な業務を動かすのではなく、バッチ処理的な業務での活用が考えられます。代表的なところだと、バックアップ、データ連携などでしょうか。
Jobの作成
以下のマニフェスト(yamlファイル)を作成しました。
sampleJob.yaml
apiVersion: batch/v1
kind: Job
metadata:
name: sample-job1
spec:
template:
spec:
containers:
- name: sample-job1
image: centos:latest
command: ["echo"]
args: ["hoge"]
restartPolicy: Never
Cent OSのコンテナをデプロイして、そこでechoで"hoge"と表示させるだけのJobです。
applyします。
$ kubectl apply -f sampleJob.yaml
job.batch/sample-job1 created
確認
作成したJobを確認します。
$ kubectl get jobs -o wide
NAME COMPLETIONS DURATION AGE CONTAINERS IMAGES SELECTOR
sample-job1 0/1 21s 21s sample-job1 centos:latest controller-uid=7fc0d5b6-663e-4a7a-b78d-0290faa3729d
$ kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
sample-job1-m85pt 0/1 Completed 0 64s 192.168.79.78 k8s-worker01 <none> <none>
STATUSがReplicaSetとと違って、「Completed」となってますね。Jobがもう終わって、Podは削除されているようです。
Jobがちゃんと実行されたのか、logを確認してみます。
$ kubectl logs sample-job1-m85pt
hoge
ちゃんと実行されてますね。
まとめ
一つのJobの実行が終わったらすぐにその環境を削除するなんて、まさにマイクロサービスって感じがしますね。
Jobをうまく利用できるとHWリソースの節約にもなりますので、これからこのJobの動作を確認したいと思います。