-
インフラ屋じゃないが、業務で必要になったため最低限調べてまとめた。
-
個人的なメモです。ミスがあったら教えてください。
-
21/07/24 kubernetesをガチ目に学んだので、追加でメモる。
Cronjobとは
- Cronjobが定期的にJobを作成し、Jobがコンテナを作ってその中で処理を指定された実行する
- Jobは、指定時間になったらpodをその中のコンテナで指定された処理を行う。
多分コンテナは毎回指定時間になるたびに作り直すけど、podは作り直すわけではないんだと思う- たまに超複する2つのJobが作られたり、Jobが作られなかったりすることもある → Jobはidempotentであるべき。
Jobの詳細
- 先述した処理の「実行時間」「処理内容」「並列数や完了数」、、、などを保持しており、それに応じた処理を行う
- Jobのためにpodが作成される。そのJobが完了してもpodは消されない(terminated)になる。そのJobをdeleteしたらpodも消される。
non-parallel job と parallel jobがある
- non-parallel jobは、completionの回数だけ逐次的にjobが繰り返し実行される
- parallel jobは、
- without worker は、completionとparallelismを指定する。
- 今存在するpodが全て成功したらcompletionに達するなら、もうpodは作られなくなる。
- 
- with worker queue は、completionを指定しない。(1とみなされる)
- 
CronJobを使ってJobを作る方法
(1) yamlファイルを書く。
application/job/cronjob.yaml
apiVersion: batch/v1beta1
kind: CronJob
metadata:
name: hello
spec:
schedule: "*/1 * * * *"
jobTemplate:
spec:
template:
spec:
containers:
- name: hello
image: busybox
args:
- /bin/sh
- -c
- date; echo Hello from the Kubernetes cluster
restartPolicy: OnFailure
(2) このファイルを指定して$kubectl create -f <ファイル名>
コマンドでCronJobリソースを作成する
(そもそも$kubectrl create
コマンドとは、Create a resource from a file or from stdinするためのもの。このファイルのkind次第で、cronjobに限らず、podなりjobなりconfigmapなりを作成することもできる)
その他メモ
-
kubectl get cronjob
でjobの一覧取得 -
kubectl get cronjobs/<cronjob名>
でcronjobの一覧のうち、cronjob名と一致するcronjobのみ表示 -
kubectl delete cronjob <cronjob名>
cronjobの削除 -
kubectl get job
でjobの一覧取得- (By default Kubernetes sets the Job history limits so that only the last three successful and last failed job are retained.)
-
kubectl get jobs/<job名>
でjobの一覧のうち、job名と一致するjobのみ表示 -
kubectl describe jobs <job名>
で指定されたjobの実行履歴を表示