기술 이모저모/[K8s] Kubernetes

[k8s] Kubernetes DaemonSet vs StaticPod 개념[2/2]

Kobby 2022. 10. 22. 15:42

앞장에서 DaemonSet에 대해서 알아보았다. 그렇다면 이번에는 StaticPod에 대해서 알아보자!

 

먼저 StaticPod란 무엇일까?

Docs에 기재되어 있느 내용을 인용하면 Kubernetes API 서버없이 Kubelet 데몬에 의해 직접 관리하며, Node에 필수로 설치하는 Pod을 배포하기 위한 방법으로 설명되어 있다.

 

Kubelet 데몬에 의해 직접 관리의 의미는 일반적은 Kubernetes 구조와는 다르다는것을 의미한다.  일반적은 구조는 사용자가 어떤 명령을 하면 이를 API Server에서 모두 취합하여 명령을 내린다. API Server는 사람으로치면 두뇌의 역할을 한다. 그렇기에 API Server에 장애가 발생하면 Pod 배포가 되지 않는다.

Kubernetes 구조

 

근데 StaticPod는 API Server를 거치지 않고, 각 Node에 존재하는 Kubelet 데몬에 의해 직접 관리/운영 된다.

이말을 달리말하면 다른 Node가 어떤 상태가 되던지/나의 Node만 무사하다면 Static Pod는 문제가 없다는뜻이다.

 

그렇다면 StaticPod는 어떻게 생성할까?

StaticPod도 결국에는 Pod이다. 그렇기에 생성하는 yaml 파일은 여느 pod 만드는 방법과 동일하다. 다만, 차이점이 있다면 yaml 파일을 특정 위치(StaticPodPath)에 저장해야한다는것이다.

 

위에서 StaticPod는 Kubelet에서 관리하고 있듯이 kubelet 데몬의 --config 파일에 StaticPod의 경로가 저장되어 있다.

kubelet config

 

아래와 같이 config.yaml을 보면 staticPodPath가 있다.

사용자가 별도로 수정하지 않는다면 Default 값은 /etc/kubernetes/manifests 이다. 하지만 이는 수정이 가능한점을 유의해야 한다.

cat /var/lib/kubelet/config.yaml

apiVersion: kubelet.config.k8s.io/v1beta1
'''
staticPodPath: /etc/kubernetes/manifests
'''

 

그리고 controlplane Node의 경우 일반적으로 아래의 pod가 StaticPod로 잡혀있다.

StaticPod 모습

 

StaticPod을 만들어보자!

만드는건 어렵지 않다. StaticpodPath 경로에 내가 생성할 StaticPod의 yaml 파일을 위치시키면 된다.

StaticPod 모습

일반적으로 Pod를 만들면 PodName-임의의값으로 생성되는 반면에 StaticPod은 PodName-Node로 생성된다.

이는 DaemonSet와 Pod 명명 형태가 동일하다. 하지만 모든 Node에 Pod를 생성하는것이 아니라, 각 Node별로 Kubelet 데몬이 별도로 존재하고, StaticPodPath 또한 별도로 존재하기 때문에 yaml을 생성한 Node에만 Pod이 배포된다. DaemonSet과의 차이점이다.

 

그렇다면 StaticPod를 삭제하면 어떻게될까?

Pod를 바로 삭제했으나, StaticPod 답에 바로 재생성이 된다. 이는 DaemonSet과의 공통점이다.

StaticPod 재생성

 

하지만, 그렇다고 삭제 방법이 없는것은 아니다. StaticPod의 삭제 방법은 StaticPodPath에서 yaml을 삭제하면 된다.

StaticPod 삭제

 

DaemonSet vs StaticPod 비교분석

DaemonSet과 StaticPod의 결과만 놓고보면 Node에 반드시 설치해야하는 Pod을 배포하기 위한 서비스이나, 배포 방안/ Pod 개수 등의면에서는 차이점이 있다. 특히, Pod 배포 방법과 Pod 개수가 가장 큰 차이점이다.

  DaemonSet StaticPod 비고
Pod Name PodName-node PodName-node  
Pod 배포 방법 Kubernetes API Server 사용 Kubelet 데몬 사용  
Pod 생성 방법 DaemonSet 생성 StaticPodPath 경로의 yaml 생성  
Pod 개수 Node 수만큼 생성
 - 각 노드마다 1개씩 Pod 생성
1개
- StaticPod node만 배포
가장 큰 차이점이다.
Pod 삭제 방법 DeamonSet을 삭제 StaticPodPath 경로의 yaml 삭제  
Pod 임의 삭제 시, 동작 Pod 재생성 Pod 재생성  

 

끝!!!