Daemonset

Ethan·2021년 6월 13일
0

Kubernetes

목록 보기
7/16

Cluster에 존재하는 모든 Node마다 하나의 Pod을 실행하기 위해 사용하는것이 Daemonset이다.
주로 시스템 수준의 작업을 수행하는 Pod이다. 로그 수집기, 리소스 모니터링 등이 주로 Daemonset으로 사용된다.

Kubernetes에서 제공하는 Daemonset은 kube-proxy가 존재한다. 이 kube-proxy는 모든 노드에서 서비스를 작동시키기 위해 배포된다.
일반적으로 systemd를 이용해 각 노드마다 동일한 application을 실행하거나 script를 실행한다. kuberntes에서도 이렇게 실행이 가능하나 이러한 경우의 kubernetes의 모든 기능을 사용하기 어렵다.

Daemonset Object를 생성하고 배포될 PodTemplate을 작성하면, 노드가 추가 및 제거될때에도 자동으로 Node에 Pod이 배포된다.

Daemonset으로 배포되는 Pod은 노드가 이미 지정되어있고, kubernetes scheduler를 건너뛴다는것을 제외하고는 일반적인 Pod과 동일하다.

다만 Daemonset은 replicaset의 개념이 존재하지 않는다. Pod Selector가 일치하는 Pod이 각 노드에서 실행중인지 판단하는게 Daemonset의 역할이다. 그러므로 replica의 개념은 필요하지 않다.

특정 Node에만 배포되는 Daemonset을 생성하려면 Node-Selector 속성을 지정하면 된다.
Node-Selector가 동일한 Daemonset에만 Daemonset이 배포된다.

apiVersion: apps/v1beta2
kind: Daemonset
metadata:
  name: ssd-monitor
spec:
  selector:
    matchLabels:
      app: ssd-monitor
  template:
    metadata:
      labels:
        app: ssd-monitor
    spec:
      nodeSelector:			-- disk=ssd label이 존재하는 Node에만 배포되는 Daemonset이다.
        disk: ssd
      containers:
      - name: main
        image: luksa/ssd-monitor

node에 label을 붙이는 방법은 간단한다.
kubectl label node {nodeName} disk=ssd

profile
잘 하고 싶다는 의욕만 넘치는 평범한 개발자

0개의 댓글