k8s/APP配布

Job、CronJob

YOOANT 2026. 5. 9. 17:18

1.Job

1-1.成功jobおよび動作確認

1-1-1.事前準備としてnginxおよびserviceを作成

# Job確認の事前準備としてnginxとsvcを生成
apiVersion: v1
kind: Pod
metadata:
  labels:
    run: nginx
  name: nginx
spec:
  containers:
  - image: nginx
    name: nginx
---
apiVersion: v1
kind: Service
metadata:
  name: nginx 
spec:
  selector:
    run: nginx  
  ports:
    - name: http
      port: 80
      targetPort: 80
  type: ClusterIP

1-1-2.作成確認

1-1-3.Job作成

apiVersion: batch/v1
kind: Job
metadata:
  name: job-curl-succ
spec:
  template:
    spec:
      containers:
      - name: net-tools
        image: sysnet4admin/net-tools
        command: ["curlchk",  "nginx"]
      restartPolicy: Never

1-1-4.動作確認

1-1-2에서 확인했듯이 nginx와 서비스가 동작중이고 정상적으로 상태확인이 성공했다.


1-2.失敗jobおよび動作確認

1-2-1.Job作成

apiVersion: batch/v1
kind: Job
metadata:
  name: job-curl-fail
spec:
  template:
    spec:
      containers:
      - name: net-tools
        image: sysnet4admin/net-tools
        command: ["curlchk",  "hwan"]  // nginxではなく、hwanを入力
      restartPolicy: Never

1-2-2.動作確認

hwan은 동작중이지 않다는 에러메세지가 출력됐다.


1-3.job作成失敗および動作確認

1-3-1.Job作成

apiVersion: batch/v1
kind: Job
metadata:
  name: job-make-fail
spec:
  template:
    spec:
      containers:
      - name: net-tools
        image: sysnet4admin/net-tools
        command: ["curlchk",  "nginx"]
                                         // restartPolicyを削除

1-3-2.動作確認

※JobにおいてrestartPolicyをOnFailureまたはNeverに設定しなければならないという、k8sの強制的なルールがある。

Jobは「一度タスクを完了すれば終了(Exit)する」ことが目的であり、Alwaysを使用するとタスクが終わっても再実行を繰り返す無限ループに陥るためである。

したがって、Jobの本質(バッチ作業の完了可否)を明確に管理するために、podを新しく立ち上げるか(Never)、内部で再起動するか(OnFailure)を選択させる仕組みになっている。


1-4 .job並列実行および動作確認

1-4-1.Job作成

completions: 実行量

※completionsが3の場合、Jobが成功したとみなされるためには、計3つのPodが順次実行され、正常に終了する必要がある。

apiVersion: batch/v1
kind: Job
metadata:
  name: job-completions 
spec:
  completions: 3 // 3つのPodが順次実行される。
  template:
    spec:
      containers:
      - name: net-tools
        image: sysnet4admin/net-tools
        command: ["curlchk",  "nginx"]
      restartPolicy: Never

1-4-2.動作確認

podのAGEを見ると順次実行されたことが分かる。

1-4-3.Job作成

parallelism:並列性/並行性

kind: Job
metadata:
  name: job-parallelism
spec:
  parallelism: 3 // 同時に3つのPodを起動して、ジョブを実行する。
  template:
    spec:
      containers:
      - name: net-tools
        image: sysnet4admin/net-tools
        command: ["curlchk",  "nginx"]
      restartPolicy: Never

1-4-4.動作確認

podのAGEを見ると同時実行されたことが分かる。


1-5.job自動終了および動作確認

1-5-1.Job作成

activeDeadlineSeconds:Jobによって生成されたPodが「アクティブ(Active)」であった合計時間を基準に、Podを終了させる。

※再試行回数の設定に関わらず終了させる。

※Podが起動中の状態でも終了させるが、terminationGracePeriodSecondsが未設定の場合、デフォルト値の30秒によって30秒間の猶予時間が与えられる。30秒を超過すると強制終了(kill)される。

※処理後、Jobは削除されない。

apiVersion: batch/v1
kind: Job
metadata:
  name: job-activedeadlineseconds
spec:
  backoffLimit: 3
  activeDeadlineSeconds: 30 //Pod作成を基準に、30秒後に終了するよう設定。
  template:
    spec:
      containers:
      - name: net-tools
        image: sysnet4admin/net-tools
        command: ["/bin/sh", "-c"]
        args:
        - sleep 80;
          curlchk nginx;  
      restartPolicy: Never

1-5-2.動作確認

①JobによるPod作成開始の30秒後にTerminating

②terminationGracePeriodSecondsのデフォルト値による30秒の猶予

③Podの強制終了(kill)

④Jobは削除されない

1-5-3.Job作成

ttlSecondsAfterFinished:Jobによって生成されたPodの終了後、リソースをクリーンアップ。

※Jobも削除される

apiVersion: batch/v1
kind: Job
metadata:
  name: job-ttlsecondsafterfinished
spec:
  backoffLimit: 3
  ttlSecondsAfterFinished: 30 //Jobによって起動されたPodの終了後、30秒後にリソースをクリーンアップ。
  template:
    spec:
      containers:
      - name: net-tools
        image: sysnet4admin/net-tools
        command: 
        - "/bin/sh"
        - "-c"
        - |
          echo "start"
          sleep 10
      restartPolicy: Never

1-5-4.動作確認

①Podの終了後、30秒後にリソースをクリーンアップ

②Jobも削除された


2.CronJob

2-1.CronJob作成および動作確認

2-1-1.Cronルール

2-1-2.CronJob作成

successfulJobsHistoryLimit:성공한 Job 오브젝트의 이력을 보관한다. 디폴트(3)

apiVersion: batch/v1
kind: CronJob
metadata:
  name: cj-1m-hist3-curl 
spec:
  schedule: "*/1 * * * *"  //マスターノードのシステム時間を基準に起動する。
  jobTemplate:             # Template for job 
    spec:                  # same as before 
      template:
        spec:
          containers:
          - name: net-tools
            image: sysnet4admin/net-tools
            command: ["curlchk",  "nginx"]
          restartPolicy: Never

 

2-1-3.動作確認

①1分ごとにCronJob起動

②successfulJobsHistoryLimitによって、cj-1m-hist3-curl-29638867-8mk6w、fqt55削除

 

'k8s > APP配布' 카테고리의 다른 글

DaemonSet、StatefulSet  (0) 2026.05.09
command/args  (0) 2026.05.09
Deployment、ReplicaSet  (0) 2026.05.08

日本語