k8s 시작하기 - Job 및 CronJob

Kubernetes 클러스터는 JobCronJob 두 가지 리소스 객체를 제공합니다.
  • Job은 배치 작업의 하나 이상의 Pod가 성공적으로 종료되도록 보장하는 작업을 한 번만 수행하는 임무를 담당합니다
  • .
  • CronJob은 바로 Job이 누구인지에 시간 스케줄을 더한 것이다.

  • 1. Job 프레젠테이션


    이 곳에서 job 자원 대상을 사용하여 카운트다운을 위한 작업을 만듭니다.
    [root@k8s-01 ~]# cat job.yaml 
    apiVersion: batch/v1
    kind: Job
    metadata:
      name: job-demo
    spec:
      template:
        metadata:
          name: job-demo
        spec:
          restartPolicy: Never
          containers:
          - name: counter
            image: busybox
            command:
            - "bin/sh"
            - "-c"
            - "for i in 9 8 7 6 5 4 3 2 1;do echo $i;done"
    

    job 만들기 및 검사
    [root@k8s-01 ~]# kubectl create -f job.yaml
    job.batch/job-demo created
    
    [root@k8s-01 ~]# kubectl get job
    NAME       COMPLETIONS   DURATION   AGE
    job-demo   1/1           14s        48s
    
    #COMPLETIONS  
    #DURATION  
    

    Pod 상태 확인
    [root@k8s-01 ~]# kubectl get pod
    NAME                        READY   STATUS      RESTARTS   AGE
    job-demo-h4vl4              0/1     Completed   0          73s
    
    #job Completed( ), pod running 
    
    describejob의 상세한 정보를 보기
    [root@k8s-01 ~]# kubectl describe job job-demo 
    Name:           job-demo
    Namespace:      default
    Selector:       controller-uid=19c3a4fe-ae3f-4a45-a665-1be61a3a484c
    Labels:         controller-uid=19c3a4fe-ae3f-4a45-a665-1be61a3a484c
                    job-name=job-demo
    Annotations:    <none>
    Parallelism:    1
    Completions:    1
    Start Time:     Wed, 13 May 2020 14:00:36 +0800
    Completed At:   Wed, 13 May 2020 14:00:50 +0800
    Duration:       14s
    Pods Statuses:  0 Running / 1 Succeeded / 0 Failed
    Pod Template:
      Labels:  controller-uid=19c3a4fe-ae3f-4a45-a665-1be61a3a484c
               job-name=job-demo
      Containers:
       counter:
        Image:      busybox
        Port:       <none>
        Host Port:  <none>
        Command:
          bin/sh
          -c
          for i in 9 8 7 6 5 4 3 2 1;do echo $i;done
        Environment:  <none>
        Mounts:       <none>
      Volumes:        <none>
    Events:
      Type    Reason            Age    From            Message
      ----    ------            ----   ----            -------
      Normal  SuccessfulCreate  3m31s  job-controller  Created pod: job-demo-h4vl4
    

    pod 로그를 통해pod 실행 상태를 확인할 수도 있습니다.
    [root@k8s-01 ~]# kubectl get pod
    NAME                        READY   STATUS      RESTARTS   AGE
    job-demo-h4vl4              0/1     Completed   0          4m41s
    
    [root@k8s-01 ~]# kubectl logs job-demo-h4vl4 
    9
    8
    7
    6
    5
    4
    3
    2
    1
    

    Job이 실행된 후에만 STATUS의 상태는 Complete이고 실행되지 않은 상태는 런닝입니다. :Job Pod RestartPolicy (pod ) Never OnFailure , Always,Job , , Always( , pod )

    2. CronJob 프레젠테이션


    Cronjob은 사실 Job의 기초 위에서 시간 스케줄링을 추가한 것이다. 우리는 지정된 시간에 비슷한 작업을 실행할 수도 있고 주기적으로 지정된 시간에 실행할 수도 있다.이것은 실제로 Linux의crontab과 매우 유사하다.하나의 CronJob 대상은 사실crontab에 대응하는 줄입니다. 시간 설정 형식 주기에 따라 하나의 Job을 실행합니다. 설정 형식은crontab과 같습니다.
    다음은 2분마다 숫자를 인쇄하는 시간제 작업을 만듭니다
    [root@k8s-01 ~]# cat cronjob.yaml 
    apiVersion: batch/v1beta1
    kind: CronJob
    metadata:
      name: cronjob-demo
    spec:
      schedule: "*/2 * * * *"     # , crontab , job , 
      jobTemplate:            #cronjob job , job 
        spec:
          template:
            metadata:
              name: cronjob-demo      #pod 
            spec:
              restartPolicy: Never
              containers:
              - name: counter
                image: busybox
                command:
                - "bin/sh"
                - "-c"
                - "for i in 9 8 7 6 5 4 3 2 1 ;do echo $i;done"
    

    창설
    [root@k8s-01 ~]# kubectl create -f cronjob.yaml 
    cronjob.batch/cronjob-demo created
    

    생성이 완료되면 아래에서 볼 수 있습니다
    [root@k8s-01 ~]# kubectl get cronjob
    NAME           SCHEDULE      SUSPEND   ACTIVE   LAST SCHEDULE   AGE
    cronjob-demo   */2 * * * *   False     1        19s             4m47s
    
    [root@k8s-01 ~]# kubectl get pod
    NAME                            READY   STATUS      RESTARTS   AGE
    cronjob-demo-1589350440-2s6v5   0/1     Completed   0          4m19s
    cronjob-demo-1589350560-5xfkg   0/1     Completed   0          2m18s
    cronjob-demo-1589350680-lsbcd   0/1     Completed   0          18s
    
    [root@k8s-01 ~]# kubectl get job
    NAME                      COMPLETIONS   DURATION   AGE
    cronjob-demo-1589350440   1/1           4s         4m26s
    cronjob-demo-1589350560   1/1           12s        2m25s
    cronjob-demo-1589350680   1/1           13s        25s
    

    2분마다 job를 실행하고 job를 실행한 후 상태가 유지되는 것을 볼 수 있습니다.get jobs와 get pod를 통해 볼 수 있습니다.
    cronjob에 역사 기록 제한을 설정해야 합니다. 그렇지 않으면,jobs가 계속 증가할 것입니다. (1.14버전은 기본적으로 3개만 보존합니다.)
     spec 2 , 
    successfulJobsHistoryLimit: 5   # 
    failedJobsHistoryLimit: 10      # 
    

    참고 자료:https://k.i4t.com/kubernetes_job.html

    좋은 웹페이지 즐겨찾기