본문 바로가기

⭐ Kubernetes & EKS/데몬셋 (DaemonSet)

데몬셋의 개념 및 조회하기 (pod edit)

# 데몬셋의 개념

데몬셋(Daemonset) 이란?

데몬셋은 디플로이먼트와 유사하게 파드를 생성하고 관리 한다. 디플로이먼트는 롤링 업데이트나 배포 일시 중지, 재개 등 배포 작업을 좀 더 세분화하여 조작하였다면, 데몬셋은 특정 노드 또는 모든 노드에 항상 실행되어야 할 특정 파드를 관리 한다.
하나의 예를 들자면 모니터링 시스템 구축을 위해 모든 노드에 특정 파드(로그 수집용)를 관리해야 할 때 사용할 수 있다. 모니터링 시스템을 원활히 사용하기 위해선 모든 노드에 항상 로그를 수집할 무언가가 필요하기 때문이다. 특정 노드를 지정하여 사용할수도 있다.

 

데몬셋 생성 및 확인

apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: elasticsearch
  namespace: kube-system
  labels:
    k8s-app: logging
spec:
  selector:
    matchLabels:
      name: elasticsearch
  updateStrategy:
    type: RollingUpdate
  template:
    metadata:
      labels:
        name: elasticsearch
    spec:
      containers:
      - name: container-elasticsearch
        image: quay.io/fluentd_elasticsearch/fluentd:v2.5.2
        resources:
          limits:
            memory: 200Mi
          requests:
            cpu: 100m
            memory: 200Mi
      terminationGracePeriodSeconds: 30

apiVersion apps/v1: 쿠버네티스의 apps/v1 API를 사용 한다.

kind: DaemonSet: DaemonSet의 작업으로 명시 한다.

metadata.name: DaemonSet의 이름을 설정 한다.

metadata.namespace: 네임스페이스를 지정 한다. kube-system은 쿠버네티스 시스템에서 직접 관리하며 보통 설정 또는 관리용 파드를 설정한다.

metadata.labels: DaemonSet를 식별할 수 있는 레이블을 지정 한다.

spec.selector.matchLabels: 어떤 레이블의 파드를 선택하여 관리할 지 설정 한다.

spec.updateStrategy.type: 업데이트 방식을 설정 한다. 이 코드에서는 롤링 업데이트로 설정 돼었으며 OnDelete 등의 방식으로 변경이 가능 하다. 롤링 업데이트는 설정 변경하면 이전 파드를 삭제하고 새로운 파드를 생성 한다.

spec.template.metadata.labels.name: 생성할 파드의 레이블을 파드명: "" 으로 지정 한다.

spec.template.spec.containers: 하위 옵션들은 컨테이너의 이름, 이미지, 메모리와 CPU의 자원 할당 한다.

terminationGracePeriodSeconds 30  :기본적으로 kubelet에서 파드에 SIGTERM을 보낸 후 일정 시간동안 graceful shutdown이 되지 않는다면 SIGKILL을 보내서 파드를 강제 종료 하게 된다. 이 옵션은 그레이스풀 셧다운 대기 시간을 30초로 지정하여 30초 동안 정상적으로 종료되지 않을 경우 SIGKILL을 보내서 강제 종료 시킨다.

 

네임스페이스를 따로 지정 했으므로 kubectl get daemonset,pods -n kube-system 으로 조회할 수 있다.

n 옵션은 네임스페이스를 따로 지정하고 정보를 불러 온다.

kubectl get daemonset,pods -n kube-system
$ kubectl get daemonset,pods -n kube-system
NAME                        DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR   AGE
daemonset.apps/aws-node     3         3         3       3            3           <none>          16d
daemonset.apps/kube-proxy   3         3         3       3            3           <none>          16d

NAME                                                READY   STATUS    RESTARTS   AGE
pod/aws-load-balancer-controller-7cbb976bcf-mmrpq   1/1     Running   0          3h56m
pod/aws-node-m2mgz                                  1/1     Running   0          3h44m
pod/aws-node-m4xxd                                  1/1     Running   0          3h44m
pod/aws-node-rdgjk                                  1/1     Running   0          3h44m
pod/coredns-556f6dffc4-q5t2c                        1/1     Running   0          3h56m
pod/coredns-556f6dffc4-zw9g4                        1/1     Running   0          3h56m
pod/kube-proxy-2nz2h                                1/1     Running   0          3h44m
pod/kube-proxy-6h6dv                                1/1     Running   0          3h44m
pod/kube-proxy-md5j9                                1/1     Running   0          3h44m

# pod의 상세 정보를 확인하고 edit(수정) 하기

kubectl edit pods [pod_name] -n [namespaces_name]

- 예제는 아래와 같다.
kubectl edit pods alb-5746859488-4s94q -n kube-system

# 데몬셋 내용을 업데이트 하기

kubectl edit pods [pod_name] -n [namespaces_name] 입력한 뒤 내용을 변경하고, 저장하면 롤링 업데이트 방식이 적용되어 있으면 기존 파드를 삭제하고 새로운 파드를 생성한다.

- 끝 -