Scheduling-DaemonSets

2024. 12. 31. 15:33쿠버네티스/쿠버네티스

728x90
반응형

DaemonSet은 Kubernetes에서 특정 Pod가 클러스터의 모든 노드(또는 일부 노드)에 실행되도록 보장하는 리소스입니다. 이는 백그라운드 서비스나 시스템 수준 데몬을 각 노드에서 실행해야 할 때 특히 유용합니다. 아래는 DaemonSet의 주요 특징, 사용 사례, 그리고 작동 방식에 대한 상세한 설명입니다.

DaemonSet의 주요 특징

  • 노드당 하나의 Pod: DaemonSet은 지정된 Pod의 복사본이 클러스터의 각 적합한 노드에서 하나씩 실행되도록 보장합니다.
  • 자동 업데이트: 새로운 노드가 클러스터에 추가되면 DaemonSet이 해당 노드에 자동으로 Pod를 스케줄링합니다. 반대로 노드가 제거되면 해당 노드에서 Pod도 자동으로 삭제됩니다.
  • 중앙 집중식 관리: DaemonSet을 삭제하면 DaemonSet이 생성한 모든 Pod도 함께 삭제됩니다.

주요 사용 사례

  1. 로그 수집 및 모니터링:
    • Fluentd 또는 Logstash와 같은 로그 수집 에이전트를 배포하여 모든 노드에서 로그를 수집하고 중앙 시스템으로 전송.
    • Prometheus Node Exporter 또는 Datadog 에이전트와 같은 모니터링 도구를 실행하여 모든 노드에서 메트릭 수집.
  2. 클러스터 네트워킹:
    • kube-proxy 또는 Calico, Flannel과 같은 네트워크 플러그인을 관리하여 모든 노드에서 네트워크 구성 요소 실행.
  3. 스토리지 관리:
    • GlusterFS 또는 Ceph와 같은 스토리지 데몬을 배포하여 분산 스토리지 관리.
  4. 커스텀 노드 수준 서비스:
    • 보안 도구 또는 사용자 정의 모니터링 솔루션과 같은 시스템 수준 서비스를 호스트와 직접 상호작용하도록 배포.

DaemonSet의 작동 방식

DaemonSet은 컨트롤러를 통해 Pod가 모든 적합한 노드에 스케줄링되도록 보장합니다:

  • 기본 동작: 기본적으로 DaemonSet은 클러스터의 모든 노드에 Pod를 스케줄링합니다.
  • 노드 선택: nodeSelector 또는 node affinity 규칙을 사용하여 특정 노드에만 Pod를 배포할 수 있습니다.
  • Pod 스케줄링: Kubernetes 1.12 버전부터 DaemonSet은 기본 스케줄러와 node affinity 규칙을 사용하여 더 나은 통합과 일관성을 제공

DaemonSet 생성 및 관리

YAML 구성 예시

Fluentd 로그 에이전트를 배포하는 DaemonSet YAML 파일 예시

apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: flontend
spec:
  selector:
    matchLabels:
      app: flontend
  template:
    metadata:
      labels:
        app: flontend
    spec:
      containers:
      - name: flontend
        image: quay.io/fluentd_elasticsearch/flontend:latest

DaemonSet의 주요 장점

  • 노드 수준 서비스 배포 간소화.
  • 클러스터 토폴로지 변경(예: 노드 추가/제거)에 자동 적응.
  • 중앙 집중식 관리로 운영 부담 감소.

DaemonSet은 클러스터 내 모든 노드에서 중요한 서비스를 일관되게 배포하기 위한 필수 도구로, 모니터링, 로깅, 네트워킹 등 다양한 용도로 활용됩니다.


Deploy a DaemonSet for FluentD Logging.

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

kubectl create deployment elasticsearch -n kube-system --image=registry.k8s.io/fluentd-elasticsearch:1.20 --dry-run=client -o yaml > DaemonSet.yaml

#필요없는 부분 삭제
apiVersion: apps/v1
kind: DaemonSet
metadata:
  creationTimestamp: null
  labels:
    app: elasticsearch
  name: elasticsearch
  namespace: kube-system
spec:
  selector:
    matchLabels:
      app: elasticsearch
  template:
    metadata:
      creationTimestamp: null
      labels:
        app: elasticsearch
    spec:
      containers:
      - image: registry.k8s.io/fluentd-elasticsearch:1.20
        name: fluentd-elasticsearch
        resources: {}
반응형