2024. 12. 31. 16:42ㆍ쿠버네티스/쿠버네티스

Static Pod는 Kubernetes의 컨트롤 플레인 없이도 개별 노드에서 실행할 수 있는 Pod입니다. 이는 kubelet이 직접 관리하며, Kubernetes API 서버나 스케줄러의 개입 없이 작동합니다. 아래는 Static Pod에 대한 주요 개념, 작동 방식, 생성 방법, 그리고 사용 사례를 정리한 내용입니다.
Static Pod란?
- 독립적인 관리: Static Pod는 kubelet이 직접 관리하며, Kubernetes의 다른 컨트롤 플레인 구성 요소(API 서버, 스케줄러 등) 없이도 실행됩니다
- Pod 정의 파일 기반: Static Pod는 특정 디렉토리에 저장된 Pod 정의 파일을 기반으로 kubelet이 생성 및 관리합니다.
- Mirror Pod 생성: Static Pod가 생성되면, kubelet은 Kubernetes API 서버에 읽기 전용 Mirror Pod를 등록하여 클러스터 내에서 해당 Pod를 확인할 수 있도록 합니다
- 제한된 기능: Static Pod는 ReplicaSet, Deployment, Service와 같은 고급 Kubernetes 리소스를 지원하지 않습니다. 이는 kubelet이 Pod 수준에서만 작동하기 때문입니다
Static Pod의 주요 특징
- 디렉토리 기반 관리:
- kubelet은 설정된 디렉토리(예: /etc/kubernetes/manifests)를 주기적으로 확인하여 정의 파일을 읽고 Static Pod를 생성합니다.
- 파일이 추가되면 새로운 Pod가 생성되고, 파일이 삭제되면 해당 Pod도 삭제됩니다
- 자동 복구:
- Mirror Pod:
- Static Pod는 API 서버에 Mirror Pod로 등록되며, 이는 읽기 전용 상태로 클러스터 내에서 확인 가능합니다.
- Mirror Pod의 이름은 원래 이름 뒤에 노드 이름이 붙어 표시됩니다(예: static-web-node01)
- kubectl 명령어 제한:
- Static Pod는 API 서버를 통하지 않으므로 kubectl 명령어로 직접 제어할 수 없습니다.
- 대신 docker ps 또는 crictl ps 명령어로 상태를 확인해야 합니다
Static Pod 생성 방법
- Pod 정의 파일 준비:
YAML 형식으로 Static Pod의 정의 파일을 작성합니다.
apiVersion: v1
kind: Pod
metadata:
name: static-nginx
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:latest
ports:
- containerPort: 80
디렉토리에 배치:
정의 파일을 kubelet이 감시하는 디렉토리(예: /etc/kubernetes/manifests/)에 복사합니다.
sudo mv static-nginx.yaml /etc/kubernetes/manifests/
파일 수정 및 삭제:
- 정의 파일을 수정하면 kubelet이 자동으로 변경 사항을 반영하여 새로고침합니다.
- 정의 파일을 삭제하면 해당 Static Pod도 자동으로 삭제됩니다
Static Pod의 주요 사용 사례
- 컨트롤 플레인 구성 요소 배포:
- Kubernetes 클러스터의 초기화 시, API 서버, etcd, 컨트롤러 매니저와 같은 컨트롤 플레인 구성 요소를 Static Pod로 배포할 수 있습니다.
- 예를 들어, kubeadm 도구는 이러한 방식을 사용하여 클러스터를 설정합니다
- 독립적인 서비스 실행:
- 클러스터 외부에서 독립적으로 실행해야 하는 서비스(예: 네트워크 플러그인 또는 로깅 에이전트)를 배포할 때 유용합니다.
- 노드 수준 서비스 실행:
- 특정 노드에서만 실행되어야 하는 애플리케이션을 배포하는 데 적합합니다.

