본문으로 바로가기

컨트롤러 (Daemonset, Statefulset, Job, CronJob)

category MLOps/K8S 2022. 3. 28. 22:21

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시 정각에 실행

'MLOps > K8S' 카테고리의 다른 글

서비스  (0) 2022.03.28
컨트롤러 (ReplicaSet, Deployment)  (0) 2022.03.26
파드 관리  (0) 2022.03.26
아키텍쳐 및 명령어 기본  (0) 2022.03.26