본문 바로가기
Linux&Ubuntu/Docker&kuber

DaemonSet 사용하기.

by Vittorio_Lee 2023. 9. 11.
728x90
반응형
SMALL

-전체 노드에서 pod가 한 개씩 실행되도록 보장
-로그 수입기 , 모니털이 에이전트와 같은 프로그램 실행 시 적용

 

master에서 node1,2가 있을때 node3을 추가로 join 시키면 node3에서도 자동으로 생성됩니다.

 

 

rs-nginx.yaml daemonset-exam.yaml
apiVersion: apps/v1
kind: ReplicaSet
metadata:
  name: rs-nginx
spec:
  replicas: 3
  selector:
    matchLabels:
      app: webui
  template:
    metadata:
      name: nginx-pod
      labels:
        app: webui
    spec:
      containers:
      - name: nginx-container
        image: nginx:1.14
apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: daemonset-nginx
spec:
  selector:
    matchLabels:
      app: webui
  template:
    metadata:
      name: nginx-pod
      labels:
        app: webui
    spec:
      containers:
      - name: nginx-container
        image: nginx:1.14

저같은 경우 master , node1 ,node2 로 구성되어 있어 사전에 node2를 join에서 빼고 진행하겠습니다.

Every 2.0s: kubectl get node                                                                        master: Mon Sep 11 13:48:51 2023

NAME      STATUS   ROLES           AGE     VERSION
master    Ready    control-plane   6d21h   v1.28.1
worker1   Ready              6d21h   v1.28.1
worker2   Ready              23m     v1.28.1

 

# kubectl delete nodes worker2

확인시  node1 만 남았습니다.

Every 2.0s: kubectl get node                                                                        master: Mon Sep 11 13:19:05 2023

NAME      STATUS   ROLES           AGE     VERSION
master    Ready    control-plane   6d21h   v1.28.1
worker1   Ready              6d20h   v1.28.1

이제 pod를 생성해보겠습니다.

# vi daemonset-exam.yaml
apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: daemonset-nginx
spec:
  selector:
    matchLabels:
      app: webui
  template:
    metadata:
      name: nginx-pod
      labels:
        app: webui
    spec:
      containers:
      - name: nginx-container
        image: nginx:1.14
# kubectl create -f daemonset-exam.yaml 

worker(node)가 한대라 한개만 생성 

# kubectl get pods
NAME                    READY   STATUS    RESTARTS   AGE
daemonset-nginx-2x466   1/1     Running   0          93s

이 node2(worker2)를 다시 join 하기 위해서 master 에서 koken 값을 확인합니다. 보통 처음에 생성하고 나면 유효기간에 따라 다르지만 보통 재생성 해야합니다. 

# kubeadm token list
<비어있음>

# kubeadm token create --ttl 1h    (시간 선택가능)
bc18ff.8n8ys8vu6y91pgah


node2 에서 작업합니다.

 

이미 한번 붙었던 node라서 한번 reset 해줍니다.

# kubeadm reset
# kubeadm join 10.101.0.21:6443 --token bc18ff.8n8ys8vu6y91pgah  --discovery-token-ca-cert-hash sha256:911e6e3f8df09927a3babd6cf8576ebc11a739d24474e80d4ff01746c20f73ff 


master 로 돌아옵니다.

Every 2.0s: kubectl get node                                                                        master: Mon Sep 11 13:25:42 2023

NAME      STATUS   ROLES           AGE     VERSION
master    Ready    control-plane   6d21h   v1.28.1
worker1   Ready              6d20h   v1.28.1
worker2   Ready              6s      v1.28.1   << worker2가 다시 붙었습니다.
# kubectl get pods
NAME                    READY   STATUS    RESTARTS   AGE
daemonset-nginx-2x466   1/1     Running   0          5m33s
daemonset-nginx-8rrjn   1/1     Running   0          29s   <<< worker2가 붙어서 pod도 자동생성 되었습니다. 

파드를 지워보겠습니다.

# kubectl delete pod daemonset-nginx-8rrjn
pod "daemonset-nginx-8rrjn" deleted


Every 2.0s: kubectl get pods                                                                        master: Mon Sep 11 13:26:57 2023

NAME                    READY   STATUS    RESTARTS   AGE
daemonset-nginx-2x466   1/1     Running   0          6m23s
daemonset-nginx-hr4hs   1/1     Running   0          8s    <<< 지워도 바로 생성됩니다 .

이번에는 롤링 업데이트를 해보겠습니다 .