항목 | Static Pods | DaemonSets |
관리 주체 | kubelet (API 서버 없음) | DaemonSet 컨트롤러 (API 서버 필요) |
배포 방식 | 지정된 디렉토리에 정의 파일 배치 | API 서버를 통해 모든 적합한 노드에 배포 |
스케줄링 방식 | 스케줄러 비개입 (노드 고정) | 스케줄러가 노드 선택 |
사용 사례 | 컨트롤 플레인 구성 요소 배포 | 클러스터 전역 서비스 배포 (예: 모니터링 에이전트) |
kubectl 지원 여부 | 제한적 (Mirror Pod만 조회 가능) | 완전한 제어 가능 |
https://themapisto.tistory.com/135
https://www.kubeblog.com/basics/exploring-static-pods/
https://kubernetes.io/docs/tasks/configure-pod-container/static-pod/
https://www.geeksforgeeks.org/careate-static-pod-in-kubernetes/
https://www.geeksforgeeks.org/careate-static-pod-in-kubernetes/
https://kubernetes.io/docs/tasks/configure-pod-container/static-pod/
Kubelet의 config 옵션 및 Static Pod 관련 설정
Kubernetes에서 kubelet은 노드에서 Pod를 실행하고 관리하는 핵심 구성 요소입니다. config 옵션은 kubelet의 설정을 YAML 또는 JSON 파일로 정의하여 관리할 수 있도록 해줍니다. 이를 통해 명령줄 플래그 대신 설정을 간소화하고 노드 배포를 쉽게 관리할 수 있습니다. 또한, Static Pod와 관련된 설정도 이 파일을 통해 구성할 수 있습니다.
Kubelet의 config 옵션
1. config 파일 경로 확인
- kubelet의 설정 파일 경로는 kubelet 실행 시 사용된 명령줄 플래그에서 확인할 수 있습니다.
- 다음 명령어를 사용하여 경로를 찾을 수 있습니다:
ps -aux | grep kubelet | grep config.yaml
- 일반적으로 /var/lib/kubelet/config.yaml에 위치합니다.
2. config 파일 내용
- config 파일은 kubelet의 다양한 매개변수를 설정하는 데 사용됩니다. 아래는 예제입니다:
apiVersion: kubelet.config.k8s.io/v1beta1
kind: KubeletConfiguration
staticPodPath: "/etc/kubernetes/manifests"
syncFrequency: "1m0s"
fileCheckFrequency: "20s"
httpCheckFrequency: "20s"
address: "192.168.1.16"
port: 10250
readOnlyPort: 10255
tlsCertFile: "/var/lib/kubelet/pki/kubelet.crt"
tlsPrivateKeyFile: "/var/lib/kubelet/pki/kubelet.key"
rotateCertificates: true
evictionHard:
memory.available: "100Mi"
nodefs.available: "10%"
imagefs.available: "15%"
주요 필드 설명:
- staticPodPath: Static Pod 정의 파일이 저장될 디렉토리 경로를 지정합니다(기본값은 /etc/kubernetes/manifests).
- syncFrequency: kubelet이 상태를 동기화하는 주기를 정의합니다.
- fileCheckFrequency: Static Pod 디렉토리를 확인하는 주기를 설정합니다.
- evictionHard: 자원이 부족할 때 Pod를 제거하는 기준을 정의합니다.
3. Static Pod 설정
Static Pod는 API 서버 없이 kubelet이 직접 관리하는 Pod입니다. 이를 설정하려면 다음 단계를 따릅니다:
(1) Static Pod 디렉토리 확인:
- staticPodPath 값으로 지정된 디렉토리를 확인합니다(기본값은 /etc/kubernetes/manifests).
(2) Static Pod 정의 파일 생성:
- Static Pod 정의 파일을 해당 디렉토리에 생성합니다.
- 예제 YAML 파일:
apiVersion: v1
kind: Pod
metadata:
name: static-nginx
spec:
containers:
- name: nginx
image: nginx:latest
ports:
- containerPort: 80
(3) Static Pod 생성 및 관리:
- 정의 파일을 /etc/kubernetes/manifests/에 복사하면 kubelet이 이를 감지하고 자동으로 Static Pod를 생성합니다.
- 정의 파일 수정 시 변경 사항이 자동 반영되며, 삭제 시 해당 Static Pod도 삭제됩니다.
How many static pods exist in this cluster in all namespaces?
- 보통 노드 이름끝네 "노드이름"이 붙는다. 아래 예는 총 4개의 static pod 존재

Which of the below components is NOT deployed as a static pod?
- kube-apiserver
- coredns
- kube-controller-manager
- etcd
What is the path of the directory holding the static pod definition files?
- cat /var/lib/kubelet/config.yaml , staticPodPath부분보면 됨.
- /etc/kubernetes/manifests/
How many pod definition files are present in the manifests directory?
ls /etc/kubernetes/manifests/
etcd.yaml kube-apiserver.yaml kube-controller-manager.yaml kube-scheduler.yaml
What is the docker image used to deploy the kube-api server as a static pod?
- kubectl describe pod kube-apiserver-controlplane -n kube-system

Create a static pod named static-busybox that uses the busybox image and the command sleep 1000
kubectl run static-busybox --image=busybox --restart=Never --dry-run=client -o yaml --command -- sleep 1000 > static-busybox.yaml
cp static-busybox.yaml /etc/kubernetes/manifests/
kubectl get pod
NAME READY STATUS RESTARTS AGE
static-busybox-controlplane 1/1 Running 0 10s
Edit the image on the static pod to use busybox:1.28.4

We just created a new static pod named static-greenbox. Find it and delete it.
- rm /etc/kubernetes/manifests/static-busybox.yaml

함정이있군요 node1으로 가야함
kubectl get node -o wide
#ip주소 알아내면
ssh <ip주소>
cat /var/lib/kubelet/config.yaml
#staticPodPath 위치 확인

- rm /etc/just-to-mess-with-you/greenbox.yaml

'쿠버네티스 > 쿠버네티스' 카테고리의 다른 글
Scheduling-Configuring Scheduler Profiles (1) | 2025.01.01 |
---|---|
Scheduling-Multiple Schedulers (1) | 2024.12.31 |
Scheduling-DaemonSets (0) | 2024.12.31 |
Scheduling-Resource Requirements and Limits (0) | 2024.12.31 |
Scheduling-Node Selectors-Node Affinity (0) | 2024.12.31 |