brunch

You can make anything
by writing

C.S.Lewis

by Master Seo Jun 30. 2021

쿠버1탄-11. 쿠버네티스- 데몬셋 컨트롤러

다음은 쿠버네티스 스터디 자료를 참고해  정리한 내용입니다.


데몬셋 ?

모든 노드에 Pod를 1개씩 생성해주는 오브젝트

DNS 파드

인프라 모니터링 에이전트 설치할때 유용하다.

데몬세트와 node가 있다.

리플리카 세트는 필요 없다.



<1>  데몬셋 테스트 1

<2>  데몬셋 테스트 2

<3>  정리



<1>  데몬셋 테스트 1


 master node의 api 서버 접속

ssh -i ~/.ssh/id_rsa ubuntu@api.k8s.serverchk.com


1

디폴트로 존재하는 데몬셋 확인 ?

칼리코 노드와 kops 가 데몬셋으로  배포되어 있음.


kubectl get daemonsets.apps -n kube-system


NAME  DESIRED   CURRENT  READY   UP-TO-DATE   AVAILABLE NODE SELECTOR                         AGE

calico-node       3         3         3       3            3           kubernetes.io/os=linux                                3d22h

kops-controller   1         1         1       1            1       kops.k8s.io/kops-controller-pki=,node-


calico-node 와 kops-controller 가 모든 노드에 배포 된다.

데몬셋으로 배포 되어 있다.


2

상세 확인 ?

kubectl describe daemonsets.apps -n kube-system calico-node

kubectl describe daemonsets.apps -n kube-system kops-controller



3

cat << EOF > daemonset-1.yaml

apiVersion: apps/v1

kind: DaemonSet

metadata:

  name: daemonset-1

spec:

  selector:

    matchLabels:

      name: daemonset-cndk

  template:

    metadata:

      labels:

        name: daemonset-cndk

    spec:

      containers:

      - name: daemonset-pod

        image: nginx

EOF


4

다른 터미널에서 모니터링

watch -d kubectl get pods,ds -o wide


5

생성 ?

kubectl apply -f daemonset-1.yaml

daemonset.apps/daemonset-1 created


7

다른 터미널에서 상태 확인

NAME     READY   STATUS    RESTARTS   AGE   IP     NODE     NOMINATED NODE   READINESS GATES

pod/daemonset-1-whc8n   1/1     Running   0     86s   100.99.166.4     ip-172-20-38-114.ap-

pod/daemonset-1-xzxns   1/1     Running   0      86s   100.98.158.176   ip-172-20-38-144.ap-


node당 1개씩 pod가 생긴다.

pod를 삭제 하더라도 데몬셋에 의해 자동으로  pod가 재 생성 된다.

데몬셋은  리플리카 세트가 필요 없어 리플리카 세트는 사용하지 않는다.

기본 work node에만 생성 된다. 마스터 노드는 생성되지 않는다.생성하려면 따로 옵션을 줘야 한다.



8

데몬셋 확인

kubectl get ds -o wide

NAME  DESIRED CURRENT READY  UP-TO-DATE  AVAILABLE NODE SELECTOR  AGE    CONTAINERS      IMAGES   SELECTOR

daemonset-1   2         2         2       2            2     <none>          100s   daemonset-pod   nginx 



9

pod, 라벨 확인 ?

kubectl get pod --show-labels

NAME                READY   STATUS    RESTARTS   AGE     LABELS

daemonset-1-57s22   1/1     Running   0          3m43s   controller-revision-hash=88d8d4645,name=daemonset-cndk,pod-template-generation=1

daemonset-1-wjq49   1/1     Running   0          3m43s   controller-revision-hash=88d8d4645,name=daemonset-cndk,pod-template-generation=1



10

ds 상세 확인 ?

kubectl describe ds daemonset-1



11

강제 pod 삭제 테스트 ?


kubectl delete pod --all

pod "daemonset-1-whc8n" deleted

pod "daemonset-1-xzxns" deleted


삭제후 다시 생성됨



12

데몬셋 확인 ?

kubectl get ds -o wide

NAME          DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR   AGE     CONTAINERS      IMAGES   SELECTOR

daemonset-1   2         2         2       2            2           <none>          4m42s   daemonset-pod   nginx    name=daemonset-cndk



13

데몬셋 삭제 ?

kubectl delete ds daemonset-1

// 터미널1 모니터링에서 없어진다.


14

데몬셋 확인 ?

kubectl get ds -o wide

No resources found in default namespace.





<2>  데몬셋 테스트 2


마스터 노드에도 데몬셋을 생성해 보자.

tolerations: 옵션 사용


1

cat << EOF > daemonset-2.yaml

apiVersion: apps/v1

kind: DaemonSet

metadata:

  name: daemonset-2

spec:

  selector:

    matchLabels:

      name: daemonset-cndk-2

  template:

    metadata:

      labels:

        name: daemonset-cndk-2

    spec:

      tolerations:

      - effect: NoSchedule

        operator: Exists

      containers:

      - name: daemonset-pod-2

        image: nginx

EOF


//    tolerations:   = 마스터 노드에서 배포 된다. 모든 노드에 배포한다 !!!


2

ubuntu@ip-172-20-41-255:~$ kubectl apply -f daemonset-2.yaml

daemonset.apps/daemonset-2 created



3

kubectl get ds -o wide


ubuntu@ip-172-20-41-255:~$ kubectl get ds -o wide

NAME          DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR   AGE   CONTAINERS        IMAGES   SELECTOR

daemonset-2   3         3         3       3            3           <none>          22s   daemonset-pod-2   nginx    name=daemonset-cndk-2



4

다른 테미널에서 모니터링

watch -d 'kubectl get pods,ds -o wide'


kubectl get pods,ds -o wide




5

kubectl get pod --show-labels


ubuntu@ip-172-20-41-255:~$ kubectl get pod --show-labels

NAME                READY   STATUS    RESTARTS   AGE   LABELS

daemonset-2-fhz6l   1/1     Running   0          72s   controller-revision-hash=8bc7c45d6,name=daemonset-cndk-2,pod-template-generation=1

daemonset-2-nhhgj   1/1     Running   0          72s   controller-revision-hash=8bc7c45d6,name=daemonset-cndk-2,pod-template-generation=1

daemonset-2-zbwqj   1/1     Running   0          72s   controller-revision-hash=8bc7c45d6,name=daemonset-cndk-2,pod-template-generation=1

ubuntu@ip-172-20-41-255:~$



6

kubectl describe ds daemonset-2



7

kubectl delete ds daemonset-2


데몬셋 모두 삭제

kubectl delete ds --all





<3>  정리


데몬셋 ?

모든 노드에 Pod를 1개씩 생성해주는 오브젝트.




<4>  다음 과정


https://brunch.co.kr/@topasvga/1678


감사합니다.

브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari