레플리카셋 – 쿠버네티스 디플로이먼트

레플리카셋 사용법에 대해 알아봅니다.

디플로이먼트

  • 디플로이먼트의 역할
    • 파드를 직접 배포하지 않음.
    • 애플리케이션으로 오는 요청량과 처리 부하에 따라 파드수를 자동으로 늘리고 줄임.
    • 파드의 비정상 종료 후 별도 파드를 생성해 유효한 파드 수를 유지
    • 파드 버전(컨테이너 이미지 태그)을 변경하도록 지시하면 자동으로 새로운 버전의 컨테이너 이미지를 확인하고 동작 중인 파드를 다음 버전으로 변경

디플로이먼트 정의

// API 애플리케이션 배포 실행
ECR_HOST=<AWS_ACCOUNT_ID>.dkr.ecr.ap-northeast-2.amazonaws.com \\
> envsubst < 22_deplyment_backend-app_k8s.yaml.template | \\
pipe> kubectl apply -f -
# 설정값 설명 yaml
replicas : 2    # 클러스터 전체 안에 생성될 파드 수
env  # 이 파드에서 사용할 환경 변수를 시크릿이라는 오브젝트로 설정하기 위한 부분
readinessProbe, livenessProbe # 컨테이너 정상 동작 확인하는 정의 구조(3.5절 참고)
resource  # 파드가 사용할 메모리나 CPU 등의 리소스양에 대한 정의(3.7절 참고)

디플로이먼트 목록 표시

kubectl get all
kubectl get deployment

디플로이먼트 하위에서 생성되는 레플리카셋

  • 직접 POD를 배포하지 않고 ReplicaSet 라는 오브젝트를 생성해 배포함.
  • 디플로이먼트 역할로 파드 수 증감과 파드에 장애가 발생했을 때 자동 재시작하는 것인데 실질적으로 레플리카셋이 이것을 담당함.
kubectl get deployment
# backend-app

kubectl get replicaset
# backend-app-75f87c96fb

kubectl get pod

# backend-app-75f87c96fb-rtzfw
  • 디플로이먼트 → 레플리카셋 → 파드 순으로 생성

ReplicaSet 으로 생성된 파드

kubectl get pod

kubectl describe 명령으로 상세 정보 수집

kubectl describe pod backend-app-75f87c96fb-rvx6h
  • 파드 상세 정보 내용

크론잡으로 스케줄 동작 CronJob

  • 리눅스의 cron 과 동일

크론잡의 정의

// 크론잡을 생성
ECR_HOST=<AWS_ACCOUNT_ID>.dkr.ecr.ap-northeast-2.amazonaws.com \\
> envsubst < 22_deplyment_backend-app_k8s.yaml.template | \\
pipe> kubectl apply -f -

잡리소스

  • 일정한 처리를 수행하고 완료하는 태스크를 실행하기 위한 것
  • 지속적인 실행 시 : 디플로이먼트 → 레플리카셋 → 파드
  • 주기적인 실행 시, 일정한 처리가 끝나면 프로그램을 종료하고 태스크로도 ‘완료’상태가 되기를 원하는 경우 : 잡 → 파드→ 완료

잡 리소스의 동작

잡 실행 수

  • .spec.completions : 그 잡이 완료될 때까지 실행 종료해야 하는 파드 수
  • .spec.parallelism : 그 잡을 실행할 때 병렬로 실행되는 파드 수

잡 실행 패턴

  • 단일 파드를 실행하는 실행 패턴
    • .spec.completions = 1
    • .spec.parallelism = 1
  • 완료해야 할 파드 수를 설정하는 실행 패턴
    • .spec.completions 를 설정하면 설정한 수의 파드가 정상 종료되면 그 잡은 완료됨.
    • .spec.parallelism 은 필수가 아니지만 설정한 수만큼 파드가 병렬로 실행됨.(미설정 시 동시에 파드 여러 개가 실행되지 않고 하나씩 실행됨)
  • 작업 큐형 실행 패턴
    • 동시에 파드 여러 개를 실행하고 작업 큐를 순차적으로 처리하는 패턴
    • .spec.completions는 설정하지 않고 .spec.parallelism을 설정하여 실행.

잡 재시도 횟수

  • .spec.backoffLimit : 잡에서 생성된 파드가 비정상 종료한 경우 몇 번을 재실행할지 설정하는 것. 기본값 6
  • 지수 백오프 지연 exponential back-off : 횟수가 증가함에 따라 재실행을 다시 할 때까지의 대기 시간을 지수 함수적으로 증가시키는 것, 상한 6분. 최대 6분 간격으로 재실행.

크론잡 고유의 설정과 유의점

스케줄 정의

  • .spec.schedule

동시 실행 제어

  • .spec.concurrencyPolicy : 이전에 스케줄링된 잡 실행이 미완료인 상태에서 다음 스케줄 시각에 도달했을 때 어떻게 동작할지를 설정, Allow, Forbid, Replace
  • 크론잡으로 동작시키는 컨테이너를 개발할 때의 주의점
    • 멱등성
Back to top