DaemonSet, Job, CronJob
1. DaemonSet
- 노드들이 있고 자원들이 다 다를 때, ReplicaSet은 스캐줄러에 의존하여 파드를 노드에 배치
- 자원이 많으면 노드에 파드를 많이 배치하고, 자원이 없으면 적게 배치
- DaemonSet은 노드의 자원과 상관없이 각 노드마다 같은 파드를 배치시킴
자원과 관계없이 파드를 동일하게 배치해야하는 서비스
- Prometheus: 노드의 성능수집용
- fluentd: 노드의 로그수집용
- GlusterFS: 노드의 자원을 갖고 네트워크 파일 시스템 구축용
특징
- 셀렉터와 템플릿이 있어서 모든 노드에 템플릿으로 파드를 만들고 셀렉터로 파드를 데몬셋과 연결시킴
- 만약 노드들의 OS 종류가 달라 노드의 라벨이 붙어있고, os:ubuntu에 파드를 설치하고 싶지 않은 상황을 가정
- 그러면, 파드에 nodeSelector os:centos를 지정하여 os:ubuntu 라벨이 있는 노드에 설치되지 않도록 함
- 데몬셋은 한 노드에 하나를 초과해서 파드를 만들지 않지만, 노드에 파드를 안 만들 수 있음
- 특정 노드의 포트에 접근했을 때, 노드에 들어있는 파드에 접근이 되도록 사용
마치 노드포트처럼 - 데몬셋의 템플릿에 hostPort를 설정하면 노드의 포트로 접근하면 파드로 연결시킴
Sample YAML
- selector, template이 있음
- template의 spec에서 nodeSelector를 통해 원하는 라벨이 달린 노드에만 파드생성, 지정하지 않으면 모든 노드에 파드 생성
- containers에 ports가 있고, hostPort로 들어온 트래픽은 해당 파드의 containerPort로 연결됨
- 18080 포트로 들어온 외부트래픽은 해당 파드의 8080 포트로 연결됨
2. Job
직접, ReplicaSet을 통해, Job을 통해 파드를 만드는 방식에 따른 차이점
- 파드들이 Node1에서 돌아가다가 Node1이 다운되는 상황에서 다른 특징을 보임
- 직접 만든 파드는 바로 Service Down
- ReplicaSet, Job을 통해 만들어진 파드들은 다른 노드에 재생성됨
ReplicaSet, Job에서 파드 운영 시 나타나는 차이점
- ReplicaSet에서 만든 파드는 일을 하지 않으면 파드를 Restart하여, 파드가 계속 수행 되도록 함
- Recreate: 파드의 이름, 아이피 변경하여 다시 시작
- Restart: 파드는 그대로 있고, 파드안의 컨테이너만 재기동
- Job으로 만들어진 파드는 프로세스가 일을 하지 않으면 파드가 종료됨
- 종료는 파드가 삭제되는게 아니라 자원을 사용하지 않고 멈춘 상태임
- 종료된 파드에 들어가서 로그 확인 가능, 이후 필요 없으면 삭제해도 됨
특징
- 템플릿에는 특정 작업만 하고 종료하는 파드들을 담음
- 셀렉터는 직접 만들지 않아도 Job이 만들어줌
- 템플릿으로 하나의 파드를 생성하고, 파드가 일을 다하면 보통 Job이 종료됨
- completions: 6을 주면, 6개의 파드를 하나씩 순차적으로 실행시켜 모두 종료되면 종료
- parallelism: 2을 주면, 2개씩 파드가 생성됨
- activeDeadlineSeconds: 30을 주면, Job은 30초 후에 기능이 정지, 실행되고 있는 모든 파드들은 삭제, 실행되지 않은 파드들도 앞으로 실행이 안 됨
- 일정 시간이 지나도록 완료가 되지 않은 파드들을 삭제하고 싶을 때
Sample YAML
- completions, parallelism, actvieDeadlineSeconds를 동시에 설정 가능
- 템플릿의 restartPolicy: Never는 고정된 값
- Job은 Never, OnFailure만 사용 가능 --> 파드 라이프사이클에서 설명
3. CronJob
- Job을 주기적으로 생성하는 역할
UseCase
- Backup: 특히 DB 백업
- Checking: 업데이트 확인
- Messaging: 예약 메일 발송
특징
- jobTemplate을 통해 Job을 만듦
- schedule에 나온 주기로 Job을 만듦
*/1****
: 1분에 Job을 하나씩 만듦
- Job은 파드를 또 만듦
- Suspend로 실행 중인 Job을 일시정지
- Manual Trigger는 실습 때 함
Sample YAML
- schedule, concurrencyPolicy 설정 가능
- jobTemplate은 job을 만들 때의 내용이 다 들어감
concurrencyPolicy
- Allow, Forbid, Replace가 있음
- concurrencyPolicy를 설정하지 않으면 Allow가 default
- 1분 간격으로 스캐줄 한다고 설정했을 때 각각의 특징을 설명함
Allow
- 1분 때 Job 생성, 파드 생성
- 2분 때 1분 때 만든 Job과 파드의 상태와 상관 없이 Job 생성, 파드 생성
- 3분 때도 마찬가지
Forbid
- 1분 때, Job, 파드 생성
- 2분 때, 1분 때 만든 파드가 실행 중이면 skip
- 1분 때 만든 파드가 종료되면 바로 Job, 파드 생성
Replace
- 1분 때, Job, 파드 생성
- 2분 때, 기존 Job, 파드는 삭제되고 새로운 Job, 파드 생성
출처
인프런 - 대세는 쿠버네티스
'네트워크 > k8s' 카테고리의 다른 글
[k8s] 18. Pod - Lifecycle (0) | 2021.02.16 |
---|---|
[k8s] 17. DaemonSet, Job, CronJob - 실습 (0) | 2021.02.14 |
[k8s] 15. Deployment - 실습 (0) | 2021.02.14 |
[k8s] 14. Deployment - Recreate, RollingUpdate (0) | 2021.02.13 |
[k8s] 13. ReplicaSet, Selector - 실습 (0) | 2021.02.13 |