DaemonSet

이 페이지에서는 Kubernetes DaemonSet 객체를 설명하고 Google Kubernetes Engine에서 이를 사용하는 방법을 설명합니다.

DaemonSet란 무엇인가요?

다른 작업 부하 객체와 마찬가지로, DaemonSets는 복제된 포드 그룹을 관리합니다. 하지만 DaemonSets는 전체 클러스터 또는 노드 하위 집합에서 노드당 포드 하나라는 모델 원칙을 따르려고 시도합니다. 노드 풀에 노드를 추가할 때 DaemonSets는 새 노드에 포드를 필요에 따라 자동으로 추가합니다.

DaemonSets는 해당 포드에 대한 사양이 포함된 포드 템플릿을 사용합니다. 포드 사양은 각 포드의 모양을 결정합니다. 즉, 컨테이너 내에서 실행할 애플리케이션, 마운트할 볼륨, 라벨 및 선택기 등을 결정합니다.

사용 패턴

DaemonSets는 모든 또는 특정 노드에서 실행해야 하고, 사용자 개입이 필요하지 않은 진행 중인 백그라운드 작업을 배포하는 데 유용합니다. 이러한 작업의 예로는 ceph와 같은 저장소 데몬, fluentd와 같은 로그 수집 데몬, collectd와 같은 노드 모니터링 데몬이 있습니다.

예를 들어 각 유형의 데몬에 대한 DaemonSets가 모든 노드에서 실행되도록 할 수 있습니다. 또는 단일 유형의 데몬에 대해 여러 DaemonSets를 실행할 수 있지만, 여러 하드웨어 유형 및 리소스 요구에 따라 다른 구성을 사용하도록 할 수 있습니다.

DaemonSet 만들기

kubectl apply 또는 kubectl create를 사용하여 DaemonSet를 만들 수 있습니다.

다음은 DaemonSet 매니페스트 파일의 예입니다.

apiVersion: v1/beta2 # For Kubernetes version 1.9 and later, use apps/v1
kind: DaemonSet
metadata:
  name: fluentd
spec:
  selector:
      matchLabels:
        name: fluentd # Label selector that determines which Pods belong to the DaemonSet
  template:
    metadata:
      labels:
        name: fluentd # Pod template's label selector
    spec:
      nodeSelector:
        type: prod # Node label selector that determines on which nodes Pod should be scheduled
                   # In this case, Pods are only scheduled to nodes bearing the label "type: prod"
      containers:
      - name: fluentd
        image: gcr.io/google-containers/fluentd-elasticsearch:1.20
        resources:
          limits:
            memory: 200Mi
          requests:
            cpu: 100m
            memory: 200Mi

이 예에서는 다음과 같은 조건을 가정하고 있습니다.

  • 이름이 fluentd인 DaemonSet가 생성되고 metadata: name 필드로 표시됩니다.
  • DaemonSet의 포드가 fluentd 라벨로 지정됩니다.
  • 노드 라벨 선택기(type: prod)가 DaemonSet에서 해당 포드를 예약하는 라벨 지정된 노드를 선언합니다.
  • 포드의 컨테이너가 1.20 버전에서 fluentd-elasticsearch 이미지를 가져옵니다. 컨테이너 이미지는 Container Registry에서 호스팅됩니다.
  • 컨테이너가 CPU 100m, 메모리 200Mi를 요청하고, 총 메모리 사용량 200Mi로 자체적으로 제한합니다.

포드 사양에 포함되는 지침은 다음과 같이 요약할 수 있습니다.

  • 포드 라벨을 fluentd로 지정합니다.
  • 노드 라벨 선택기 type: prod를 사용해서 포드를 일치하는 노드로 예약하고 라벨 선택기가 없는 노드에서는 예약을 수행하지 않습니다. 또는 nodeSelector 필드를 생략하여 모든 노드로 예약합니다.
  • 1.20 버전에서 fluentd-elasticsearch를 실행합니다.
  • 일부 메모리 및 CPU 리소스를 요청합니다.

DaemonSet 구성에 대한 자세한 내용은 DaemonSet API 참조를 참조하세요.

DaemonSets 업데이트

해당 포드 사양, 리소스 요청 및 제한, 라벨, 주석을 변경하여 DaemonSets를 업데이트할 수 있습니다.

업데이트 처리 방법을 결정하기 위해 DaemonSet는 spec: updateStrategy에 정의된 업데이트 전략을 사용합니다. 여기에는 OnDeleteRollingUpdate의 두 가지 전략이 있습니다.

  • OnDelete는 객체 구성이 변경될 때 DaemonSet 포드를 자동으로 삭제하고 다시 만들지 않습니다. 대신 컨트롤러가 변경 사항이 반영된 새 포드를 만들도록 하려면 포드를 수동으로 삭제해야 합니다.
  • RollingUpdate는 DaemonSet 포드를 자동으로 삭제하고 다시 만듭니다. 이 전략에서는 변경 사항이 유효할 경우 롤아웃이 자동으로 트리거됩니다. 이것은 DaemonSets의 기본 업데이트 전략입니다.

업데이트 롤아웃은 다음 명령어를 실행하여 모니터링할 수 있습니다.

kubectl rollout status ds [DAEMONSET_NAME]

DaemonSets 업데이트에 대한 자세한 내용은 Kubernetes 문서에서 DaemonSet에서 지속적 업데이트 수행을 참조하세요.

다음 단계

이 페이지가 도움이 되었나요? 평가를 부탁드립니다.

다음에 대한 의견 보내기...

Kubernetes Engine