데몬셋 (DaemonSet)

niyu·2022년 7월 22일
0

쿠버네티스 기초

목록 보기
5/15
post-thumbnail
post-custom-banner

DaemonSet

데몬셋은 클러스터 전체 노드에 특정 파드를 실행할 때 사용하는 컨트롤러다. 클러스터 안에 새롭게 노드가 추가되었을 때 데몬셋이 자동으로 해당 노드에 파드를 실행시킨다.

🔎 컨트롤러: 기본 오브젝트를 생성하고 이를 관리하는 역할로, 대표적으로 ReplicaSet, DeamonSet, StatefulSet, Job, Deployment 등이 있다.

Daemonset
Daemonset (출처: etloveguitar.tistory.com/56)

데몬셋은 노드가 있는 수만큼 파드를 생성하고 각 노드에 파드를 하나씩 배포한다. 노드가 다운돼도 데몬셋은 어느 곳에서도 파드를 생성하지 않는다. 즉, 노드가 클러스터에서 빠졌을 때는 해당 노드에 있던 파드는 그대로 사라질 뿐 다른 곳으로 옮겨가서 실행되거나 하지 않는다.

모든 노드에 파드를 하나씩 배포하지 않아도 된다. 테인트와 톨러레이션 옵션을 사용하면 데몬셋을 전체 클러스터의 노드가 아니라 특정 노드들에만 선택해서 실행할 수도 있다.

데몬셋은 보통 로그 수집기를 실행하거나 노드를 모니터링하는 데몬 등 클러스터 전체에 항상 실행해두어야 하는 파드에 사용한다.

데몬셋 생성

apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: myapp-ds
spec:
  selector:
    matchLabels:
      app: myapp-ds
  template:
    metadata:
      labels:
        app: myapp-ds
    spec:
      nodeSelector:
        node: development
      containers:
      - name: myapp
        image: ghcr.io/c1t1d0s7/go-myweb
        ports:
        - containerPort: 8080

🔎 .spec.template.spec.nodeSelector: 파드를 특정 노드에 배치한다. 노드의 라벨 셀렉터 필드는 레플리카셋, 데몬잡, 잡, 디플로이먼트 컨트롤러에서도 사용할 수 있다.

데몬셋 확인

# 데몬셋 확인
$ kubectl get ds

데몬셋 확인1
데몬셋 확인1 (출처: nearhome.tistory.com/91)

$ kubectl get po
No resources found.

DISIRED, CURRENT, READY 등이 모두 0으로 보인다. 파드 목록을 나열하는 커맨드를 입력해도 마찬가지다. 파드가 생성되지 않는다. 왜 그럴까?

데몬셋 정의에 노드셀렉터로 node=development 레이블을 선택하도록 정의하였기 때문에 노드 레이블과 매칭되는 노드가 없어서 파드를 생성하지 않는다.

노드 레이블 지정

데몬셋이 파드를 생성하기 위해 노드에 레이블을 추가한다. kube-node1 노드에 node=development 노드 레이블을 설정한다.

$ kubectl label nodes kube-node1 node=development
node/kube-node1 labeled

데몬셋 확인2
데몬셋 확인2 (출처: nearhome.tistory.com/91)

DaemonSet vs ReplicaSet

레플리카셋은 매니페스트 파일에 정의된 파드의 수가 클러스터에서 항상 실행되도록 하지만 데몬셋은 매니페스트에 정의된 하나의 파드 복사본이 모든 노드에 하나씩 실행되도록 한다.

레플리카셋은 클러스터에 원하는 수의 파드 복제본이 있는지 확인하는 반면, 데몬셋에는 원하는 레플리카 수의 개념이 없다. 파드 셀렉터와 일치하는 파드가 각 노드에서 실행 중인지 확인하는 것 자체가 데몬셋이 수행해야할 역할이다.

ReplicaSet vs Daemonset
ReplicaSet vs Daemonset (출처: ithelp.ithome.com.tw/m/articles/10246153)

즉, 레플리카셋은 파드를 임의의 클러스터 노드로 스케줄하는 반면, 데몬셋은 모든 노드에 데몬셋에서 정의한 파드의 단일 인스턴스를 실행한다.


References

post-custom-banner

0개의 댓글