Static Pod
Static Pod
Static Pod는 API server가 관찰하지 않고 특정 노드의 kubelet 데몬이 직접 관리하는 Pod예요. 컨트롤 플레인(예: Deployment)이 관리하는 Pod와 달리, kubelet이 각 static Pod를 관찰하고 실패하면 재시작해요.
Static Pod는 항상 특정 노드의 하나의 kubelet에 바인딩돼요.
Static Pod의 주요 용도는 self-hosted 컨트롤 플레인을 실행하는 것이에요. 즉 kubelet으로 개별 컨트롤 플레인 컴포넌트를 감독하는 방식이죠. 예를 들어 kubeadm은 static Pod로 컨트롤 플레인 노드에서 kube-apiserver, kube-controller-manager, kube-scheduler, etcd를 실행해요.
참고: 클러스터가 컨트롤 플레인 컴포넌트를 Pod로 실행한다면 그 Pod들은 아마 static Pod일 거예요.
kube-system네임스페이스에서kubernetes.io/config.mirrorannotation으로 mirror Pod를 인식할 수 있어요.
Mirror Pod
kubelet은 각 static Pod에 대해 Kubernetes API server에 mirror Pod를 자동으로 만들려고 해요. 즉 노드에서 실행 중인 Pod가 API server에 보이지만, 거기서는 제어할 수 없어요. Pod 이름에는 앞에 하이픈이 붙은 노드 호스트네임이 접미사로 붙어요.
kubelet은 static Pod의 라벨을 mirror Pod에 전파해요. 그 라벨을 셀렉터로 평범하게 사용할 수 있어요.
kubectl로 API server에서 mirror Pod를 지우려고 해도 kubelet은 static Pod를 제거하지 않아요. kubelet이 mirror Pod를 다시 만들 거예요.
한계 (Limitations)
- static Pod의 spec은 ServiceAccount, ConfigMap, Secret 같은 다른 API 객체를 참조할 수 없어요.
- Static Pod는 ephemeral containers를 지원하지 않아요.
Static Pod vs DaemonSet
클러스터형 Kubernetes에서 static Pod로 모든 노드에 Pod를 실행한다면, 아마 DaemonSet을 사용해야 해요.
Static Pod는 컨트롤 플레인이 관리하지 않으므로 표준 Kubernetes 메커니즘으로 롤아웃·롤백·스케일할 수 없어요. DaemonSet은 이런 기능을 제공하며 노드 수준 워크로드를 실행하는 권장 방법이에요.
Static Pod는 API server가 사용 가능해지기 전에 kubelet이 시작하므로, 컨트롤 플레인 컴포넌트 부트스트래핑에 적합해요. DaemonSet은 실행 중인 컨트롤 플레인이 필요해요.