안녕하세요, 쯀리입니다.
오늘은 특별한 유형의 Pod인 Static Pods에 관해 알아보겠습니다.
https://kubernetes.io/docs/tasks/configure-pod-container/static-pod/
Static Pods란?
일반적인 Pod와 달리, Static Pods는 쿠버네티스 API 서버에 의해 관리되지 않고, 특정 노드의 kubelet에 의해 직접 관리됩니다. Static Pods는 주로 쿠버네티스 클러스터의 구성 요소를 실행하는 데 사용되며, 다음과 같은 특징이 있습니다:
1. 노드별로 구성됨: Static Pods는 각 노드의 kubelet에 의해 실행되며, 각 노드에 개별적으로 구성됩니다. 이로 인해 특정 노드에서만 실행되도록 설정할 수 있습니다.
2. 매니페스트 파일로 정의됨: Static Pods는 /etc/kubernetes/manifests 디렉토리나 kubelet의 --pod-manifest-path 옵션으로 지정된 디렉토리에 있는 YAML 파일로 정의됩니다. kubelet은 이 디렉토리를 주기적으로 스캔하여 정의된 Pod를 실행하거나 업데이트합니다.
3. 자체 복구: kubelet은 Static Pod가 비정상적으로 종료될 경우 자동으로 재시작합니다. 하지만, 쿠버네티스 API 서버는 이러한 Pod의 상태를 인지하지 못하므로, 클러스터 전체 관점에서의 관리나 스케줄링은 어렵습니다.
4. 제한된 관리: Static Pods는 쿠버네티스의 일반적인 Pod 관리 기능을 사용할 수 없습니다. 예를 들어, Deployment나 ReplicaSet을 통해 스케일링하거나 롤아웃 전략을 적용할 수 없습니다.
5. 파드 메타데이터: kubelet은 Static Pod에 대한 메타데이터를 쿠버네티스 API 서버에 등록하여, kubectl get pods 명령어를 통해 상태를 확인할 수 있게 합니다.
Quiz
1. How many static pods exist in this cluster in all namespaces?
보통 static pods는 /etc/kubernetes/manifests에 위치해 있기때문에 해당 위치에 메니페스트 파일이 몇개가있는지 확인해보겠습니다.
ls /etc/kubernetes/manifests
4개
2. Which of the below components is NOT deployed as a static pod?
존재하는 manifest파일:
etcd.yaml
kube-controller-manager.yaml
kube-apiserver.yaml
kube-scheduler.yaml
이중 해당되는 것이 아닌것은 coredns입니다.
3. Which of the below components is NOT deployed as a static POD?
etcd.yaml
kube-controller-manager.yaml
kube-apiserver.yaml
kube-scheduler.yaml
이중 해당되는 것이 아닌것은 kubeproxy입니다.
4. On which nodes are the static pods created currently?
가장 최근에 생성된 노드는 node01이지만 Static Pods로 생성된 것이 아니기 때문에
Static Pods중에 가장 최근에 생성된 노드는 controlplane입니다..
controlplane /etc/kubernetes/manifests ➜ k get pods -A -o wide
NAMESPACE NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
kube-flannel kube-flannel-ds-774bx 1/1 Running 0 23m 192.19.155.3 node01 <none> <none>
kube-flannel kube-flannel-ds-n6znd 1/1 Running 0 24m 192.19.155.10 controlplane <none> <none>
kube-system coredns-768b85b76f-gnj7n 1/1 Running 0 24m 10.244.0.2 controlplane <none> <none>
kube-system coredns-768b85b76f-kz9b5 1/1 Running 0 24m 10.244.0.3 controlplane <none> <none>
kube-system etcd-controlplane 1/1 Running 0 24m 192.19.155.10 controlplane <none> <none>
kube-system kube-apiserver-controlplane 1/1 Running 0 24m 192.19.155.10 controlplane <none> <none>
kube-system kube-controller-manager-controlplane 1/1 Running 0 24m 192.19.155.10 controlplane <none> <none>
kube-system kube-proxy-pt9jr 1/1 Running 0 23m 192.19.155.3 node01 <none> <none>
kube-system kube-proxy-r9lsz 1/1 Running 0 24m 192.19.155.10 controlplane <none> <none>
kube-system kube-scheduler-controlplane 1/1 Running 0 24m 192.19.155.10 controlplane <none> <none>
5. What is the path of the directory holding the static pod definition files?
정답: /etc/kubernetes/manifests
6. How many pod definition files are present in the manifests directory?
4개
7. What is the docker image used to deploy the kube-api server as a static pod?
controlplane ~ $ k get pods -A
kube-system kube-apiserver-controlplane 1/1 Running 0 29m
controlplane ~ $ k describe pods kube-apiserver-controlplane -nkube-system
registry.k8s.io/kube-apiserver:v1.30.0
8. Create a static pod named static-busybox that uses the busybox image and the command sleep 1000
busybox.yaml을 생성해줍니다.
apiVersion: v1
kind: Pod
metadata:
name: static-busybox
spec:
containers:
- name: static-busybox
image: busybox
controlplane ~ ➜ mv busyboy.yaml /etc/kubernetes/manifests/
controlplane ~ ➜ sleep 1000
9. Edit the image on the static pod to use busybox:1.28.4
/etc/kubernetes/manifests 에 있는 busybox yaml파일에서 image를 수정해줍니다.
systemctl restart kubelet
10. We just created a new static pod named static-greenbox. Find it and delete it.
This question is a bit tricky. But if you use the knowledge you gained in the previous questions in this lab, you should be able to find the answer to it.
controlplane ~ ✖ k get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
static-busybox-controlplane 0/1 CrashLoopBackOff 6 (61s ago) 6m42s 10.244.0.5 controlplane <none> <none>
static-greenbox-node01 1/1 Running 0 4m37s 10.244.1.2 node01 <none> <none>
controlplane ~ ➜ ssh node01
Last login: Sun Jun 23 13:28:38 2024 from 192.19.155.11
node01 ~ ➜ ps -ef | grep /usr/bin/kubelet
root 16254 1 0 13:24 ? 00:00:04 /usr/bin/kubelet --bootstrap-kubeconfig=/etc/kubernetes/bootstrap-kubelet.conf --kubeconfig=/etc/kubernetes/kubelet.conf --config=/var/lib/kubelet/config.yaml --container-runtime-endpoint=unix:///var/run/containerd/containerd.sock --pod-infra-container-image=registry.k8s.io/pause:3.9
root 19255 19053 0 13:30 pts/1 00:00:00 grep /usr/bin/kubelet
node01 ~ ➜ grep -i staticpod /var/lib/kubelet/config.yaml
staticPodPath: /etc/just-to-mess-with-you
node01 ~ ➜ cd /etc/just-to-mess-with-you/
node01 /etc/just-to-mess-with-you ➜ ls
greenbox.yaml
node01 /etc/just-to-mess-with-you ➜ rm -rf greenbox.yaml
node01 /etc/just-to-mess-with-you ➜ exit
controlplane ~ ➜ k get pods
NAME READY STATUS RESTARTS AGE
static-busybox-controlplane 0/1 CrashLoopBackOff 6 (3m5s ago) 8m46s
마지막 문제가 조금 까다로웠지만, 해당 URL 에도 정확하게 예시가 있네요.
Doc를 읽어보는 연습이 필요할 것 같네요.
https://kubernetes.io/ko/docs/tasks/configure-pod-container/static-pod/
참조
※ Udemy Labs - Certified Kubernetes Administrator with Practice Tests
'IT 잡지식 > DevOps' 카테고리의 다른 글
[CKA] KodeKloud - Monitor Cluster Components (0) | 2024.06.23 |
---|---|
[CKA] KodeKloud - Multiple Schedulers (0) | 2024.06.23 |
[CKA] KodeKloud - DaemonSets (0) | 2024.06.09 |
[CKA] KodeKloud -Resource Limits (0) | 2024.06.09 |
[CKA] KodeKloud -Node Affinity (0) | 2024.06.08 |