# kubectl get ds
NAME              DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR   AGE
daemonset-nginx   2         2         2       2            2                     7m13s
# kubectl edit ds daemonset-nginx
daemonset.apps/daemonset-nginx edited
image 부분을 찾아 nginx 1.14 에서 1.15 로 변경 
:wq 하고 나가면  자동 변경 
변환 단계
Every 2.0s: kubectl get pods -o wide                                                                master: Mon Sep 11 13:29:38 2023

NAME                    READY   STATUS        RESTARTS   AGE     IP             NODE      NOMINATED NODE   READINESS GATES
daemonset-nginx-2x466   1/1     Terminating   0          9m4s    10.101.1.115   worker1              
daemonset-nginx-hr4hs   1/1     Running       0          2m49s   10.101.1.131   worker2              


Every 2.0s: kubectl get pods -o wide                                                                master: Mon Sep 11 13:29:43 2023

NAME                    READY   STATUS              RESTARTS   AGE   IP             NODE      NOMINATED NODE   READINESS GATES
daemonset-nginx-65dsc   1/1     Running             0          4s    10.101.1.116   worker1              
daemonset-nginx-m8xj7   0/1     ContainerCreating   0          1s             worker2              

# kubectl get pods -o wide
NAME                    READY   STATUS    RESTARTS   AGE   IP             NODE      NOMINATED NODE   READINESS GATES
daemonset-nginx-65dsc   1/1     Running   0          17s   10.101.1.116   worker1              
daemonset-nginx-m8xj7   1/1     Running   0          14s   10.101.1.132   worker2              
# kubectl describe pod 
...
Events:
  Type    Reason     Age    From               Message
  ----    ------     ----   ----               -------
  Normal  Scheduled  5m44s  default-scheduler  Successfully assigned vittorio/daemonset-nginx-m8xj7 to worker2
  Normal  Pulled     5m43s  kubelet            Container image "nginx:1.15" already present on machine
...

 

이제는 업데이트한 버전을 다시 undo 명령어로 롤백 해보겠습니다.

# kubectl rollout undo daemonset daemonset-nginx
daemonset.apps/daemonset-nginx rolled back

# kubectl get pods -o wide
NAME                    READY   STATUS              RESTARTS   AGE     IP             NODE      NOMINATED NODE   READINESS GATES
daemonset-nginx-65dsc   1/1     Running             0          6m54s   10.101.1.116   worker1   <none>           <none>
daemonset-nginx-xsdw6   0/1     ContainerCreating   0          2s      <none>         worker2   <none>           <none>
# kubectl get pods -o wide
NAME                    READY   STATUS        RESTARTS   AGE     IP             NODE      NOMINATED NODE   READINESS GATES
daemonset-nginx-2whz6   0/1     Pending       0          0s      <none>         worker1   <none>           <none>
daemonset-nginx-65dsc   0/1     Terminating   0          6m55s   <none>         worker1   <none>           <none>
daemonset-nginx-xsdw6   1/1     Running       0          3s      10.101.1.133   worker2   <none>           <none>
# kubectl get pods -o wide
NAME                    READY   STATUS              RESTARTS   AGE   IP             NODE      NOMINATED NODE   READINESS GATES
daemonset-nginx-2whz6   0/1     ContainerCreating   0          1s    <none>         worker1   <none>           <none>
daemonset-nginx-xsdw6   1/1     Running             0          4s    10.101.1.133   worker2   <none>           <none>
# kubectl get pods -o wide
NAME                    READY   STATUS    RESTARTS   AGE   IP             NODE      NOMINATED NODE   READINESS GATES
daemonset-nginx-2whz6   1/1     Running   0          6s    10.101.1.117   worker1   <none>           <none>
daemonset-nginx-xsdw6   1/1     Running   0          9s    10.101.1.133   worker2   <none>           <none>

# kubectl describe pod 명령어로 확인시 1.14로 돌아온것을 확인할수 있습니다. 



삭제하고 나가쟈 ~

# kubectl delete ds daemonset-nginx
daemonset.apps "daemonset-nginx" deleted







728x90
반응형
LIST

'Linux&Ubuntu > Docker&kuber' 카테고리의 다른 글

job controller 사용하기  (0) 2023.09.13
StatefulSet 사용하기  (0) 2023.09.11
Deloyment 사용하기  (0) 2023.09.08
ReplicaSet 사용하기  (0) 2023.09.08
controller종류와 Replication controller  (0) 2023.09.07