
Daemon Set은 클러스터의 모든 노드 또는 특정 노드 그룹에 하나의 pod 를 실행하도록 하는 컨트롤러입니다.
데몬셋은 모든(또는 일부) 노드가 파드의 사본을 실행하도록 합니다.
노드가 클러스터에 추가되면 파드도 추가되며, 노드가 클러스터에서 제거되면 해당 파드는 garbage로 수집되어 자동 삭제됩니다.
데몬셋을 삭제하면 데몬셋이 생성한 파드들이 정리됩니다.
Deployment와 유사하지만 다른 점은 특정 노드 또는 모든 노드에 항상 실행되어야 할 특정 파드를 관리해야 한다는 것이다.
보통 컨트롤 플레인에 해당하는 컴포넌트(kube-apiserver, etcd, scheduler, kube-proxy 등등)를 데몬셋으로 관리합니다.
DaemonsSet Use Case
일반적으로 monitoring solution, logs viewer 같이 로그 수집, 모니터링, 백그라운드 작업 및 다른 노드 별 업무를 처리하는 데 사용됨.
일반적으로 kube-proxy, calico 등 네트워크 관련 서비스가 데몬셋으로 배포됩니다.
DaemonSet 동작 원리
데몬셋으로 배포되는 각 파드에 자동으로 node affinity가 적용되어 모든 노드에 하나씩 배포되도록 합니다.
DaemonSet Definition
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
replicaset 과 kind만 다릅니다.
데몬셋은 셀렉터를 사용해서 특정 노드에 원하는 파드가 배포되도록 제어합니다.
kubectl create -f [파일이름]
kubectl create deployment elasticsearch --image=registry.k8s.io/fluentd-elasticsearch:1.20 -n kube-system --dry-run=client -o yaml > fluentd.yaml
같이 create 명령어로 먼저 deployment의 yaml을 dry run해서 얻고,
얻은 yaml 파일에서 replicaset을 삭제하고 kind를 daemonset으로 변경한 후 apply 합니다.
apiVersion: apps/v1
kind: DaemonSet
metadata:
labels:
app: elasticsearch
name: elasticsearch
namespace: kube-system
spec:
selector:
matchLabels:
app: elasticsearch
template:
metadata:
labels:
app: elasticsearch
spec:
containers:
- image: registry.k8s.io/fluentd-elasticsearch:1.20
name: fluentd-elasticsearch
resources: {}
View DaemonSets
kubectl get daemonsets

참고
Certified Kubernetes Adiminstrtor(CKA) with Practice Tests by Mumshad Mannambeth, KodeKloud Training
'K8S > Scheduling' 카테고리의 다른 글
Static Pods (0) | 2024.01.19 |
---|---|
[Scheduling] Resource Requirements and Limits (0) | 2024.01.19 |
Node Selectors & Node Affinity⭐⭐⭐ (0) | 2024.01.19 |
Taints and Tolerations⭐⭐⭐ (0) | 2024.01.18 |
[Scheduling] Pod Scheduling Process, nodeName (0) | 2024.01.18 |