반응형

 

 

 

데몬셋(DaemonSet)

데몬셋은 모든(또는 일부) 노드가 파드의 기능을 실행하도록 한다. 노드가 클러스터에 추가되면 파드도 추가된다. 노드가 클러스터에서 제거되면 해당 파드는 가비지(garbage)로 수집된다. 데몬셋을 삭제하면 데몬셋이 생성한 파드들이 정리된다.

데몬셋의 일부 대표적인 용도는 다음과 같다.

  • 모든 노드에서 클러스터 스토리지 데몬 실행
  • 모든 노드에서 로그 수집 데몬 실행
  • 모든 노드에서 노드 모니터링 데몬 실행

단순한 케이스에서는, 각 데몬 유형의 처리를 위해서 모든 노드를 커버하는 하나의 데몬셋이 사용된다. 더 복잡한 구성에서는 단일 유형의 데몬에 여러 데몬셋을 사용할 수 있지만, 각기 다른 하드웨어 유형에 따라 서로 다른 플래그, 메모리, CPU 요구가 달라진다

 

 

DaemonSet 사용

# nginx 서비스하는 daemonset YAML파일 생성
jinsu@jinsu:~$ cat daemonset.yaml 
apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: myapp
spec:
  selector:
    matchLabels:
      name: myapp
  template:
    metadata:
      labels:
        name: myapp
    spec:
      containers:
      - name: log
        image: nginx
jinsu@jinsu:~$ 
# pod 생성 및 daemonset 확인
jinsu@jinsu:~$ kubectl get pod      
NAME          READY   STATUS    RESTARTS   AGE
myapp-g8xvz   1/1     Running   0          14s
jinsu@jinsu:~$ kubectl get daemonset
NAME    DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR   AGE
myapp   1         1         1       1            1           <none>          15s
jinsu@jinsu:~$

# pod 상세정보
jinsu@jinsu:~$ kubectl get pod myapp-g8xvz -oyaml
apiVersion: v1
kind: Pod
metadata:
  creationTimestamp: "2022-08-14T09:03:42Z"
  generateName: myapp-
  labels:
    controller-revision-hash: 574bb58466
    name: myapp
    pod-template-generation: "1"
  name: myapp-g8xvz
  namespace: default
  ownerReferences:
  - apiVersion: apps/v1
    blockOwnerDeletion: true
    controller: true
    kind: DaemonSet
    name: myapp
    uid: 043877d9-3e51-4f30-b66d-3babe0e4aeef
  resourceVersion: "18179"
  selfLink: /api/v1/namespaces/default/pods/myapp-g8xvz
  uid: 12cd389d-8769-44e6-b8ca-0d92981e7102
spec:
  affinity:
    nodeAffinity:
      requiredDuringSchedulingIgnoredDuringExecution:
        nodeSelectorTerms:
        - matchFields:
          - key: metadata.name
            operator: In
            values:
            - master
  containers:
  - image: nginx
    imagePullPolicy: Always
    name: log
    resources: {}
    terminationMessagePath: /dev/termination-log
    terminationMessagePolicy: File
    volumeMounts:
    - mountPath: /var/run/secrets/kubernetes.io/serviceaccount
      name: default-token-vm2hl
      readOnly: true
  dnsPolicy: ClusterFirst
  enableServiceLinks: true
  nodeName: master
  priority: 0
  restartPolicy: Always
  schedulerName: default-scheduler
  securityContext: {}
  serviceAccount: default
  serviceAccountName: default
  terminationGracePeriodSeconds: 30
  tolerations:
  - effect: NoExecute
    key: node.kubernetes.io/not-ready
    operator: Exists
  - effect: NoExecute
    key: node.kubernetes.io/unreachable
    operator: Exists
  - effect: NoSchedule
    key: node.kubernetes.io/disk-pressure
    operator: Exists
  - effect: NoSchedule
    key: node.kubernetes.io/memory-pressure
    operator: Exists
  - effect: NoSchedule
    key: node.kubernetes.io/pid-pressure
    operator: Exists
  - effect: NoSchedule
    key: node.kubernetes.io/unschedulable
    operator: Exists
  volumes:
  - name: default-token-vm2hl
    secret:
      defaultMode: 420
      secretName: default-token-vm2hl
status:
  conditions:
  - lastProbeTime: null
    lastTransitionTime: "2022-08-14T09:03:42Z"
    status: "True"
    type: Initialized
  - lastProbeTime: null
    lastTransitionTime: "2022-08-14T09:03:46Z"
    status: "True"
    type: Ready
  - lastProbeTime: null
    lastTransitionTime: "2022-08-14T09:03:46Z"
    status: "True"
    type: ContainersReady
  - lastProbeTime: null
    lastTransitionTime: "2022-08-14T09:03:42Z"
    status: "True"
    type: PodScheduled
  containerStatuses:
  - containerID: docker://8029082fe0c04c42f894896d1fccdfa75968a0f87fedeb4b2696ee92a843e397
    image: nginx:latest
    imageID: docker-pullable://nginx@sha256:790711e34858c9b0741edffef6ed3d8199d8faa33f2870dea5db70f16384df79
    lastState: {}
    name: log
    ready: true
    restartCount: 0
    started: true
    state:
      running:
        startedAt: "2022-08-14T09:03:46Z"
  hostIP: 192.168.0.211
  phase: Running
  podIP: 10.42.0.47
  podIPs:
  - ip: 10.42.0.47
  qosClass: BestEffort
  startTime: "2022-08-14T09:03:42Z"
jinsu@jinsu:~$

 

DaemonSet 삭제

# 현재 데몬셋 확인
jinsu@jinsu:~$ kubectl get daemonset
NAME    DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR   AGE
myapp   1         1         1       1            1           <none>          6m24s
# 데몬셋 삭제
jinsu@jinsu:~$ kubectl delete daemonset myapp
daemonset.apps "myapp" deleted
jinsu@jinsu:~$ 

jinsu@jinsu:~$ kubectl get daemonset         
No resources found in default namespace.
jinsu@jinsu:~$ dd

 

 

 

 

 

참고자료

https://kubernetes.io/ko/docs/concepts/workloads/controllers/daemonset/

 

반응형

+ Recent posts