Static Pod

Static Pod는 Kubernetes 클러스터에서 kubelet에 의해 직접 관리되는 Pod이다.

 

API 서버를 통해 관리되는 일반적인 Pod와는 달리, Static Pod는 Kubernetes API 서버의 개입 없이 kubelet에 의해 직접 생성 및 관리된다.

 

특징:

  • Static Podcontrol plane의 일부(예: kube-apiserver, etcd, kube-scheduler 등)와 같은 중요 구성 요소를 실행하기 위해 주로 사용된다.
  • Pod 정의 파일이 직접 노드의 특정 경로(일반적으로 /etc/kubernetes/manifests/)에 저장되며, kubelet은 해당 경로를 지속적으로 모니터링하고 그 정의에 따라 Pod를 실행한다.
  • Static Podkube-apiserver와 같은 중앙 관리 서비스 없이도 노드에서 자동으로 실행됩니다. 즉, API 서버가 다운되더라도 Static Pod는 계속 실행된다.
  • Static Pod는 Deployment, ReplicaSet과 같은 리소스 관리 기능을 사용하지 않는다. 만약 Static Pod가 종료되면, kubelet이 이를 감지하고 다시 시작한다.
  • Static Pod가 실행 중일 때, kubelet은 해당 Pod에 대한 정보를 API 서버로 전달하며, 이를 통해 kube-apiserver에서 간접적으로 Static Pod의 상태를 확인할 수 있다.

 

Static Pod 정의 파일을 다른 경로에서 사용하는 방법:

 

1. Kubelet 실행 시 command 옵션 사용:

 

kubelet을 실행할 때, --pod-manifest-path 플래그를 사용하여 Static Pod의 정의 파일을 저장할 경로를 지정할 수 있다.

 

kubelet --pod-manifest-path=원하는 경로

 

이 경우 kubelet은 원하는 경로를 모니터링하여 그곳에 있는 정의 파일을 기반으로 Static Pod를 실행한다.

 

 

2. Kubelet 설정 파일 수정:

 

kubelet이 실행될 때 참조하는 설정 파일 /var/lib/kubelet/config.yaml 또는 /etc/kubernetes/kubelet.conf에서

 

podManifestPath 옵션을 설정하여 Static Pod 정의 파일을 읽을 경로를 변경할 수 있다.

 

$ cat /var/lib/kubelet/config.yaml
apiVersion: kubelet.config.k8s.io/v1beta1
kind: KubeletConfiguration
...
staticPodPath: /etc/kubernetes/manifests <- 원하는 경로로

 

Control Plane

Control Plane은 Kubernetes 클러스터에서 클러스터 전반을 관리하고 제어하는 중앙 관리 시스템이다.

 

Control Plane은 여러 컴포넌트로 구성되며, 이 컴포넌트들은 클러스터의 상태를 조정하고, desired state와 actual state가 일치하도록 만든다.

 

Control Plane 주요 component

 

  • kube-apiserver:
    • 클러스터의 중앙 통신 허브 역할
    • 모든 컴포넌트 및 사용자 요청이 API 서버를 통해 이루어지며, Kubernetes 클러스터와 상호작용하는 주요 진입점.
    • kubectl을 통해 클러스터에 명령을 내리거나 클러스터 상태를 조회할 때 모두 kube-apiserver를 거친다.
  • etcd:
    • Kubernetes의 분산 키-값 저장소 
    • 모든 클러스터 상태 정보(노드, Pod, 서비스, 설정 등)를 저장하는 곳이다.
    • Control Plane의 다른 컴포넌트들은 모두 etcd에서 데이터를 읽거나 수정하면서 클러스터의 상태를 유지 및 관리한다.
  • kube-scheduler:
    • 새로운 Pod가 생성되면, 이를 어느 노드에 할당할지 결정하는 역할을 한다.
    • 클러스터의 리소스 사용량을 고려하여, Pod를 적절한 노드에 배치하는 것이 주요 역할
  • kube-controller-manager:
    • 다양한 컨트롤러를 실행하여 클러스터의 상태를 유지하고 관리합니다. 각 컨트롤러는 클러스터의 상태를 모니터링하고, desired state에 맞게 조정하는 역할을 한다.
    • 예: ReplicaSet 컨트롤러, 노드 컨트롤러, Job 컨트롤러 등

 

 

Static Pod와 Control Plane의 관계:

Control Plane의 핵심 구성 요소들은 일반적으로 Static Pod로 실행되며 master node에 주로 배치된다.

 

즉, kube-apiserver, etcd, kube-scheduler와 같은 중요한 Control Plane 컴포넌트들이 Static Pod로 설정되어 있기 때문에, API 서버에 의존하지 않고도 실행 및 복구될 수 있다.

 

따라서 API 서버가 다운되거나 문제가 생겼을 때에도 클러스터가 완전히 멈추지 않도록 한다.

 

 

직접 Static Pod 생성해보기 

 

1. static-busybox.yaml 파일 작성 

 

kubectl run static-busybox --image=busybox:1.28.4 --dry-run=client -o yaml --command -- sleep 1000

 

apiVersion: v1
kind: Pod
metadata:
  creationTimestamp: null
  labels:
    run: static-busybox
  name: static-busybox
spec:
  containers:
  - command:
    - sleep
    - "1000"
    image: busybox:1.28.4
    name: static-busybox
    resources: {}
  dnsPolicy: ClusterFirst
  restartPolicy: Always
status: {}

 

 

2. /etc/kubernetes/manifests 하위로 yaml 파일 이동

 

mv /etc/kubernetes/manifests

 

 

3. 결과 확인 

 

 

요약:

  • Static Pod는 API 서버를 거치지 않고, 노드에서 직접 kubelet에 의해 실행되는 Pod이다. 주로 Control Plane 구성 요소를 실행하는 데 사용된다.
  • Control Plane은 Kubernetes 클러스터를 관리하는 중심부로, 클러스터의 상태를 조정하고 필요한 작업을 수행하는 여러 컴포넌트들로 이루어져 있다.
  • Control Plane의 주요 구성 요소인 kube-apiserver, etcd, kube-scheduler 등은 Static Pod로 실행되며, 클러스터의 가용성과 안정성을 보장한다.
  • Custom Static Pod를 사용하기 위해선 /etc/kubernetes/manifests/에 yaml 파일을 위치시키면 된다. 

'DevOps > Kubernetes' 카테고리의 다른 글

Kubernetes Metrics Server 구축  (0) 2024.10.20
Kubernetes 환경에서의 Monitoring  (3) 2024.10.20
Pod, Deployment 수정 시 유의사항  (0) 2024.10.17
CKA 명령형(Imperative) 명령어 팁  (1) 2024.10.16
CKA YAML 작성 팁  (0) 2024.10.15