Static Pods
Static Pod
개념
- kube-apiserver, kube-scheduler, etcd 없이도 kubelet이 독립적으로 생성/관리 하는 Pod
- 즉, Kubernetes Control Plane의 지시 없이도 동작한다.
- 오직
Pod만 가능하다.Deployment,ReplicaSet,Service등은 Controller가 필요하므로 Static으로 생성이 불가능하다.
- 장점
Static Pod로 관리하는Pod들은 죽을 경우, 컨트롤플레인과 상관없이 자동으로 재시작된다. (kubelet이 상태를 지속적으로 확인하고 문제가 생기면 자동으로 재시작한다)- 컨테이너화된 환경을 사용하므로 격리, 이식성, 버전 관리 측면에서 일반 OS 서비스(예:
systemd)보다 유리하다.
Use-case: Control Plane
kube-apiserver,etcd,controller-manater등은Static Pod로 실행되어 Control Plane을 구축한다.- 확인 방법
kubectl get pod -n kube-system
- 확인 방법
- 실제로 Control Plane(Master Node)의
/etc/kubernetes/manifests를 들어가보면,etcd.yaml,kube-apiserver.yaml,kube-controller-manager.yaml,kube-scheduler.yaml이 존재하는 것을 볼 수 있다.
동작 방식
Kubelet
Podyaml을 실행하고자하는Node의 특정 디렉토리(/etc/kubernetes/manifests)에 두면kubelet이 자동으로 감지하여 실행한다.- 이 디렉토리를
Static Pod Manifest Directory라고 한다.
생성 과정
Static Pod Manifest Directory에 Yaml 파일을 넣는다.Kubelet이 주기적으로 해당 폴더를 스캔한다.Kubelet이Pod를 생성한다.
Pod가 죽으면Kubelet이 자동으로Pod를 재시작한다.- Yaml 파일 수정 ->
Pod재생성 - Yaml 파일 삭제 ->
Pod삭제
Static Pod 조작
스캔 폴더 변경
방법 1: Kubelet 실행 옵션에서 지정
sudo nano /etc/systemd/system/kubelet.service
...
--pod-manifest-path=/my-manifest-dir
...
방법 2: Kubelet 설정 파일에서 지정
sudo nano /var/lib/kubelet/config.yaml
staticPodPath: /my-manifest-dir
Static Pod 조회
docker ps
nerdctl ps
Kubelet이 직접containerd로Pod를 실행하므로 실행되고 있는Node에서 바로 확인 가능하다. (docker psornerdctl ps둘 중 하나 설치된 것으로 사용)Control Plane이 없는 환경에서는kubectl로 조회 불가능하다.
Kubernetes 클러스터 입장
Static Pod도kubectl get pods에서 보인다.Kubelet이Mirror Pod라는 오브젝트를kube-apiserver로 전송하고, 이를etcd에 기록한다. 이 때문에 조회되는 것이다.- 그렇게 때문에 읽기 전용이며,
kubectl로 수정/삭제가 불가능하다. - 수정/삭제하려면
Static Pod Manifest Directory에서 조작해야한다. - cf)
Mirror Pod는Pod이름 뒤에 자동으로 노드 이름이 붙는다.- ex:
etcd-node01
- ex:
Static Pod vs DaemonSet
| 기능 | Static Pod | DaemonSet |
|---|---|---|
| 관리 주체 | Kubelet | DaemonSet Controller |
| API Server 필요 | 불필요 | 필요 |
| Scheduler 영향 | 무시 | (1.12 이전)Pod는 스케쥴러를 거치지 않음 / (1.12 이후)스케줄러를 거친다. |
| 생성 방식 | manifest 디렉토리 | YAML → API Server 적용 |
| Mirror Pod 존재 | 생성됨 | 없음 |
| 사용 목적 예시 | Control Plane 구성 | 로그/모니터링/에이전트 등 데몬 배포 |
레퍼런스
- https://kubernetes.io/docs/tasks/configure-pod-container/static-pod/
- Udemy - Certified Kubernetes Administrator (CKA) with Practice Tests (Mumshad)