본문 바로가기

클라우드/Kubernetes(쿠버네티스)

[쿠버네티스] 컨트롤러(데몬세트, 스테이트풀세트, 잡, 크론잡)

데몬세트

  • 클러스터 전체 노드에 특정 파드를 실행할 때 사용하는 컨트롤러
  • 클러스터 안에서 새롭게 노드가 추가되었을 때 데몬세트가 자동으로 해당 노드에 파드를 실행시킨다.
  • 노드가 클러스터에서 빠졌을 때는 해당 노드에 있던 파드는 그대로 사라질 뿐 다른 곳으로 옮겨가서 실행되거나 하지 않는다.
  • 그러므로 보통 로그 수집기를 실행하거나 노드를 모니터링하는 모니터링용 데몬 등 클러스터 전체에 항상 실행시켜두어야 하는 파드에 사용한다.

스테이트풀세트

  • 상태가 있는 파드들을 관리하는 컨트롤러
  • 볼륨을 사용해서 특정 데이터를 저장한 후 파드를 재시작했을 때 해당 데이터를 유지한다.
  • 여러 개의 파드 사이에 순서를 지정해서 실행되도록 할 수 있다. 이렇게 어떠한 상태가 있어야 할 때 사용한다.
  • 그레이스풀이란 실행 중인 프로세스를 종료할 때 바로 종료하는 것이 아니라 하던 작업을 마무리하고 정상적으로 종료하는 것을 뜻한다.
  • 스테이트풀세트의 기본 동작은 순서대로 파드를 관리하는 것이지만, spec.podManagementPolicy필드를 이용해 순서를 없앨 수도 있다.
    • 기본 필드 값을 OrderReady이고 파드를 순서대로 관리한다.
    • 이를 Parallel로 변경하면 파드들이 순서 없이 병렬로 실행되거나 종료되도록 할 수 있다.

  • 실행된 후 종료해야 하는 성격의 작업을 실행시킬 때 사용하는 컨트롤러
  • 특정 개수만큼의 파드를 정상적으로 실행 종료함을 보장
  • 예 ) 잡이 파드 하나를 실행하고 파드가 정상적으로 종료됐는지 확인하는 것
  • 파드 실행 실패, 하드웨어 장애 발생, 노드 재시작 등 문제가 발생하면 다시 파드를 실행한다.
  • 잡 하나가 파드 여러 개 실행할 수도 있다.
  • spec.template.spec.restartPolicy
    • Never : 파드가 항상 성공으로 끝나게한다.
    • OnFailure : 파드 안 컨테이너가 비정상 종료했거나 다양한 이유로 실행이 정상 종료되지 않았을 때 컨테이너를 다시 시작하도록 한다.
  • spec.backoffLimit : 잡 실행이 실패했을 때 자동으로 최대 몇 번까지 재시작할 것인지 설정
    • 파드 비정상 실행 종료의 백오프정책이라고도 한다.
  • 잡 하나가 몇개의 파드를 동시에 실행할지를 ‘잡 병렬성’이라고 한다.
  • 잡이 정상적으로 실행 종료되면 파드가 새로 생성되지도 삭제되지도 않는다. 또한 잡도 남아있다.
  • 파드나 잡이 삭제되지 않고 남아 있으면 로그에서 에러나 경고를 확인할 수 있고, 잡의 상태도 계속해서 확인할 수 있다.
  • 특정 시간을 지정해 잡 실행을 종료하려면 spec.activeDeadlineSeconds필드에 시간을 설정한다. 지정된 시간에 해당 잡 실행을 강제로 끝내면서 모든 파드 실행도 종료한다.
    • 시간을 지정해 잡 실행을 끝냈다면 잡의 상태를 확인했을 때 종료 이유가 reason : DeadlineExceeded로 표시된다.
  • 잡 삭제는 사용자가 직접 명령어로 해야한다. 
  • 잡 삭제시 관련된 파드들도 같이 삭제된다.
  • 작업마다 잡을 하나씩 생성해 사용하는 것보다는 모든 작업을 관리하는 잡 하나를 사용하는 것이 좋다. 잡을 생성하는 오버헤드가 크기 때문에 잡업이 많아질수록 잡 하나가 여러 개 작업을 처리하는 것이 좋다.

크론잡

  • 잡을 시간 기준으로 관리하도록 생성한다.
  • 지정한 시간에 한번만 잡을 실행하거나 지정한 시간동안 주기적으로 잡을 반복 실행할 수 있다.
  • 시간을 지정할 때는 리눅스나 유닉스의 cron 명령어에서 사용하는 옵션 형식을 그대로 사용한다.
  • 크론잡의 핵심인 스케줄 지정은 spec.schedule 필드에 설정한다.