들어가며
- 사용자가 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에 대해 알아보았습니다.
아티클이 유용했나요?
훌륭합니다!
피드백을 제공해 주셔서 감사합니다.
도움이 되지 못해 죄송합니다!
피드백을 제공해 주셔서 감사합니다.
피드백 전송
소중한 의견을 수렴하여 아티클을 개선하도록 노력하겠습니다.