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 が入っているのでこれで設定が反映されていることがわかります。

あとは念の為、実行時間に起動したポッドのノードが指定しているノードになっているかを確認できれば完了です!