본문 바로가기
Containers/Kubernetes

4.4. DaemonSet

by shinebee* 2020. 7. 29.

1. DaemonSet 소개

  • 노드 레이블과 매칭이 되는 모든 노드 또는 노드 레이블이 없다면 모든 노드에 하나씩의 파드를 동작시키는 컨트롤러.
  • 특정 노드에 파드를 배치되도록 하는 것.
  • 노드가 추가되거나 노드의 레이블이 추가됐을 때 조건이 맞으면 실행★
  • 실행할 노드가 없으면 죽어버린다.
  • 동일한 노드에 두개의 파드가 만들어지지 않는다.
    -> 하나에 하나만 만들어진다.
  • 기능은 레플리케이션 컨트롤러와 레플리카셋과 비슷하지만, 복제본을 지정하지 않는다.
  • 노드가 추가되면 자동으로 컨트롤러는 하나의 파드를 배치
  • 노드가 제거되면 삭제된 파드를 다른 노드에 배치하지 않는다.
    -> 복제본 컨트롤러가 아니기 때문.

 

 

2. DaemonSet 생성

  • 데몬셋 오브젝트의 API 버전 역시 apps 그룹의 v1 버전을 사용한다.
# myapp-ds.yaml

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: httpd
        ports:
        - containerPort: 80
  • .spec.template.spec.nodeSelector : 파드를 특정 노드에 배치할 수 있다.

 

  • 데몬셋 오브젝트 생성
kubectl create -f myapp-ds.yaml

 

 

3. DaemonSet 확인

  • 노드 레이블(development)과 매칭 되는 노드가 없기 때문에 파드를 생성하지 않는다.

 

  • LABELS => node label
  • 기본적으로 쿠버네티스 클러스터에 필요에 의해 사용하는 레이블만 있다.
  • 해당 레이블에는 node라는 레이블의 키가 없으므로 매칭 되는 노드가 없다.

 

 

4. node label 지정

  • 생성한 데몬셋 오브젝트가 파드를 생성하기 위해 노드에 레이블을 추가로 지정.
kubectl label nodes node1 node=development

 

 

5. DaemonSet 확인

  • DaemonSet 확인

 

  • pod 확인

 

 

6. node label 제거

  • 노드 레이블을 제거하여 데몬셋이 실행하는 파드를 제거할 수 있다.
  • 레이블 제거는 레이블의 값을 제거할 수도 있고, 레이블의 키를 제거할 수도 있다.
  • 키를 제거한다는 것은 값도 제거된다는 의미

 

 1) 노드 레이블 값 제거

kubectl label nodes node1 node='' --overwrite

 

2) 노드 레이블 키 제거

kubectl label nodes node1 node-

 

  • 노드 레이블 셀렉터와 매칭 되는 것이 없기 때문에 파드는 제거된다.

 

 

7. DaemonSet 삭제

kubectl delete -f myapp-ds.yaml

'Containers > Kubernetes' 카테고리의 다른 글

5.2. Service 탐색  (1) 2020.08.10
5.1. Cluster 내부 서비스  (0) 2020.08.03
4.3. ReplicaSet  (0) 2020.07.28
4.2. Replication Controller  (0) 2020.07.24
4.1. Liveness Probe  (0) 2020.07.24

댓글