728x90
컨트롤러
DaemonSet
데몬셋이란
- 노드 레이블과 매칭이되는 모든 노드 또는 노드 레이블이 없다면 모든 노드에 파드를 하나씩 배치하는 컨트롤러
- 노드 수와 관계 있음
- 연결되어 있는 노드에 파드를 하나씩 생성
- 레플리카셋과 비슷한 기능이지만, 복제본을 저장하지 않는다는 점에서 차이가 있음
- 컨트롤러는 노드가 추가되면 자동으로 하나의 파드를 배치하고, 노드가 삭제되어도 다른 노드에 파드를 생성하지 않음
데몬셋 생성: testapp-ds
- 파일 생성
- testapp-ds 라는 데몬셋 생성
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: testapp-ds
spec:
selector:
matchLabels:
app: testapp-ds
template:
metadata:
labels:
app: testapp-ds
spec:
containers:
- name: testapp
image: ghcr.io/c1t1d0s7/go-myweb
ports:
- containerPort: 8080
imagePullPolicy: Never
- 버추얼박스에서 node-3 종료 후 데몬셋 생성
vagrant@kube-master1:~/test$ kubectl create -f testapp-ds.yml
daemonset.apps/testapp-ds created
- 실행 결과 모니터링
- node-1, node-2에 파드 생성
watch -n1 kubectl get pods -o wide --show-labels
- node-3을 재시작하면 파드가 자동으로 새로 생성됨
데몬셋 생성: testapp-ds-node
- 노드 셀렉터를 정의한 파일 생성
- nodeSelector: node=dev 노드 레이블을 선택하도록 정의
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: testapp-ds-node
spec:
selector:
matchLabels:
app: testapp-ds-node
template:
metadata:
labels:
app: testapp-ds-node
spec:
nodeSelector:
node: dev
containers:
- name: testapp
image: ghcr.io/c1t1d0s7/go-myweb
ports:
- containerPort: 8080
imagePullPolicy: Never
- 데몬셋 생성
vagrant@kube-master1:~/test$ kubectl create -f testapp-ds-node.yml
daemonset.apps/testapp-ds-node created
- 실행 결과
- 생성된 데몬셋과 노드 레이블 확인
vagrant@kube-master1:~/test$ kubectl get daemonsets.apps
NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE
testapp-ds-node 0 0 0 0 0 node=dev 52s
- node=dev 노드 레이블과 매칭되는 레이블이 없기 때문에 파드가 생성되지 않음
vagrant@kube-master1:~/test$ kubectl get pods
No resources found in default namespace.
- kube-node1 노드에 node=dev 레이블 생성
vagrant@kube-master1:~/test$ kubectl label nodes kube-node1 node=dev
node/kube-node1 labeled
- 레이블을 생성하자 kube-node1 노드에 파드가 생성됨
- kube-node1 노드의 LABELS 필드에 추가된 node=dev 레이블 확인
vagrant@kube-master1:~/test$ kubectl get nodes --show-labels
NAME STATUS ROLES AGE VERSION LABELS
kube-master1 Ready master 3d1h v1.18.10 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=kube-master1,kubernetes.io/os=linux,node-role.kubernetes.io/master=
kube-node1 Ready <none> 3d1h v1.18.10 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=kube-node1,kubernetes.io/os=linux,node=dev
kube-node2 Ready <none> 3d1h v1.18.10 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=kube-node2,kubernetes.io/os=linux
kube-node3 Ready <none> 3d1h v1.18.10 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=kube-node3,kubernetes.io/os=linux
- 노드 레이블 키를 제거하자 삭제되는 파드 확인
vagrant@kube-master1:~/test$ kubectl label nodes kube-node1 node-
node/kube-node1 labeled
- node=dev 가 제거된 것을 확인할 수 있음
- 데몬셋 삭제
vagrant@kube-master1:~/test$ kubectl delete -f testapp-ds-node.yml
daemonset.apps "testapp-ds-node" deleted
vagrant@kube-master1:~/test$ kubectl get daemonsets.apps
No resources found in default namespace.
728x90
'쿠버네티스 교육 > 강의 내용 정리' 카테고리의 다른 글
220624_1_k8s_클러스터 내부 서비스-Cluster IP (0) | 2022.06.24 |
---|---|
220623_2_k8s_컨트롤러-Job Controller (0) | 2022.06.23 |
220622_3_k8s_컨트롤러-ReplicaSet Controller (0) | 2022.06.22 |
220622_2_k8s_파드의 생명 주기와 프로브-livenessProbe, startupProbe (0) | 2022.06.22 |
220622_1_k8s_deployment, replicaset, pod (0) | 2022.06.22 |