쿠버네티스 교육/강의 내용 정리

220623_1_k8s_컨트롤러-DaemonSet

kimhope 2022. 6. 23. 17:32
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