ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Kubernetes(K8S): Job & CronJob
    공부합시다!/Kubernetes 2023. 1. 3. 00:12
    728x90

    Linux를 운영할 때 단순 1회성 작업은 at, 주기적인 작업은 cron으로 처리를 했습니다.

    2023.01.03 - [공부합시다!/LInux] - CentOS7: at & cron

    K8S에서 역시 동일한 기능을 제공합니다.

    단순 1회성 작업은 Job, 주기적인 작업은 CronJob으로 처리를 합니다.

    아래 hello world를 10번 출력하는 code를 이용해 보도록 하겠습니다.

    # vi for.sh
    
    #! /bin/bash
    for a in {1..10}
    do
            echo hello world: $a
    done
    # sh for.sh 
    hello world: 1
    hello world: 2
    hello world: 3
    hello world: 4
    hello world: 5
    hello world: 6
    hello world: 7
    hello world: 8
    hello world: 9
    hello world: 10

     

    단순히 hello world를 10번 출력해주는 code 입니다.

     

    1. Job

     1.1. 예약된 작업이 실행된 후 종료가 필요한 경우 사용하는 Resource

     1.2. 하나 이상의 Pod를 생성하고 지정된 수의 파드가 성공적으로 종료될 때까지 계속해서 Pod의 실행을 재시도

     1.3. Pod가 성공적으로 완료되면, 성공적으로 완료된 Job을 추적

     1.4. 지정된 수의 성공 완료에 도달하면 작업이 완료된다. 주의: 작업이 완료되어도 Pod는 삭제되지 않는다.

     1.5. 작업(Job)을 삭제하면 Pod도 제거됨.

     1.6. 작업을 일시 중지하면 작업이 재개될 때까지 활성 파드가 삭제된다.

     1.7. config file

      1.7.1. # vi cron.yml

     

    apiVersion: batch/v1
    kind: Job
    metadata:
      name: cron
    spec:
      template:
        spec:
          containers:
          - name: hell
            image: centos
            command: ["/bin/sh"]
            args: ["-c", "for a in {1..10}; do echo hello world: $a; done"]
          restartPolicy: Never
      backoffLimit: 4

     

      1.7.2. 실행 및 pod, job 확인

    # kubectl apply -f cron.yml
    # kubectl get pods
    # kubectl get jobs

     

      1.7.3. 상세정보확인

       1.7.3.1. Controller: Job/cron

       1.7.3.2. 현재 컨테이너 상태는 Terminated

       1.7.3.3.  작업이 완료됐음을 의미하는 Completed

     

      1.7.4. Job 삭제 및 Pod 상태 확인

       1.7.4.1. Job을 삭제하면 Pod 역시 삭제됨.

    # kubectl get jobs
    # kubectl delete jobs cron
    # kubectl get pod

     

      1.7.5. Job 재생성 후 Pod 삭제 후 Job 상태 확인

       1.7.5.1. Pod를 삭제해도 Job은 남아있음.

     

     1.8. 작업 종료 후 자동 삭제되는 Job 만들기

      1.8.1. configfile

      1.8.2. vi crondel.yml

    apiVersion: batch/v1
    kind: Job
    metadata:
      name: crondel
    spec:
      ttlSecondsAfterFinished: 30   # 30초후 작업 삭제
      template:
        spec:
          containers:
          - name: hello
            image: centos
            command: ["/bin/sh"]
            args: ["-c", "for a in {1..10}; do echo hello world: $a; done"]
          restartPolicy: Never

     

      1.8.3. config file 적용 및 pod, job 상태 확인

       1.8.3.1. 30초 후 생성한 job 및 pod 삭제 확인

     

     

     

    2. CronJob

     2.1. 스케줄에 따른 단일 or 여러 작업의 병렬 수행에 사용하는 Resource

     2.2. 스케줄링 문법은 완전히 Linux와 동일함.

    스케줄링 문법: https://kubernetes.io/ko/docs/concepts/workloads/controllers/cron-jobs/

     2.3. config file 작성, 적용, 확인

      2.3.1. # vi cronjob.yml

    apiVersion: batch/v1
    kind: CronJob
    metadata:
      name: cronjob
    spec:
      schedule: "* * * * *"
      jobTemplate:
        spec:
          template:
            spec:
              containers:
              - name: hello
                image: centos
                imagePullPolicy: IfNotPresent
                command: ["/bin/sh"]
                args: ["-c", "for a in {1..10}; do echo hello world: $a; done"]
              restartPolicy: OnFailure

     

      2.3.2. 적용 및 확인, 삭제

    # kubectl apply -f cronjob.yml
    # kubectl get pod		# 1분 뒤에 확인할 것. cron설정에 1분마다 실행으로 설정
    # kubectl get jobs
    job 넘버와 동일한 pod가 생성됨
    # kubectl delete -f cronjob.yml 
    cronjob 삭제

     

    자! 오늘은 예약작업과 주기적인 예약 작업을 담당하는 Job과 CronJob에 대해서 살펴보았습니다.

    이제는 K8S echo system으로 넘어가야 하나요?

    728x90
Designed by Tistory.