Kubernetes의 Static Pod는 Kubelet이 직접 관리하는 특수한 유형의 Pod입니다. 일반적으로 Kubernetes는 API 서버를 통해 Pod를 관리하지만, Static Pod는 Kubelet이 지정된 디렉토리에서 직접 YAML 파일을 읽어들여 실행합니다. 이 방식은 Kubernetes 클러스터에서 API 서버와 상관없이 중요한 컴포넌트를 직접 실행하거나 관리할 때 사용됩니다.
다시 말해, Static Pod는 API 서버가 아닌 Kubelet에 의해 관리되며, 주로 마스터 노드에서 중요한 시스템 컴포넌트 (예: etcd, kube-apiserver, kube-controller-manager, kube-scheduler)를 실행하는 데 사용됩니다.
kubectl 명령어로 Static Pod를 조작할 수 없습니다.etcd, kube-apiserver, kube-controller-manager, kube-scheduler는 모두 Static Pod로 실행됩니다. 이러한 구성 요소는 Kubernetes 클러스터의 중심이기 때문에, API 서버에 의존하지 않고 관리할 수 있어야 합니다.kubectl 명령어로 상태를 확인할 수 있지만, 수정하거나 삭제할 수 없습니다.Static Pod를 생성하려면 Kubelet이 Pod 정의 파일을 읽을 수 있는 경로에 YAML 파일을 저장해야 합니다. Kubelet은 --pod-manifest-path 플래그를 사용하여 이 경로를 지정합니다.
Kubelet에 Static Pod 경로 설정
Kubelet이 실행될 때 --pod-manifest-path 플래그를 사용하여 Pod 정의 파일 경로를 지정합니다. 예를 들어:
kubelet --pod-manifest-path=/etc/kubernetes/manifests
Static Pod YAML 파일 생성
아래 예시처럼 Static Pod를 정의하는 YAML 파일을 생성하고, 위에서 지정한 경로 (/etc/kubernetes/manifests)에 저장합니다.
apiVersion: v1
kind: Pod
metadata:
name: static-nginx
spec:
containers:
- name: nginx
image: nginx
ports:
- containerPort: 80
Kubelet이 Static Pod 실행
Kubelet은 --pod-manifest-path로 지정된 디렉토리에서 파일을 모니터링하고, 해당 경로에 새로운 파일이 저장되면 자동으로 Pod를 실행합니다.
Mirror Pod 확인
Static Pod는 kubectl 명령어로 수정하거나 삭제할 수 없지만, 해당 Pod의 상태를 확인할 수 있는 Mirror Pod는 확인할 수 있습니다.
kubectl get pods
| 특징 | Static Pod | 일반 Pod |
|---|---|---|
| 관리 주체 | Kubelet (API 서버와 무관) | Kubernetes API 서버 |
| Pod 정의 위치 | 로컬 파일 시스템 (Kubelet의 --pod-manifest-path) | etcd (Kubernetes 클러스터 내부 저장소) |
| API 서버 통합 여부 | Mirror Pod를 통해 상태만 통합 | API 서버에서 직접 관리 |
| 생성, 수정, 삭제 방법 | 파일 수정 후 Kubelet이 감지하고 반영 | kubectl 명령어로 생성, 수정, 삭제 가능 |
| 적용 대상 | 특정 노드에서만 실행 | 모든 노드에 스케줄링 가능 |
kube-apiserver, etcd, kube-scheduler 등은 Static Pod로 실행됩니다.다음 실습을 통해 Static Pod를 직접 생성해보고 동작을 확인해보세요.
Kubelet에 Static Pod 경로 설정
먼저, Kubelet이 Static Pod를 관리할 경로를 설정합니다. /etc/kubernetes/manifests 경로에 Static Pod 정의 파일을 저장하도록 설정합니다.
kubelet --pod-manifest-path=/etc/kubernetes/manifests
Static Pod 정의 파일 생성
다음과 같이 Static Pod를 정의하는 YAML 파일을 /etc/kubernetes/manifests/static-nginx.yaml 경로에 저장합니다.
apiVersion: v1
kind: Pod
metadata:
name: static-nginx
spec:
containers:
- name: nginx
image: nginx
ports:
- containerPort: 80
Pod 실행 확인
kubectl 명령어로 실행 중인 Mirror Pod를 확인합니다. Mirror Pod는 Static Pod의 상태를 API 서버에 반영한 것입니다.
kubectl get pods
Pod 수정 및 반영
Static Pod의 정의를 수정하려면 /etc/kubernetes/manifests/static-nginx.yaml 파일을 직접 수정해야 합니다. 수정 후 Kubelet이 자동으로 변경 사항을 감지하여 Pod를 재실행합니다.
Static Pod는 Kubelet이 관리하므로 kubectl delete 명령어로 삭제할 수 없습니다. 대신, /etc/kubernetes/manifests/static-nginx.yaml 파일을 삭제하여 Pod를 중지시킵니다.
rm /etc/kubernetes/manifests/static-nginx.yaml
이후 다시 kubectl 명령어로 Mirror Pod가 삭제되었는지 확인하세요.
kubectl get pods