궁금한게 많은 개발자 노트

[ k8s ] Static Pod란 본문

DevOps

[ k8s ] Static Pod란

궁금한게 많은 개발자 2024. 1. 23. 23:46

쿠버네티스는 크게 Control Plane(Master node)과 Data plane에 속하는 Worker Node로 구성되어 있습니다.

 

Pod가 생성되는 과정을 통해 전반적인 구조를 살펴보면, kubectl을 통해 Master Node에 존재하는 kube-api server에게 Pod생성 요청을 보내고, api-server는 해당 요청이 타당한지 검증하게 됩니다.

검증 후 etcd에게 node들에 대한 정보를 요청하게 되고, 전달 받은 정보를 바탕으로 scheduler에게 생성하려는 Pod가 어떤 Workder 노드에 할당되면 좋을 지에 대해 선택을 요청합니다.
그러고 난 후 적절한 Worker Node의 kubelet에 해당 Pod 생성 명령을 내리게 되고, kubelet은 해당 Worker Node의 Container Engine에게 파드 생성을 요청합니다. 생성 후 실행된 정보를 kubelet에 보내고, kubelet은 해당 정보를 kube-api server에 보내고 api server는 etcd에 노드 업데이트 정보를 저장합니다. (아래 다이어그램 참고)

 

이러한 일반적인 Pod가 생성되는 과정과 달리 Static Pod는 어떻게 생성되고 무엇이 다를까요??

https://kubernetes.io/docs/tasks/configure-pod-container/static-pod/

 

Create static Pods

Static Pods are managed directly by the kubelet daemon on a specific node, without the API server observing them. Unlike Pods that are managed by the control plane (for example, a Deployment); instead, the kubelet watches each static Pod (and restarts it i

kubernetes.io

 

Static Pod는 첫째로 api server에 생성 요청을 보내지 않습니다. Worker Node에는 kubelet이라는 daemon이 존재합니다.

kubelet daemon에 의해 특정 경로에  pod.yaml을 생성하면 kubelet이 yaml file내용에 해당하는 pod를 생성하고, 해당 파일이 사라지거나 수정되면 Pod 삭제하고 업데이트합니다.
이렇게 API서버 없이 kubelet에 의해 직접 관리되는 Pod가 Static Pod니다.

 

kubelet이 지속적으로 확인하고 있는 staticPodPath는 default로 /etc/kubernetes/manifest/ 디렉토리입니다. Node마다 해당 경로가 다를 수 있으므로 kubelet의 config파일( /var/lib/kubelet/config.yaml)을 확인하면 정확히 알 수 있습니다.

 만약 /var/lib/kubelet/config.yaml파일을 변경할 경우,
변경 사항을 적용하기 위해서는 kubelet daemone을 재 실행해야 합니다.

# Run this command on the node where the kubelet is running
systemctl restart kubelet

 

 

예로써, Master Node의 StaticPodPath에는 etcd.yaml, kube-apiserver.yaml, kube-controller-manager.yaml, kube-scheduler.yaml이 존재합니다. 즉, kube-apiserver에 의존하지 않고 실행이 필요한 Master Node의 component들도 static pod로 존재하는 것을 알 수 있습니다.

만약 사용자가 Master Node의 StaticPodPath에 yaml파일을 추가할 경우에는 Master Node가 아닌 Worker Node중 하나에 static pod가 생성되는 것을 확인할 수 있습니다. 참고하면 좋을 내용이라 공유합니다. 😁👍

Comments