본문 바로가기

Kubenetes/Kubernetes Pods

데몬셋 (Daemon Set)

레플리케이션컨트롤러와 레플리카셋은 모두 쿠버네티스의 특정위치에 배포된 특정 개수의 포드를 실행하는데 사용

클러스터의 각 노드에서 포드를 실행해야 하는 경우 데몬셋을 사용

 

[데몬셋을 사용해 모든 노드에서 포드 실행]

 

데몬셋은 각 노드에서 단일 포드 복제본만 실행하지만 레플리카셋은 클러스터 전체에서 무작위로 분산한다.

 

- 모든 클러스터 노드에서 포드를 실행하려면 데몬셋 객체를 만든다.

- 이 객체는 레플리케이션컨트롤러 또는 레플리카셋과 비슷

- 단, 데몬셋에 의해 만들어진 포드는 이미 대상 노드가 지정돼 있고 쿠버네티스 스케줄러는 건너뛴다.

- 노드가 다운되도 데몬셋은 어느곳에서도 포드를 생성하지 않는다. 그러나 새 노드가 클러스터에 추가되면 데몬셋은 즉시 새 포드 인스턴스를 배포한다.

 

[데몬셋을 사용해 특정 노드에서 포드를 실행]

 

- 포드가 모든 노드의 일부에만 실행하도록 지정하지 않는 한, 데몬셋은 클러스터의 모든 노드에 포드를 배포

- 데몬셋 정의의 일부인 포드 템플릿에서 node-Selector 속성을 지정

노드 셀렉터와 함께 데몬셋을 사용해 특정 노드에만 시스템 포드 배포

 

[데몬셋 YAML 정의 만들기]

 

ssd-monitor-daemonset.yaml

apiVersion: app/v1beta2  #데몬셋은 apps API 그룹의 버전 v1beta2에 있다.
kind: DaemonSet
metadata:
    name: ssd-monitor
spec:
    selector:
       matchLabels:
           app: ssd-monitor
    template:
       metadata:
           Labels:
               app: ssd-monitor
       spec:
           nodeSelector:
               disk: ssd
           containers:
           - name: main
             image: luksa/ssd-monitor
 
    

 

[데몬셋 만들기]

 

$ kuebctl create -f ssd-monitor-daemonset.yaml

 

[생성된 데몬셋 보기]

 

$ kubectl get ds

 

[필요한 라벨을 노드에 추가]

 

$ kubectl label node minikube disk=ssd

node "minikube" labeled

[pod 상태 보기]

 

$ kubectl get po

 

[라벨을 노드에서 변경]

$ kubectl label node minikube disk=hdd ?overwirte

node "minikube" labeled