본문 바로가기
IT 잡지식/DevOps

[CKA] KodeKloud - DaemonSets

by 쯀리♥️ 2024. 6. 9.

안녕하세요, 쯀리입니다.

오늘은 Daemon Sets에 관해 알아볼게요

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

 

DaemonSet

A DaemonSet defines Pods that provide node-local facilities. These might be fundamental to the operation of your cluster, such as a networking helper tool, or be part of an add-on.

kubernetes.io

 


 

Daemon Set이란?

Daemon이란것을 들어보셨나요?
사용자가 직접적으로 제어하지 않고, 백그라운드에서 돌면서 여러 작업을 하는 프로그램을 말합니다.

https://ko.wikipedia.org/wiki/%EB%8D%B0%EB%AA%AC_(%EC%BB%B4%ED%93%A8%ED%8C%85)#%EA%B0%81%EC%A3%BC

 

데몬 (컴퓨팅) - 위키백과, 우리 모두의 백과사전

위키백과, 우리 모두의 백과사전. 리눅스 데스크톱 환경의 구성 요소 중 일부는 데몬이며, 여기에는 D-Bus, 네트워크매니저 (이른바 unetwork), 펄스오디오 (usound), Avahi가 포함된다. 멀티태스킹 운영

ko.wikipedia.org

 

Kubernetes에서 DaemonSet  모든(또는 일부) 노드가 Pod 복사본을 실행하도록 보장하는 Controller입니다. 클러스터에 노드가 추가되면 해당 노드에 Pod가 추가됩니다. 클러스터에서 노드가 제거되면 해당 Pod는 가비지 수집됩니다. DaemonSet를 삭제하면 생성된 Pod가 정리됩니다.

DaemonSet의 예제: fluentd 로그 수집기를 클러스터의 모든 노드에 배포하는 DaemonSet의 예제입니다.

apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: fluentd
  labels:
    app: fluentd
spec:
  selector:
    matchLabels:
      name: fluentd
  template:
    metadata:
      labels:
        name: fluentd
    spec:
      containers:
      - name: fluentd
        image: fluentd:latest
        resources:
          limits:
            memory: "200Mi"
            cpu: "100m"
        volumeMounts:
        - name: varlog
          mountPath: /var/log
        - name: varlibdockercontainers
          mountPath: /var/lib/docker/containers
          readOnly: true
      volumes:
      - name: varlog
        hostPath:
          path: /var/log
      - name: varlibdockercontainers
        hostPath:
          path: /var/lib/docker/containers

DaemonSet에 관해 예제를 통해 더 자세히 알아보도록 할게요,


Quiz.

1. How many DaemonSets are created in the cluster in all namespaces?

k get daemonsets -A

 

2. Which namespace is the kube-proxy Daemonset created in?
위에서 확인했을때 kube-proxy는 kube-system 이라는 namespace에 만들어져 있습니다. 

3. Which of the below is a DaemonSet?  
kube-flannel-ds 

4. On how many nodes are the pods scheduled by the DaemonSet kube-proxy?

k describe daemonset kube-proxy -n=kube-system

한개의 pod가 스케쥴 잡혀 있는 것을 볼 수 있습니다.

5. What is the image used by the POD deployed by the kube-flannel-ds DaemonSet?

// 해당 daemon의 namespace를 알아본다
k get daemonset -A

// 동일한 namespace로 찾아 pod를 검색
k get pod -A -o wide | grep kube-flannel

// 해당 pod에서 image검색
k describe pod kube-flannel-ds-bzgjl -n=kube-flannel | grep Image

그럼 배포된 image는 docker.io/flannel/flannel:v0.23.0

6. Deploy a DaemonSet for FluentD Logging. Use the given specifications.

Name: elasticsearch
Namespace: kube-system
Image: registry.k8s.io/fluentd-elasticsearch:1.20
apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: elasticsearch
  namespace: kube-system
  labels:
    k8s-app: fluentd-logging
spec:
  selector:
    matchLabels:
      name: elasticsearch
  template:
    metadata:
      labels:
        name: elasticsearch
    spec:
      tolerations:
      # these tolerations are to have the daemonset runnable on control plane nodes
      # remove them if your control plane nodes should not run pods
      - key: node-role.kubernetes.io/control-plane
        operator: Exists
        effect: NoSchedule
      - key: node-role.kubernetes.io/master
        operator: Exists
        effect: NoSchedule
      containers:
      - name: fluentd-elasticsearch
        image: registry.k8s.io/fluentd-elasticsearch:1.20
        resources:
          limits:
            memory: 200Mi
          requests:
            cpu: 100m
            memory: 200Mi
        volumeMounts:
        - name: varlog
          mountPath: /var/log
      # it may be desirable to set a high priority class to ensure that a DaemonSet Pod
      # preempts running Pods
      # priorityClassName: important
      terminationGracePeriodSeconds: 30
      volumes:
      - name: varlog
        hostPath:
          path: /var/log

 

Docs의 yaml파일을 참고했습니다. 

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

 

DaemonSet

A DaemonSet defines Pods that provide node-local facilities. These might be fundamental to the operation of your cluster, such as a networking helper tool, or be part of an add-on.

kubernetes.io

 


오늘은 DaemonSet에 관해 알아보았습니다. 이는 모든 노드에 필요한 특정 작업을 수행하는 Pod를 배포할 때 유용합니다. 예를 들어, 로그 수집기, 모니터링 에이전트, 네트워크 구성 관리 등을 수행하는 데 사용됩니다.

다음시간에는 Static PODs에 관해 알아보겠습니다. 

 

 


참조

 Udemy Labs - Certified Kubernetes Administrator with Practice Tests

'IT 잡지식 > DevOps' 카테고리의 다른 글

[CKA] KodeKloud - Multiple Schedulers  (0) 2024.06.23
[CKA] KodeKloud - Static PODs  (0) 2024.06.23
[CKA] KodeKloud -Resource Limits  (0) 2024.06.09
[CKA] KodeKloud -Node Affinity  (0) 2024.06.08
[CKA] KodeKloud -Taints and Tolerations  (0) 2024.06.08