DaemonSet이란
Deployment와 유사하게 Pod를 생성하고 관리하는 컨트롤러
Deployment는 배포 작업을 좀 더 세분화하여 조작하는 반면, DaemonSet은 특정 노드 또는 모든 노드에 항상 실행되어야 할 특정 Pod를 관리
Node의 자원상태와 상관없이 모든 Node 또는 특정 Node에 Pod를 생성
DaemonSet의 구성
Template를 이용해 동일한 Pod를 생성
HostPort를 이용하여 Service의 NodePort와 비슷하게 외부에서의 접근가능
* Nodeport와 다르게 Node의 IP로 접근
DaemonSet yaml 작성 예시
Job이란
하나 이상의 Pod를 지정하고 지정한 수의 Pod를 성공적으로 실행하도록 하는 컨트롤러
백업이나 특정 배치 파일들처럼 한번 실행하고 종료되는 성격의 작업에 사용
프로세스를 사용하지 않으면 Pod를 중료(삭제X, 자원을 사용하지 않는 상태)
Job의 구성
Selector를 작성하지 않아도 Job에서 알아서 구성
Completions : 파드가 지정한 개수 이상 정상 종료될 경우 성공처리
Parallelism : 한번에 지정한 개수의 Pod를 실행
ActiveDeadkineSeconds : 지정된 시간이 되면 Job이 종료되고 실행중이던 모든 포드를 종료
Job yaml 작성예시
CronJob이란
Job들을 주기적인 시간에 따라 생성하는 컨트롤러
Job하나 단위로 사용하는 경우는 드뭄, CronJob을 이용하여 특정 시간에 Job을 생성하는 식으로 사용
CronJob 구성
schedule로 주기를 구성 할 수 있음
또한, concurrencyPolicy 필드를 이용하여 CronJob에 의해 생긴 Job의 동시 실행처리를 정의 가능
Allow(기본값) | CronJob은 동시에 실행되는 Job을 허용 |
Forbid | 동시 실행을 허용하지 않음 기존 작업이 진행중이라면 새로운 Job을 건너뜀 |
Replace | 기존의 작업을 새로운 작업으로 교체 |
CronJob yaml 작성예시
실습
1. DaemonSet 실습
DaemonSet 생성
hostPort를 설정
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: daemonset-1
spec:
selector:
matchLabels:
type: app
template:
metadata:
labels:
type: app
spec:
containers:
- name: container
image: kubetm/app
ports:
- containerPort: 8080
hostPort: 18080
생성된 DaemonSet과 Pod
존재하고 있는 총 2개의 Node에 Pod가 생성된
Node 1,2에 접근하여 hostname을 출력하도록 명령
1-1. DaemonSet의 NodeSelector기능 확인
특정 Node에만 DaemonSet에 의한 Pod가 생성되도록
Node 1, 2에 명령어를 통해 label 삽입
kubectl label nodes k8s-node1 os=centos
kubectl label nodes k8s-node2 os=ubuntu
생성된 label 확인
DaemonSet 생성
NodeSelect를 이용하여 os=centos인 Node에 생성
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: daemonset-2
spec:
selector:
matchLabels:
type: app
template:
metadata:
labels:
type: app
spec:
nodeSelector:
os: centos
containers:
- name: container
image: kubetm/app
ports:
- containerPort: 8080
생성된 DaemonSet과 Pod 확인
os=centos label을 삽입한 node1에만 Pod가 생성됨
Node 2에 os label을 삭제하고, os = centos label을 삽입
kubectl label nodes k8s-node2 os-
kubectl label nodes k8s-node2 os=centos
DaemonSet은 label을 감지하고 os=centos를 가진 node2에도 Pod를 생성함
* DaemonSet을 삭제하면 DaemonSet으로 부터 만들어진 Pod도 같이 삭제됨
2. Job 실습
Job 생성
Job start라는 메시지를 찍고 20초뒤에 job end라는 메시지를 찍고 종료하게끔 함
apiVersion: batch/v1
kind: Job
metadata:
name: job-1
spec:
template:
spec:
restartPolicy: Never
containers:
- name: container
image: kubetm/init
command: ["sh", "-c", "echo 'job start';sleep 20; echo 'job end'"]
terminationGracePeriodSeconds: 0
생성된 Job, Pod 확인
Pod의 Log내역확인
Job이 성공적으로 완료되면 Pod는 Completed 상태로 남게됨 (아무런 자원도 사용하지 않는 상태)
* Job을 삭제하면 Pod도 같이 삭제
2-1. Job의 옵션을 이용한 생성
Job 생성
생성 갯수 6, 동시 생성 갯수 2, 데드라인 30초로 Job 생성
apiVersion: batch/v1
kind: Job
metadata:
name: job-2
spec:
completions: 6
parallelism: 2
activeDeadlineSeconds: 30
template:
spec:
restartPolicy: Never
containers:
- name: container
image: kubetm/init
command: ["sh", "-c", "echo 'job start';sleep 20; echo 'job end'"]
terminationGracePeriodSeconds: 0
생성된 Job과 Pod 확인
Job 생성과 동시에 2개의 Pod가 생성
단, Job의 작업시간이 20초 정도이고 Deadline이 30초이므로 나머지 4개의 Pod는 생성되지 못하거나 작업중에 fail로 종료된다.
3. CronJob 실습
CronJob 생성
schedule을 이용해 1분에 하나씩 생성
apiVersion: batch/v1
kind: CronJob
metadata:
name: cron-job
spec:
schedule: "*/1 * * * *"
jobTemplate:
spec:
template:
spec:
restartPolicy: Never
containers:
- name: container
image: kubetm/init
command: ["sh", "-c", "echo 'job start';sleep 20; echo 'job end'"]
terminationGracePeriodSeconds: 0
생성된 CronJob 확인
CronJob의 Schedule에 따라 1분에 하나씩 Job이 생성됨
명령 실행으로도 CronJob 하위의 Job을 메뉴얼로 실시간 생성도 가능
kubectl create job --from=cronjob/cron-job cron-job-manual-001
CronJob의 suspend를 true로 업데이트하거나 명령 실행으로 일시중지 가능
또는
kubectl patch cronjobs cron-job -p '{"spec" : {"suspend" : "true/false" }}'
중지된 CronJob 확인
* CronJob을 삭제하면 내부 Job은 삭제되지만 트리거로 만든 Job은 삭제되지 않음
'CICD' 카테고리의 다른 글
[Kubernetes] ReadinessProbe, LivenessProbe(Pod) (0) | 2022.01.16 |
---|---|
[Kubernetes] Lifecycle(Pod) (0) | 2022.01.16 |
[Kubernetes] Deployment(Controller) (0) | 2022.01.08 |
[Kubernetes] Replication Controller, ReplicaSet(Controller) (0) | 2022.01.07 |
[Kubernetes] Namespace, ResourceQuota, LimitRange(기본 오브젝트) (0) | 2022.01.05 |
댓글