본문 바로가기
IT 잡지식/DevOps

[CKA] KodeKloud - Static PODs

by 쯀리♥️ 2024. 6. 23.

 

 

안녕하세요, 쯀리입니다.

오늘은 특별한 유형의 Pod인 Static Pods에 관해 알아보겠습니다. 

https://kubernetes.io/docs/tasks/configure-pod-container/static-pod/

 

Create static Pods

Static Pods are managed directly by the kubelet daemon on a specific node, without the API server observing them. Unlike Pods that are managed by the control plane (for example, a Deployment); instead, the kubelet watches each static Pod (and restarts it i

kubernetes.io

 


 

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/

 

스태틱(static) 파드 생성하기

스태틱 파드 는 API 서버 없이 특정 노드에 있는 kubelet 데몬에 의해 직접 관리된다. 컨트롤 플레인에 의해 관리되는 파드(예를 들어 디플로이먼트(Deployment))와는 달리, kubelet 이 각각의 스태틱 파

kubernetes.io

 

 


참조

 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