3. K8s 실전 활용을 위한 10단계

김하영·2021년 10월 13일
0

'15단계로 배우는 도커와 쿠버네티스' 기반으로 내용 정리하였습니다.

  • 잡과 크론잡
    실패 시 재실행하는 잡과 지정 시간에 기동하는 크론잡

잡 컨트롤러는 파드에 있는 모든 컨테이너가 정상적으로 종료할 때까지 재실행한다.
그리고 크론잡은 UNIX의 크론과 같은 포맷으로 실행 스케줄을 지정할 수 있는 컨트롤러다.
( 로그 백업을 위해 도는 cron!! )

(1) 잡 컨트롤러의 동작과 사용 시 주의점

  1. 진정한 실행 횟수와 병행 개수에 따라 한 개 이상의 파드를 실행한다.
  2. 잡은 파드 내에 있는 모든 컨테이너가 정상 종료한 경우에 파드를 정상 종료한 것으로 취급한다.
    여러 개의 컨테이너 중 하나라도 비정상으로 종료하면, 전부 비정상 종료로 취급한다.
  3. 잡에 기술한 파드의 실행 횟수를 전부 정상 종료하면, 잡은 종료한다.
    그리고 파드의 비정상 종료에 따른 재실행 횟수의 상한에 도달해도 잡은 중단한다.
  4. 노드 장애 등에 의해 잡의 파드가 제거된 경우, 다른 노드에서 파드를 재 실행한다.
  5. 잡에 의해 실행된 파드는 잡이 삭제될 때까지 유지된다. 그리고 잡을 삭제하면 모든 파드가 삭제된다.

잡 컨트롤러를 사용할 때 주의할 점!

  1. 여러 프로그램의 실행 순서나 비정상 종료 시의 분기등은 컨테이너 내 셀에서 제어해야 한다.
  2. 파드 내에 여러 개의 컨테이너가 존재할 때 잡 컨트롤러는 파드 내의 모든 컨테이너가 정상 종료할 때까지 재실행을 반복한다.
  3. kubectl get pod 로 체크했을 때 status가 completed 이어도 파드는 비정상 종료일 수 있다.
    (...음? 이거는 버그인가? 이럼 안되는 거 아닌가?)

(2) 스케줄에 따라 파드를 제어하는 크론잡

크론잡은 지정한 시각에 잡을 만든다.
그렇게 생성된 파드의 개수가 정해진 수를 넘어서면 가비지 수집 컨트롤러가 종료된 파드를 삭제한다.

잡 활용 예

(1) 동시 실행과 순차 실행

복수의 노드 위에서 여러 개의 파드를 동시에 실행하여 배치 처리를 빠르게 동시 실행할 수 있다.
예 ) 대량 메일 발송, 대량 데이터를 포함하는 KVS형 데이터 베이스 검색 등

한편, 파드의 동시 실행 수를 늘려도 리소스에 대한 경쟁이 심화되어 오히려 처리가 느려지는 경우도 있으니
주의해야 한다.

(2) 파드를 실행할 노드 선택

매니페스트에 CPU 아키텍처, 코어 수, 메모리 요구량, 노드 실렉터 라벨 등이 기재된다. (Job)
마스터 노드의 스케줄러는 기재된 조건을 만족하는 적절한 노드를 선택해서 파드를 배치한다.

(3) 온라인 배치 처리 요청

메시지 브로커와 잡을 활용하여 웹을 통해 배치 처리를 요청할 수 있다.

(4) 정기 실행 배치 처리

잡의 실행 수와 동시 실행 수

잡 컨트롤러의 기본 설정인 실행수(Completions)와 동시 실행수(Parallelism)에 대해 알아보자.

apiVersion: batch/v1
kind: Job
metadata:
  name: pi
spec:
  template:
    spec:
      containers:
      - name: pi
        image: perl
        command: ["perl",  "-Mbignum=bpi", "-wle", "print bpi(2000)"]
      restartPolicy: Never
  backoffLimit: 4

[ 배치 잡 API ]

  • apiVersion : batch/v1 설정
  • kind : job 설정
  • metadata : name은 필수 항목으로 네임스페이스 내에서 중복없이 설정
  • spec

[ 잡 컨트롤러의 사양 ]

  • template : 구동하는 파드에 대해 기술하는 파드 템플릿
  • completion : 총 실행 횟수
  • parallelism : 동시 실행을 하는 파드의 개수
  • activeDeadlineSeconds : 잡의 최장 실행 시간을 초단위로 지정. 지정 시간이 지나면 강제 종료
  • backoffLimit : 실패에 대한 최대 시행 횟수. (backoff 지연이 적용됨)

크론잡

apiVersion: batch/v1
kind: CronJob
metadata:
  name: hello
spec:
  schedule: "*/1 * * * *"
  jobTemplate:
    spec:
      template:
        spec:
          containers:
          - name: hello
            image: busybox
            imagePullPolicy: IfNotPresent
            command:
            - /bin/sh
            - -c
            - date; echo Hello from the Kubernetes cluster
          restartPolicy: OnFailure

[ 크론잡 API ]

  • apiVersion : batch/v1 설정
  • kind : CronJob 설정
  • metadata : name은 필수 항목으로 네임스페이스 내에서 중복없이 설정
  • spec

[ 크론잡 사양 ]

  • schedule : cron 형식으로 스케줄을 기술. 시간은 UTC 기준을 따름
  • jobTemplate : 잡의 템플릿. 주 내용은 파드 템플릿
  • startingDeadlineSeconds : 잡이 시작되고 대기할 시간을 초단위로 지정.
    지정한 시간 내에 시작을 못하면 취소됨
  • concurrencyPolicy : 다음 정책 중 하나를 선택
  1. Allow : 동시 실행 허가 (디폴트)
  2. Forvid : 이전 잡이 미완료인 경우에는 스킵
  3. Replace : 이전 미완료 잡을 중단하고 새로 실행
  • suspend : 디폴트는 false / true 인 경우 다음 스케줄이 정지
  • successfuljobHistoryLimit : 성공한 잡 보관 개수 / 기본 3
  • failedJobsHistoryLimit : 실패한 잡 보관 개수 / 기본 1
profile
Back-end Developer

0개의 댓글