본문으로 건너뛰기

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

  • Pod yaml을 실행하고자하는 Node의 특정 디렉토리(/etc/kubernetes/manifests)에 두면 kubelet이 자동으로 감지하여 실행한다.
  • 이 디렉토리를 Static Pod Manifest Directory라고 한다.

생성 과정

  1. Static Pod Manifest Directory에 Yaml 파일을 넣는다.
  2. Kubelet이 주기적으로 해당 폴더를 스캔한다.
  3. KubeletPod를 생성한다.
  • 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이 직접 containerdPod를 실행하므로 실행되고 있는 Node에서 바로 확인 가능하다. (docker ps or nerdctl ps 둘 중 하나 설치된 것으로 사용)
  • Control Plane이 없는 환경에서는 kubectl로 조회 불가능하다.

Kubernetes 클러스터 입장

  • Static Podkubectl get pods에서 보인다.
    • KubeletMirror Pod라는 오브젝트를 kube-apiserver로 전송하고, 이를 etcd에 기록한다. 이 때문에 조회되는 것이다.
    • 그렇게 때문에 읽기 전용이며,kubectl로 수정/삭제가 불가능하다.
    • 수정/삭제하려면 Static Pod Manifest Directory에서 조작해야한다.
    • cf) Mirror PodPod 이름 뒤에 자동으로 노드 이름이 붙는다.
      • ex: etcd-node01

Static Pod vs DaemonSet

기능Static PodDaemonSet
관리 주체KubeletDaemonSet Controller
API Server 필요불필요필요
Scheduler 영향무시(1.12 이전)Pod는 스케쥴러를 거치지 않음 / (1.12 이후)스케줄러를 거친다.
생성 방식manifest 디렉토리YAML → API Server 적용
Mirror Pod 존재생성됨없음
사용 목적 예시Control Plane 구성로그/모니터링/에이전트 등 데몬 배포

레퍼런스