웹사이트 검색

Kubernetes의 작업


이 페이지에서

  1. 전제 조건
  2. 무엇을 할까요?\n
  3. 작업 만들기
    1. 간단한 작업\n
    2. 시간 제한 적용 작업\n
    3. 크론잡

    작업은 특정 작업을 수행하기 위해 하나 이상의 포드를 만들고 포드가 성공적으로 종료되도록 합니다. 지정된 수의 포드가 성공적으로 완료되면 작업이 완료된 것입니다. 작업이 삭제되면 작업이 생성한 포드도 삭제됩니다. 작업을 사용하여 여러 포드를 병렬로 실행할 수도 있습니다.

    Kubernetes 작업에 대해 자세히 알아보려면 여기를 클릭하세요.

    이 기사에서는 간단한 작업, 시간 제한이 있는 작업 및 cronjob의 구현을 볼 것입니다.

    전제 조건

    1. 워커 노드가 1개 이상 있는 Kubernetes 클러스터.
      Kubernetes 클러스터를 만드는 방법을 알아보려면 여기를 클릭하세요. 이 안내서는 AWS Ubuntu 18.04 EC2 인스턴스에서 1개의 마스터와 2개의 노드가 있는 Kubernetes 클러스터를 생성하는 데 도움이 됩니다.\n

    우리는 무엇을 할 것인가?

    1. 작업 만들기

    작업 만들기

    간단한 작업

    다음 내용을 사용하여 다중 컨테이너 포트 정의 파일을 생성합니다.

    vim simple-job-1.yml
    apiVersion: batch/v1
    kind: Job
    metadata:
      name: simple-job-1
    spec:
      template:
        spec:
          containers:
            - name: job-1
              image: busybox
              args:
                - /bin/sh
                - -c
                - date; echo sleeping....; sleep 30s; echo exiting!; date
          restartPolicy: Never

    Kubernetes 클러스터에서 기존 포드 및 작업 목록을 가져오고 다음 명령어를 사용하여 작업을 만듭니다.

    kubectl get pods
    kubectl get jobs
    kubectl create -f simple-job-1.yml

    위의 스크린샷에서 기존 클러스터에 포드 및 작업이 없고 새 작업이 생성되었음을 확인할 수 있습니다.

    작업을 만들면 작업 이름이 있는 포드가 작업과 함께 생성됩니다.

    다음 명령어를 사용하여 pod와 작업을 가져올 수 있습니다.

    kubectl get pods
    kubectl get jobs

    위의 스크린샷에서 작업이 실행된 후 완료되는 것을 볼 수 있습니다.

    작업이 더 이상 필요하지 않으면 다음 명령을 사용하여 삭제할 수 있습니다.

    kubectl delete -f simple-job-1.yml
    kubectl get pods
    kubectl get jobs

    Enforce Time Limit이 있는 작업

    작업이 지정된 시간 제한 내에 실행을 완료하도록 하는 시간 제한을 작업에 적용할 수 있습니다.

    다음 콘텐츠로 작업 정의 파일을 만듭니다.

    vim enforce-time-limit-job-2.yml
    apiVersion: batch/v1
    kind: Job
    metadata:
      name: enforce-time-limit-job-2
    spec:
      activeDeadlineSeconds: 20
      template:
        spec:
          containers:
            - name: job-2
              image: busybox
              args:
                - /bin/sh
                - -c
                - date; echo some task which should complete in 30 secs....but due to activeDeadlineSeconds=5 will get terminated within 5 secs before its completetion; sleep 30s; echo exiting!; date 
    restartPolicy: Never

    다시 Kubernetes 클러스터에서 Pod 및 작업 목록을 가져오고 위의 파일을 사용하여 작업을 만듭니다.

    kubectl get jobs
    kubectl get pods
    kubectl create -f enforce-time-limit-job-2.yml

    작업을 생성한 후 세부 정보를 확인하면 작업 생성 후 생성된 포드가 완료되기 전에 종료되는 것을 확인할 수 있습니다. 즉, 30초 동안 실행되지 않고 종료됩니다.

    다음 명령을 사용하여 종료 이유를 확인하십시오.

    kubectl get pods
    kubectl  get jobs enforce-time-limit-job-2 -o yaml

    위 스크린샷의 첫 번째 줄에서 activeDeadlineSeconds=20을 지정했음을 알 수 있습니다. 그리고 우리는 sleep=30초로 지정했습니다. 이는 포드가 30초 동안 활성 상태여야 했지만 20초 이내에 종료되었음을 의미합니다.

    이제 작업을 삭제하려면 다음 명령을 사용할 수 있습니다.

    kubectl delete -f enforce-time-limit-job-2.yml
    kubectl get jobs

    크론잡

    Kubernetes에서 cronjob 작업을 객체로 만들려면 다음 콘텐츠로 파일을 만드세요. Kubernetes의 이 cronjob은 Linux의 Cronjob과 동일합니다.

    vim cronjob-3.yml
    apiVersion: batch/v1beta1
    kind: CronJob
    metadata:
      name: cronjob-3
    spec:
      schedule: "*/1 * * * *"
      jobTemplate:
        spec:
          template:
            spec:
              containers:
                - name: cronjob-container
                  image: busybox
                  args:
                    - /bin/sh
                    - -c
                    - date; echo sleeping for 5 secs....; sleep 5s; echo exiting...;
              restartPolicy: Never

    위의 정의에 따르면 작업은 1분마다 생성되고 5초 동안 지속됩니다.

    다음 명령어를 사용하여 기존 작업 및 pod 목록을 가져오고 cronjob을 만듭니다.

    kubectl get jobs
    kubectl get pods
    kubectl create -f cronjob-3.yml

    정의된 작업을 완료하기 위해 1분마다 새 작업이 생성되는지 확인하려면 다음 명령어를 사용하세요.

    kubectl  get jobs -w

    이제 작업이 1분마다 시작된다는 것을 관찰할 수 있는 로그를 확인할 수 있습니다.

    kubectl get pods
    kubectl logs cronjob-3-1594359720-jfkcl

    위의 스크린샷에서 1분마다 작업의 일부로 생성된 다양한 포드의 로그를 볼 수 있습니다.

    이는 작업이 1분마다 트리거되었음을 의미합니다.

    작업이 더 이상 필요하지 않으면 다음 명령을 사용하여 삭제할 수 있습니다.

    kubectl delete -f cronjob-3.yml
    kubectl get pods
    kubectl get jobs

    결론

    이 도움말에서는 Kubernetes에서 간단한 작업을 만드는 방법을 배웠습니다. 작업이 너무 오래 실행되지 않도록 작업에 시간 제한을 적용하는 방법을 살펴보았습니다. 마지막으로 지정된 시간에 작업을 수행하기 위해 자체적으로 생성되는 cronjob을 만드는 단계를 보았습니다. Kubernetes의 이 Cronjob 객체는 Linux의 Cronjob 작업과 유사합니다.