Kubernetes(EKS)のCronJobで実行するノードを指定する
2024/12/29
AWS の Elastic Kubernetes Service(EKS) で稼働しているクラスターで CronJob を設定していたのですが、バッチはバッチ用のノードで実行させることになったので、ノードを指定する方法をご紹介します!
事前準備:ノードグループに Kubernetes ラベルをつける
CronJob のマニフェストファイルでノードを指定できるようにノードグループに Kubernetes ラベル をつけます。
今回は tier
というキーで batch
という値のラベルを追加したときの設定で進めたいと思います。
Kubernetes ラベルはマネージメントコンソールのノードグループの画面で編集ボタンから追加をできます。
CronJob のマニフェストファイルに nodeSelector を追加
実際にマニフェストで指定するときは、 nodeSelector
の値として Kubernetes ラベルのキーと値を記述します。
記述位置は template.spec
内の containers
と同列で記述すれば大丈夫です。
apiVersion: batch/v1
kind: CronJob
metadata:
name: email-send-batch
spec:
schedule: "10 10 * * *"
jobTemplate:
spec:
template:
spec:
# nodeSelector で Kubernetes ラベルの値を設定
nodeSelector:
tier: batch
containers:
- name: email-send-batch-container
restartPolicy: OnFailure
※上記サンプルは必要な要素を少し削っています
この内容で kubectl apply
コマンドで反映させればスケジュールに合わせて、指定の Kubernetes ラベルがついているノードグループにあるノードで実行されるようになります。
CronJob が設定されているか確認
kubectl describe cronjob
コマンドを実行して、 nodeSelector
の設定が反映されているか確認します。
$ kubectl describe cronjob email-send-batch
Name: email-send-batch
Namespace: default
Labels: <none>
Annotations: <none>
Schedule: 10 10 * * *
Concurrency Policy: Allow
Suspend: False
Successful Job History Limit: 3
Failed Job History Limit: 1
Starting Deadline Seconds: <unset>
Selector: <unset>
Parallelism: <unset>
Completions: <unset>
Pod Template:
Labels: <none>
Containers:
email-send-batch:
Image:
Port: <none>
Host Port: <none>
Command:
/bin/sh
-c
Args:
bundle
Mounts: <none>
Volumes: <none>
Node-Selectors: tier=batch
Tolerations: <none>
Last Schedule Time: <unset>
Active Jobs: <none>
Events: <none>
Node-Selectors
の行に設定した tier=batch
が入っているのでこれで設定が反映されていることがわかります。
あとは念の為、実行時間に起動したポッドのノードが指定しているノードになっているかを確認できれば完了です!