About/Kubernetes

[k8s] 데몬셋(Daemonset)

김징어 2022. 1. 13. 12:47

데몬셋(Daemonset)

데몬셋은 클러스터 전체 노드에 특정 파드를 실행할 때 사용하는 컨트롤러입니다. 클러스터 안에 새롭게 노드가 추가되었을 때 데몬셋이 자동으로 해당 노드에 파드를 실행시킵니다. 반대로 노드가 클러스터에서 빠졌을 때는 해당 노드에 있던 파드는 그대로 사라질 뿐 다른 곳으로 옮겨가서 실행되지는 않습니다.

데몬셋 예시

따라서 데몬셋은 보통 로그 수집기를 실행하거나 노드를 모니터링하는 데몬 등 클러스터 전체에 항상 실행해두어야 하는 파드에 사용합니다.

 

데몬셋(Daemonset) 사용해보기

매니페스트 파일 작성

로그 수집을 실행하는 데몬셋의 예시는 다음과 같습니다.

apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: fluentd-elasticsearch
  namespace: kube-system # 1
  labels:
    k8s-app: fluentd-logging # 2
spec:
  selector:
    matchLabels:
      name: fluentd-elasticsearch
  updateStrategy:
    type: RollingUpdate # 3
  template:
    metadata:
      labels:
        name: fluentd-elasticsearch
    spec:
      containers:
      - name: fluentd-elasticsearch
         image: quay.io/fluentd_elasticsearch/fluentd:v2.5.2 # 4
        env:
        - name: testenv
          value: value
        resources:
          limits:
            memory: 200Mi
          requests:
            cpu: 100m
            memory: 200Mi

#1 로그 수집기는 쿠버네티스 관리용 파드나 설정이므로, .metadata.namespace의 필드를 kube-system 네임스페이스로 설정합니다.

#2 .metadata.labels.k8s.app은 오브젝트를 식별하는 레이블로 키를 k8s-app인 값을 fluentd-loggin으로 설정합니다.

#3 데몬셋의 파드를 업데이트하는 방법으로 RollingUpdate로 설정합니다.  .spec.updateStrategy.type 필드는 OnDelete와 RollingUpdate 두 가지 중 하나의 값을 설정합니다. 

#4 로그 수집에 사용되는 fluentd(플루언트디)의 컨테이너 이미지를 설정합니다.

데몬셋 실행

데몬셋의 실행을 위해 위의 설정 내용을 daemonset.yaml로 저장합니다. 그리고 다음과 같이 명령어를 입력합니다.

kubectl apply -f daemonset.yaml

실행결과

그리고 daemonset을 조회하는 명령어를 입력합니다.

kubectl get daemonset -n kube-system

fluentd-elasticsearch라는 데몬셋이 만들어진 것을 확인 할 수 있습니다. 노드가 2대 있기 때문에 2개의 데몬셋이 생성되었습니다.

대시보드에서도 각 노드에 파드가 생성된 것을 확인할 수있습니다.


데몬셋에 대하여 알아보았습니다.

참고