참고: [Kubernetes] 데몬셋
**DaemonSet은 모든 (혹은 몇몇의 지정된) Node들에 특정 Pod 한개를 유지시켜주는 Controller이다.
동작방식은 Node들이 Cluster내에 추가될 때, DaemonSet으로 정의된 Pod가 자동으로 생성된다. 반대로 Node가 Cluster내에서 삭제 되면, DaemonSet에 대한 Pod가 자동적으로 제거 된다.
보통 이런 특성 때문에 DaemonSet은 Cluster 내의 logging 및 자원 모니터링과 같은 곳에 효과적으로 사용될 수 있다.
Node가 신규로 Cluster내에 들어올 때 Monitoring과 같은 Container를 띄워서 내부 Pod들을 감시하도록 설계하는 것이다. 모든 노드의 Pod들을 모니터링하는 역할은 반드시 필욯다ㅏ.
데몬셋은 Node에 무조건적으로 있어야 하고 특수한 역할을 하는 Container에 대해서 적합하다.
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: fluentd-elasticsearch # DaemonSet의 Name
namespace: kube-system # DaemonSet이 배포되는 namespace
labels:
k8s-app: fluentd-logging
spec:
# DaemonSet이 관리해야할 Pod를 지정하는 Label selector입니다.
# 아래의 Label과 Pod의 Lavel이 매칭되는 Pod가 관리대상입니다.
selector:
matchLabels:
name: fluentd-elasticsearch
template:
metadata:
# Pod의 Lavel(위의 Lavel selector에 매칭됩니다.)
labels:
name: fluentd-elasticsearch
# DaemonSet은 Pod를 관리하는 Object이므로 하위는 Pod의 Spec과 동일합니다.
spec:
tolerations: # tolerations에 해당되는 Node를 포함하여 스케쥴링합니다.
- key: node-role.kubernetes.io/master
effect: NoSchedule
containers:
- name: fluentd-elasticsearch
image: k8s.gcr.io/fluentd-elasticsearch:1.20
resources:
limits:
memory: 200Mi
requests:
cpu: 100m
memory: 200Mi
volumeMounts:
- name: varlog
mountPath: /var/log
- name: varlibdockercontainers
mountPath: /var/lib/docker/containers
readOnly: true
terminationGracePeriodSeconds: 30
volumes:
- name: varlog
hostPath:
path: /var/log
- name: varlibdockercontainers
hostPath:
path: /var/lib/docker/containers