DaemonSets
DaemonSet
개념
ReplicaSet과 비슷하게 여러Pod를 배포하지만, 차이점은 클러스터의 모든Node에Pod를 1개씩 배치하는 것을 보장한다는 점이다.- 새로운
Node가 클러스터에 추가되면 자동으로Pod도 추가된다. Node가 클러스터에서 제거되면 해당Node에서 실행 중이던Pod도 자동 삭제됨.
Use Cases
아래 사례들 처럼 모든 Node에 하나씩 존재해야하는 Pod들을 관리할 때 사용한다.
Node단위 모니터링 에이전트Node ExporterDatadog agentPrometheus Node-level exporter등
- 로그 수집기
FluentdFilebeatLogstash
Kube-proxyCNI PluginCalicoFlannel
Yaml
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: monitoring-daemon
labels:
app: nginx
spec:
selector:
matchLabels:
app: monitoring-agent
template:
metadata:
labels:
app: monitoring-agent
spec:
containers:
- name: monitoring-agent
image: monitoring-agent
kind가DaemonSet이라는 점을 제외하면ReplicaSet과 동일하다.
스케줄링 원리
Kubernetes 1.12 이전
DaemonSet이kube-scheduler를 우회하고 직접Node에Pod를 생성한다.Pod정의 내부에nodeName: <node-name>같은 형태로Node를 직접 지정하는 방식을 사용한다.
Kubernetes 1.12 이후
- 기본 스케줄러(
kube-scheduler)를 그대로 사용한다. DaemonSet은NodeAffiniy,Toleration,NodeSelector를 활용하여 적절한Node에Pod를 배치한다.- 이를 통해서
kube-scheduler의 고급 기능(리소스 최적화, 선점, 일관된 스케줄링 정책)을 활용할 수 있게 된다. - 스케줄러가 노드의 리소스를 고려하여 배치하므로, 리소스 부족 문제를 더 잘 처리할 수 있다.
- 이를 통해서
레퍼런스
- https://kubernetes.io/docs/concepts/workloads/controllers/daemonset/#writing-a-daemonset-spec
- Udemy - Certified Kubernetes Administrator (CKA) with Practice Tests (Mumshad)