티스토리 뷰

Infra/Kubernetes

About Daemon Set

Jordy-torvalds 2019. 11. 12. 05:52

About DaemonSet

State: Completion

Outline

Replication Controller와 Replica Set은 일정한 수의 포드를 쿠버네티스 클러스터 내에서 생성 및 운영하는 것이 목적이다. 그렇기 때문에 특정한 포드가 쿠버네티스 내에서 사라져 서비스에 문제가 생기는 일은 사라지게 된다.

그렇다면 두 Object는 개별 노드 마다 리소스 모니터 Pods를 생성해야할 때도 유용하게 쓰일 수 있을까? 두 Object가 가지는 '클러스터 내에 일정한 수의 포드를 노드의 종류와 관계 없이 생성 및 운영 한다는' 특성 탓에 이러한 니즈에는 부적절하다고 볼 수 있다.

반면에 Daemon Set은 이러한 니즈에 부합하는 Object 이다. 개별 노드 마다 로그 수집기나 리소스 모니터 등의 기능을 하는 Pods를 생성해 관리 효율을 높여준다. 새로운 노드가 생성되도 알아서 해당 노드에 설정에 따라 리소스 모니터나 로그 수집기 Pods를 배포한다. Node Selector를 통해 특정 노드에만 배포하는 것도 가능하다.

이 처럼 효율적이고 매력적인 Daemon Set에 대해서 자세히 알아보겠다.

-

Definition

클러스터 내 특정 노드에 같은 Pod를 배포 및 운영해주는 Object.

-

YAML

apiVersion: apps/v1beta2
kind: DaemonSet #종류
metadata:
  name: ssd-monitor # 해당 Object의 고유한 이름. 중복 불가.
spec:
  selector:
    matchLabels:
        app: ssd-monitor
  template:
    metadata:
      labels:
        app: ssd-monitor # 템플릿으로 생성되는 Pod에 해당 레이블을 부여한다.
    spec:
      nodeSelector:
        disk: ssd # Key가 disk, Value가 ssd인 노드에 배포된다.
      containers: # 이미지 설정
      - name: main
        image: luksa/ssd-monitor

# vi 편집기로 위 yaml을 작성한 후 kubectl create -f <filename.fileExtention>
# 을 입력하면 DaemonSet이 생성된다.

-

Example

Using Daemon Set deploy pods to specific nodes

데몬 셋을 활용해 특정 노드에 포드를 배포해보는 실습을 해보겠다.

( 1 ) 전체 노드를 조회 한다.
kubectl get node

NAME                                   STATUS   ROLES    AGE   VERSION
gke-jordi-default-pool-08313642-c93c   Ready    <none>   27d   v1.13.10-gke.0
gke-jordi-default-pool-6a478366-mw0p   Ready    <none>   27d   v1.13.10-gke.0
gke-jordi-default-pool-f0a197fa-stvp   Ready    <none>   27d   v1.13.10-gke.0

( 2 ) 위 두개 노드에 레이블을 부여한다.

kubectl label node gke-jordi-default-pool-08313642-c93c disk=ssd

kubectl label node gke-jordi-default-pool-6a478366-mw0p disk=ssd

 

( 3 ) 위 YAML로 Daemon Set을 생성한다.

kubectl create -f <fileName.fileExtention>

 

( 4 ) Pod가 생성된 것을 확인할 수 있다.

NAME                                                    READY   STATUS    RESTARTS   AGE
jordi-9r74l                                             1/1     Running   0          5d5h
jordi-hwp4r                                             1/1     Running   0          5d5h
ssd-monitor-lm6tm                                       1/1     Running   0          15s
ssd-monitor-n562r                                       1/1     Running   0          15s

Example of a response when changing a specific node label

위 예제에 이어서 레이블을 부여한 Node 중 gke-jordi-default-pool-6a478366-mw0p 의 레이블을 disk=ssd 에서 disk=hdd로 변경했을 때 데몬 셋 생성 Pod의 반응을 확인해보겠다.

 

( 1 ) 특정 노드에 레이블을 덮어쓰기
위에서 언급했듯이 disk=hdd로 레이블을 덮어쓰기 해보겠다.

참고로, 기존 레이블과 Key가 동일할 경우에는 --overwrite 는 필수적이다.

kubectl label node gke-jordi-default-pool-6a478366-mw0p disk=hdd --overwrite

 

( 2 ) Pod 상세 정보 목록 조회

기존에 포드명과 age외에 소속된 노드의 정보도 함께 조회하는 명령어를 실행했다.

kubectl get po -o wide

NAME                   READY   STATUS        RESTARTS   AGE    IP           NODE                                   NOMINATED NODE   READINESS GATES
jordi-9r74l            1/1     Running       0          5d5h   10.48.0.21   gke-jordi-default-pool-08313642-c93c   <none>           <none>
jordi-hwp4r            1/1     Running       0          5d5h   10.48.1.14   gke-jordi-default-pool-f0a197fa-stvp   <none>           <none>
ssd-monitor-lm6tm      1/1     Terminating   0          98s    10.48.2.22   gke-jordi-default-pool-6a478366-mw0p   <none>           <none>
ssd-monitor-n562r      1/1     Running       0          98s    10.48.0.25   gke-jordi-default-pool-08313642-c93c   <none>           <none>

레이블을 변경한 gke-jordi-default-pool-6a478366-mw0p에 속해있던 Daemon Set 생성 Pod인 ssd-monitor-lm6tm가 Terminating 된 것을 확인할 수 있다.

이상으로 정말 간단하지만 유용한 Daemon Set에 대하여 알아보았다.

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함