기본 데몬셋(DaemonSet) 생성하기

이 페이지는 쿠버네티스 클러스터의 모든 노드에서 파드를 실행하는 기본 데몬셋을 만드는 방법을 보여준다.
호스트로부터 파일을 마운트하고, 초기화 컨테이너를 사용해 그 내용을 로그로 남기며, pause 컨테이너를 이용하는 간단한 사용 사례를 다룬다.

시작하기 전에

쿠버네티스 클러스터가 필요하고, kubectl 커맨드-라인 툴이 클러스터와 통신할 수 있도록 설정되어 있어야 한다. 이 튜토리얼은 컨트롤 플레인 호스트가 아닌 노드가 적어도 2개 포함된 클러스터에서 실행하는 것을 추천한다. 만약, 아직 클러스터를 가지고 있지 않다면, minikube를 사용해서 생성하거나 다음 쿠버네티스 플레이그라운드 중 하나를 사용할 수 있다.

데몬셋의 동작을 보여주기 위해서는 최소 두 개의 노드(하나의 컨트롤 플레인 노드와 하나의 워커 노드)를 가진 쿠버네티스 클러스터가 필요하다.

데몬셋 정의하기

이 태스크에서는 기본 데몬셋을 생성하여 클러스터의 모든 노드에 파드가 하나씩 스케줄되도록 한다.
파드는 초기화 컨테이너를 이용해 호스트의 /etc/machine-id 내용을 읽어 로그에 남기고, 메인 컨테이너는 파드를 실행 상태로 유지하는 pause 컨테이너가 된다.

apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: example-daemonset
spec:
  selector:
    matchLabels:
      app.kubernetes.io/name: example
  template:
    metadata:
      labels:
        app.kubernetes.io/name: example
    spec:
      containers:
      - name: pause
        image: registry.k8s.io/pause
      initContainers:
      - name: log-machine-id
        image: busybox:1.37
        command: ['sh', '-c', 'cat /etc/machine-id > /var/log/machine-id.log']
        volumeMounts:
        - name: machine-id
          mountPath: /etc/machine-id
          readOnly: true
        - name: log-dir
          mountPath: /var/log
      volumes:
      - name: machine-id
        hostPath:
          path: /etc/machine-id
          type: File
      - name: log-dir
        hostPath:
          path: /var/log
  1. (YAML) 매니페스트를 기반으로 데몬셋을 생성한다.

    kubectl apply -f https://k8s.io/examples/application/basic-daemonset.yaml
    
  2. 적용 후, 클러스터의 모든 노드에서 데몬셋이 파드를 실행 중인지 확인할 수 있다.

    kubectl get pods -o wide
    

    출력은 다음과 같이 노드별로 하나의 파드를 보여줄 것이다.

    NAME                                READY   STATUS    RESTARTS   AGE    IP       NODE
    example-daemonset-xxxxx             1/1     Running   0          5m     x.x.x.x  node-1
    example-daemonset-yyyyy             1/1     Running   0          5m     x.x.x.x  node-2
    
  3. 호스트에서 마운트한 로그 디렉터리를 확인하여 로그에 기록된 /etc/machine-id 파일의 내용을 볼 수 있다.

    kubectl exec <pod-name> -- cat /var/log/machine-id.log
    

    <pod-name>은 사용자의 파드 중 하나의 이름이다.

정리하기

데몬셋을 삭제하려면, 다음 명령어를 실행한다.

kubectl delete --cascade=foreground --ignore-not-found --now daemonsets/example-daemonset

이 간단한 데몬셋 예제는 초기화 컨테이너와 호스트 패스(host path) 볼륨 같은 핵심 컴포넌트를 소개하며, 더 고급 사용 사례로 확장할 수 있다. 더 자세한 내용은 데몬셋을 참고하자.

다음 내용

최종 수정 August 31, 2025 at 1:03 AM PST: docs(ko): Translate create-daemon-set into Korean (2c33f49a7a)