Kubernetes

[k8s] DaemonSet

코딩 못하는 감자 2025. 2. 20. 10:45

DaemonSet이란?

모든 노드에 파드를 하나씩 실행하도록 하는 오브젝트

ReplicaSet과 유사하지만 다른 점이 있다면, ReplicaSet은 여러 노드에 걸쳐서 정해진 개수의 파드를 배치한다면, DaemonSet은 노드 하나 당 파드를 하나 배포.

즉 노드를 추가하게 되면 그 노드에 파드가 하나 추가되고, 노드가 제거되면 파드의 개수 또한 줄어든다.

DaemonSet의 사용 사례

  • 모니터링 에이전트 배포:
  • 클러스터의 모든 노드에서 시스템 모니터링을 위해 에이전트를 실행해야 할 때, DaemonSet을 사용하면 노드 추가/삭제에 상관없이 자동으로 배포됩니다.
  • 로그 수집기 배포:
  • 각 노드에서 로그를 수집하기 위해 로그 수집기를 배포할 때 유용합니다.
  • kube-proxy 배포:
  • Kubernetes 아키텍처에서 kube-proxy는 모든 워커 노드에 반드시 존재해야 하는 컴포넌트인데, DaemonSet을 통해 쉽게 배포할 수 있습니다.
  • 네트워킹 솔루션:
  • 예를 들어, Vivenet과 같은 네트워킹 솔루션의 에이전트를 각 노드에 배포해야 할 때 사용됩니다.

생성

apiVersion: apps/v1
kind: DaemonSet

metadata: 
	name: monitoring-daemon
	
spec:
	selector:
		matchLabels:
			app: monitoring-agent
			
	template:
		metadata:
			labels:
				app: monitoring-agent
		spec:
			containers:
				- name: monitoring-agent
					image: monitoring-agent 

DaemonSet의 스케줄링 방식 변화

  • 이전 방식:
  • 과거에는 각 Pod에 nodeName 프로퍼티를 직접 설정하여 특정 노드에 Pod가 배치되도록 하였다. 이 방법은 스케줄러를 우회하는 방식이었다.
  • Kubernetes 1.12 이후:즉, DaemonSet은 내부적으로 스케줄러를 활용하여 각 노드에 Pod를 자동으로 배포한다.
  • Kubernetes 1.12 버전부터 DaemonSet은 기본 스케줄러와 노드 어피니티(node affinity) 규칙을 사용하여 Pod를 노드에 스케줄링한다.

요약

  • DaemonSet은 클러스터의 모든 노드에 파드를 하나씩 배포하는 오브젝트
  • 주요 사례: 모니터링, 로그 수집가, kube-proxy, 네트워킹 에이전트
  • 정의 파일은 ReplicaSet과 유사
  • 스케줄링 초기에는 파드마다 nodeName을 배치하였지만, 최신 버전에서는 기본 스케줄러와, NodeAffinity를 사용.