안녕하세요, 오늘은 베스핀글로벌 DevOps실 구연수 님이 작성해 주신 ‘신규 Node 생성 시 자동으로 Pod 배포 – DaemonSet’에 대해 알아보겠습니다.
DaemonSet
- ReplicaSet과 같이 Pod의 인스턴스를 여러 개 배포할 수 있도록 돕는다.
- 단, 각 node 마다 1개의 pod 복사본만 만든다.
- 클러스터 내에 새로운 Node가 하나 생길 때마다, Pod 복제본이 자동으로 Node에 생성된다.
- Node가 삭제되면 Pod 역시 자동으로 삭제된다.
- DaemonSet은 클러스터 내 모든 Node에는 항상 1개 이상의 Pod 복사본이 존재하도록 보장한다.
DaemonSet Usecase
- Monitoring & Log
- 모니터링, 로그처럼 모든 노드에 배포되는 것이 좋을 때 DaemonSet을 활용하면 좋다.
2. Kube-proxy
- 모든 Node에서 요구되는 Worker Node 컴포넌트인 Kube-proxy 역시 DaemonSet의 활용 사례이다.
3. Network
DaemonSet with yaml
apiVersion: apps/v1
kind: DaemonSet
metadata:
name:
spec:
template:
metadata:
name: 파드이름
labels:
app:
type:
spec:
containers:
- name: nginx-controller
image: nginx
seletor:
matchLabels:
type: 관리pod의label
– kind
를 제외하고 ReplicaSet과 정의 내용이 같다.
kubectl get daemonsets
DaemonSet 동작 방식
클러스터 내 각 node마다 파드를 스케쥴링하는 법이나 각 node에 pod가 있다고 보장하는 방법은?
Kubernetes version 1.12
까지의 동작- pod에 node 이름 속성을 설정할 수 있고, 이를 통해 node에 위치한 pod를 바로 가져올 수 있다.
- 각 pod가 생성되기 전에 설정 파일에 node 이름 속성을 설정하고, 생성이 될 당시에 바로 대응되는 node를 찾아 안착한다.
Kubernetes version 1.12
이후의 동작- DaemonSet을 위해 default scheduler와 node affinity 규칙을 사용한다.
감사합니다.
Written by 구 연수 / Yeonsoo koo
Software Engineer