컨트롤러 (Daemonset, Statefulset, Job, CronJob)
Daemonset
- 클러스터 전체 노드에 특정 파드 실행할 때 사용하는 컨트롤러
-> 모니터링용 데몬 등 클러스터 전체에 항상 실행시켜두어야 하는 파드에 사용
- 업데이트 정책 변경 가능
RollingUpdate : 수정 시 바로 반영 (파드를 자동으로 재생성)
OnDelete : 수정 시 반영X (파드를 수동으로 삭제하면 재생성 시 반영)
- 노드 추가/제거 시 파드도 자동으로 생성 및 삭제
- 노드셀렉터라는 값을 설정하면 노드를 지정할 수 있음 (모든 리소스 해당)
Statefulset
- 기본적으로 파드는 상태를 저장하지 않는다.
- 파드의 상태를 유지 ( 파드이름, 네트워크, 스토리지 )
- 파드 배포 및 복제본 개수 유지 (스케일링)
-> 파드의 순서 / 고유속성을 유지
- 각각의 파드마다 고유한 볼륨을 연결
- 기본적으로 스테이트풀셋은 파드를 순서대로 하나씩 생성 및 삭제 (배포/스케일링)
- 병렬설정 시 배포 및 스케일링 작업 시 한 번에 실행 (.spec.podManagementPolicy: Parallel)
-> 업데이트 정책은 별개 (기본값: rollingUpdate)
- 롤링업데이트 시 기존 파드를 하나씩 삭제 후 생성
- 업데이트 정책은 rollingUpdate와 on-delete 방식 선택 (데몬셋과 동일)
실습
- 파트 제거 및 확인
$ kubectl edit stateful web
$ .spec.replicas: 2로 변경
- Parallel로 변경하면 파드들이 순서 없이 병렬로 실행되거나 종료되게 할 수 있음
Job
- 파드(어플리케이션)의 상태가 완료/종료 (일회성)
- 실행 후 완료 시 파드를 종료
-> 완료로 카운트되기 전에 파드를 제거하거나 문제가 생기면 새로운 파드 생성
하지만, 완료 카운트 후에는 제거해도 다시 만들지 않음
- 완료 횟수를 지정 가능
- 레이블/셀렉터가 사용 가능하긴 하지만 권장하지 않음
-> 컨트롤러에 부여된 고유값(UUID)
- restartPolicy 속성이 기본값은 Always
-> 정상종료/비정상종료 관계없이 종료하면 재시작
=> Onfailure 속성으로 설정하는 것을 권장
- parallerism 항목으로 동시 생성 파드의 개수 지정
- 작업 실패 처리
activeDeadlineSeconds 항목으로 실패/성공 여부 결정을 할 판단 시간
backofflimit 항목으로 실패 시 재시도 횟수
실습
CronJob
- 잡을 주기적으로 반복 실행하는 방식
- 리눅스의 크론탭처럼 반복 주기를 설정
- 작업 완료 시간과 반복 주기에 대한 고려가 필요
-> startingDeadlineSeconds : 예약된 시각에 실행을 못할 경우 기다릴 시간 (중복허용X)
=> 기다려도 실행할 수 없을 경우에는 해당 시각의 작업은 포기
-> concurrencyPolicy : 동시 실행 여부
- 작업이 완료해도 파드를 바로 제거하지 않음
- 시간 설정(schedule)
분 시 일 월 요일
* * * * * => 1분 단위로 실행
*/1 * * * * => 1분 단위로 실행
*/2 * * * * => 2분 단위로 실행
* */2 * * * => 2시간 단위로 실행
0 1 1 1 * => 매년 1월 1일 1시 정각
0 1 -3 1 1 * => 매년 1월 1일 1시 정각. 2시, 3시 정각에 실행