모든 노드마다 동일한 파드를 하나씩 띄워놓는 데몬.
새로운 노드가 추가되면 지정한 파드가 자동으로 추가된다.
노드가 제거되면 데몬셋으로 지정한 파드도 제거된다.
레플리카셋과 거의 유사하다.
클러스터 각 노드마다 모니터링 에이전트, 로그 수집 에이전트 배포할 경우 유용하다.
굳이 이런 파드를 띄우지 않아도 데몬셋이 알아서 띄워주고 죽여주니까.
kube-proxy가 이런 데몬셋을 사용하는 대표적인 사례이다.
kube-proxy 복습 링크
Replicaset 생성과 거의 유사하며 definition 파일 구조도 거의 동일하다.
kind가 ReplicaSet이 아니라 DaemonSet이라는 것만 다르다.
예시)
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: fluentd-elasticsearch
namespace: kube-system
labels:
k8s-app: fluentd-logging
spec:
selector:
matchLabels:
name: fluentd-elasticsearch
template:
metadata:
labels:
name: fluentd-elasticsearch
spec:
containers:
- name: fluentd-elasticsearch
image: quay.io/fluentd_elasticsearch/fluentd:v2.5.2
resources:
limits:
memory: 200Mi
requests:
cpu: 100m
memory: 200Mi
volumeMounts:
- name: varlog
mountPath: /var/log
terminationGracePeriodSeconds: 30
volumes:
- name: varlog
hostPath:
path: /var/log
kubectl create daemonset
이라는 명령어는 존재하지 않는다.
빠르게 definition 파일 포맷을 만들기 위해서
먼저 형식이 유사한 kubectl create deploy
명령어를 사용한다.
그 후 kind 등 필요한 부분을 수정하면 된다.
파드마다 스케줄링 할 각 nodeName을 지정해서 스케줄링했음
node affinity 와 기본 스케줄러를 사용하여 스케줄링함