Job 및 CronJob 으로 Pod 실행

KubernetesBeginner
지금 연습하기

소개

Kubernetes 에서 Job 과 CronJob 은 장기간 실행되는 애플리케이션이나 서비스의 일부가 아닌 작업을 실행하는 데 사용됩니다. Job 은 일회성 작업에 사용되는 반면, CronJob 은 정기적으로 실행해야 하는 작업에 사용됩니다.

이 Lab 에서는 Kubernetes 에서 Job 과 CronJob 을 사용하여 Pod 를 실행하는 방법을 배웁니다. 간단한 예시부터 시작하여 점차적으로 더 복잡한 예시로 확장해 나갈 것입니다.

Minikube 클러스터 시작

리소스를 생성하기 전에 실행 중인 Kubernetes 클러스터가 필요합니다. Minikube 는 로컬 머신에서 실행되는 가벼운 Kubernetes 환경입니다.

  1. 작업 디렉토리로 이동:

    터미널을 열고 기본 프로젝트 폴더로 이동합니다.

    cd /home/labex/project
    
  2. Minikube 시작:

    Kubernetes 클러스터를 초기화하기 위해 Minikube 를 시작합니다.

    minikube start
    
    • 이 명령어는 로컬 머신에 단일 노드 Kubernetes 클러스터를 설정합니다.
    • Minikube 는 시스템 성능에 따라 시작하는 데 몇 분 정도 걸릴 수 있습니다.
  3. Minikube 가 실행 중인지 확인:

    Minikube 클러스터의 상태를 확인합니다.

    minikube status
    
    • kubeletapiserver와 같은 구성 요소가 Running으로 나열되어 있는지 확인합니다.
    • 클러스터가 실행 중이지 않으면 minikube start를 다시 실행합니다.

Minikube 를 시작하는 데 문제가 발생하면 필요에 따라 minikube delete를 사용하여 환경을 재설정하십시오.

Job 으로 Pod 실행

첫 번째 단계는 Job 을 실행하는 Pod 를 생성하는 것입니다. 이 예제에서는 "Hello, World!"를 콘솔에 출력하는 명령을 실행하는 Pod 를 생성합니다.

/home/labex/project/job.yaml이라는 파일을 생성하고 다음 내용을 입력합니다.

apiVersion: batch/v1
kind: Job
metadata:
  name: hello-job
spec:
  template:
    spec:
      containers:
        - name: hello
          image: busybox
          command: ["sh", "-c", 'echo "Hello, World!"']
      restartPolicy: Never
  backoffLimit: 4

이 파일에서 hello-job이라는 Job 을 정의하며, hello라는 단일 컨테이너를 실행합니다. 컨테이너는 busybox 이미지를 실행하고 "Hello, World!"를 콘솔에 출력하는 명령을 실행합니다.

Job 을 생성하려면 다음 명령을 실행합니다.

kubectl apply -f job.yaml

다음 명령을 실행하여 Job 의 상태를 확인할 수 있습니다.

kubectl get jobs

Job 이 완료되면 다음 명령을 실행하여 Pod 의 로그를 볼 수 있습니다.

kubectl logs <POD_NAME>

<POD_NAME>을 Job 을 실행한 Pod 의 이름으로 바꾸십시오. POD_NAMEkubectl get pods |grep hello-job 명령으로 얻을 수 있습니다.

축하합니다. Kubernetes 에서 Job 을 사용하여 Pod 를 성공적으로 실행했습니다!

여러 Pod 를 사용하는 Job 실행

경우에 따라 더 나은 성능을 위해 여러 Pod 로 Job 을 실행해야 할 수 있습니다. 이 예제에서는 여러 Pod 를 실행하여 원격 서버에서 파일을 다운로드하는 Job 을 생성합니다.

/home/labex/project/multi-pod-job.yaml이라는 파일을 생성하고 다음 내용을 입력합니다.

apiVersion: batch/v1
kind: Job
metadata:
  name: download-job
spec:
  completions: 3
  parallelism: 2
  template:
    spec:
      containers:
        - name: downloader
          image: curlimages/curl
          command: ["curl", "-o", "/data/file", "http://example.com/file"]
          volumeMounts:
            - name: data-volume
              mountPath: /data
      restartPolicy: Never
      volumes:
        - name: data-volume
          emptyDir: {}
  backoffLimit: 4

이 파일에서 curlimages/curl 이미지를 사용하여 여러 Pod 를 실행하는 download-job이라는 Job 을 정의합니다. 각 Pod 는 http://example.com/file에서 파일을 다운로드하여 data-volume이라는 공유 볼륨에 저장합니다.

Job 을 생성하려면 다음 명령을 실행합니다.

kubectl apply -f multi-pod-job.yaml

다음 명령을 실행하여 Job 의 상태를 확인할 수 있습니다.

kubectl get jobs

Job 이 완료되면 다음 명령을 실행하여 Pod 의 로그를 볼 수 있습니다.

kubectl logs <POD_NAME>

<POD_NAME>을 Job 을 실행한 Pod 의 이름으로 바꾸십시오. 파일의 다운로드 로그를 볼 수 있으며, POD_NAMEkubectl get pod |grep download-job 명령으로 얻을 수 있습니다.

축하합니다. Kubernetes 에서 여러 Pod 를 사용하여 Job 을 성공적으로 실행했습니다!

Cronjob 실행

일회성 Job 외에도 Kubernetes 는 정기적으로 작업을 실행하기 위한 Cronjob 도 지원합니다. 이 예제에서는 매 분마다 명령을 실행하는 Cronjob 을 생성합니다.

/home/labex/project/cronjob.yaml이라는 파일을 생성하고 다음 내용을 입력합니다.

apiVersion: batch/v1
kind: CronJob
metadata:
  name: hello-cronjob
spec:
  schedule: "*/1 * * * *"
  jobTemplate:
    spec:
      template:
        spec:
          containers:
            - name: hello
              image: busybox
              command: ["sh", "-c", 'echo "Hello, World!"']
          restartPolicy: Never
  successfulJobsHistoryLimit: 3
  failedJobsHistoryLimit: 3

이 파일에서 매 분마다 명령을 실행하는 hello-cronjob이라는 Cronjob 을 정의합니다. 이 명령은 첫 번째 예제에서 "Hello, World!"를 콘솔에 출력하는 데 사용했던 것과 동일합니다.

Cronjob 을 생성하려면 다음 명령을 실행합니다.

kubectl apply -f cronjob.yaml

다음 명령을 실행하여 Cronjob 의 상태를 확인할 수 있습니다.

kubectl get cronjobs

Cronjob 이 실행되면 다음 명령을 실행하여 Pod 의 로그를 볼 수 있습니다.

kubectl logs -f <POD_NAME>

<POD_NAME>을 Cronjob 에 의해 생성된 Pod 의 이름으로 바꾸십시오. POD_NAMEkubectl get pod |grep hello-cronjob 명령으로 얻을 수 있습니다.

축하합니다. Kubernetes 에서 Cronjob 을 성공적으로 실행했습니다!

요약

이 Lab 에서는 Kubernetes 에서 Job 과 Cronjob 을 사용하여 Pod 를 실행하는 방법을 배웠습니다. Job 을 실행하는 Pod 의 간단한 예제로 시작하여, 여러 Pod 를 사용하는 Job 과 정기적으로 실행되는 Cronjob 의 더 복잡한 예제로 점차 발전했습니다. 이 지식을 통해 Kubernetes 에서 장기간 실행되는 애플리케이션이나 서비스의 일부가 아닌 다양한 작업을 실행할 수 있습니다.