Static Pod가 뭔가요?

작성자 김아름 수정일 2023-01-19 14:11

#kubernetes, #쿠버네티스, #pod, #파드, #static

들어가며

  • 사용자가 pod를 띄우면, 마스터의 API 서버를 통해 구동하게 됩니다.

  • API서버 도움 없이 pod를 띄울 순 없을까요?

  • 이번 장에서 static pod에 대해 알아보면 위 궁금증을 해결할 수 있습니다.



Static Pod란?

Static pod란 API서버 대신 노드의 kubelet 데몬에 의해 관리되는 pod 입니다.

대표적으로 etcd, api-server 등의 pod가 있습니다.


노드 kubelet의 설정 파일에서 static pod path값을 확인할 수 있습니다.

vi /var/lib/kubelet/config.yaml
apiVersion: kubelet.config.k8s.io/v1beta1
authentication:
  anonymous:
    enabled: false
  webhook:
    cacheTTL: 0s
    enabled: true
  x509:
    clientCAFile: /etc/kubernetes/pki/ca.crt
authorization:
  mode: Webhook
  webhook:
    cacheAuthorizedTTL: 0s
    cacheUnauthorizedTTL: 0s
clusterDNS:
- 10.96.0.10
clusterDomain: cluster.local
cpuManagerReconcilePeriod: 0s
evictionPressureTransitionPeriod: 0s
fileCheckFrequency: 0s
healthzBindAddress: 127.0.0.1
healthzPort: 10248
httpCheckFrequency: 0s
imageMinimumGCAge: 0s
kind: KubeletConfiguration
nodeStatusReportFrequency: 0s
nodeStatusUpdateFrequency: 0s
rotateCertificates: true
runtimeRequestTimeout: 0s
staticPodPath: /etc/kubernetes/manifests
streamingConnectionIdleTimeout: 0s
syncFrequency: 0s
volumeStatsAggPeriod: 0s

위 결과의 staticPodPath 값으로 이동하면 yaml파일들이 존재합니다.

cd /etc/kubernetes/manifests
ls -al
total 16
drwx------  2 root root  113 Jan 18 23:23 .
drwxr-xr-x. 4 root root  125 Jan 17 00:36 ..
-rw-------  1 root root 1858 Jan 17 00:39 etcd.yaml
-rw-------  1 root root 2713 Jan 16 18:28 kube-apiserver.yaml
-rw-------  1 root root 2581 Jan 16 18:28 kube-controller-manager.yaml
-rw-------  1 root root 1136 Jan 16 18:28 kube-scheduler.yaml


현재 kube-system 네임스페이스에 etcd, kube-apiserver, kube-controller-manager, kube-scheduler pod가 구동 중임을 확인할 수 있습니다.

kubectl get po -n kube-system -owide
NAME                                       READY   STATUS    RESTARTS   AGE    IP               NODE      NOMINATED NODE   READINESS GATES
etcd-master1                               1/1     Running   3          2d5h   192.168.50.161   master1   <none>           <none>
kube-apiserver-master1                     1/1     Running   4          2d5h   192.168.50.161   master1   <none>           <none>
kube-controller-manager-master1            1/1     Running   5          2d5h   192.168.50.161   master1   <none>           <none>
kube-scheduler-master1                     1/1     Running   5          2d5h   192.168.50.161   master1   <none>           <none>

해당 pod들은 delete pod 명령어를 수행하여도 kubelet은 static pod를 중지하지 않습니다.

static pod를 중지하는 방법은 yaml파일을 삭제해야 합니다.

vi /etc/kubernetes/manifests/static-pod.yaml
apiVersion: v1
kind: Pod
metadata:
  name: static-web
  labels:
    role: myrole
spec:
  containers:
    - name: web
      image: nginx:1.14
      ports:
        - name: web
          containerPort: 80
          protocol: TCP

kubectl get po -owide
NAME                 READY   STATUS    RESTARTS   AGE    IP           NODE      NOMINATED NODE   READINESS GATES
static-web-master1   1/1     Running   0          12s    6.2.137.68   master1   <none>           <none>

kubectl delete po static-web-master1
pod "static-web-master1" deleted

kubectl get po -owide -w
NAME                 READY   STATUS    RESTARTS   AGE    IP           NODE      NOMINATED NODE   READINESS GATES
static-web-master1   1/1     Running   0          12s    6.2.137.68   master1   <none>           <none>
static-web-master1   1/1     Terminating   0          33s    6.2.137.68   master1   <none>           <none>
static-web-master1   0/1     Pending       0          0s     <none>       master1   <none>           <none>
static-web-master1   1/1     Running       0          3s     6.2.137.68   master1   <none>           <none>




마무리

  • API 서버의 도움 없이 kubelet 데몬에 의해서 구동하는 static pod에 대해 알아보았습니다.

아티클이 유용했나요?

훌륭합니다!

피드백을 제공해 주셔서 감사합니다.

도움이 되지 못해 죄송합니다!

피드백을 제공해 주셔서 감사합니다.

아티클을 개선할 수 있는 방법을 알려주세요!

최소 하나의 이유를 선택하세요
CAPTCHA 확인이 필요합니다.

피드백 전송

소중한 의견을 수렴하여 아티클을 개선하도록 노력하겠습니다.

02-558-8300