이 내용은 아래 공식문서를 기반으로 작성 함
https://kubernetes.io/docs/tasks/configure-pod-container/static-pod/
Static Pods란?
- Static Pod란 API 서버가 관찰하지 않고 특정 노드의 kubelet 데몬에 의해 직접 관리되는 pod
- kubelet은 static pod를 감시하고, 실패하면 재기동 수행
- static pod는 항상 특정 한 노드 kubelet에 바인딩 됨
- kubelet은 각 정적 포드에 대하여 kubernetes API 서버에 미러 pod를 자동으로 생성하려 시도
- 노드에서 실행되는 pod는 API 서버에서 볼 수 있지만 제어는 불가능
- static pod의 이름은 접미사로 노드 호스트 이름이 붙음
Static Pods 생성
1. Filesystem-hosted static Pod manifest
- manifests는 특정 디렉토리에 있는 JSON 또는 YAML 형식의 표준 pod 정의
- kubelet config 파일에서 staticPodPath 필드를 사용
- Kubernetes는 주기적으로 디렉토리르 스캔하고 YAML/JSON 나타나거나 삭제할 때 static pod를 생성/삭제 수행
- kubelet은 지정된 디렉토리를 스캔할 때 .(점)으로 시작하는 파일은 무시함
1) static pod를 생성할 node 선택
# ssh w2-k8s
2) staticPodPath 확인
- /var/lib/kubelet/config.yaml 에서 staticPodPath를 확인
# cat /var/lib/kubelet/config.yaml
apiVersion: kubelet.config.k8s.io/v1beta1
....
staticPodPath: /etc/kubernetes/manifests
....
volumeStatsAggPeriod: 0s
3) /etc/kubernetes/manifests 내 pod 생성
cat <<EOF >/etc/kubernetes/manifests/static-web.yaml
apiVersion: v1
kind: Pod
metadata:
name: static-web
labels:
role: myrole
spec:
containers:
- name: web
image: nginx
ports:
- name: web
containerPort: 80
protocol: TCP
EOF
4) pod 확인
- yaml 파일만 넣어두더라도 pod 자동 생성
- static-web 뒤에 w2-k8s는 필자의 테스트 서버 호스트 명
# kubectl get pod -A
NAMESPACE NAME READY STATUS RESTARTS AGE
default static-web-w2-k8s 1/1 Running 0 27s
Observe static pod behavior
- kubelet이 시작되면 정의된 모든 static od가 자동 실행
- static pod를 정의하고 kubelet을 다시 시작햇으므로 모든 새 static pod가 이미 수행 중어야 함
- static pod가 수행중인 서버에서 crictl 명령어를 수행하면 kubelet 제어를 함
# crictl ps
WARN[0000] runtime connect using default endpoints: [unix:///var/run/dockershim.sock unix:///run/containerd/containerd.sock unix:///run/crio/crio.sock unix:///var/run/cri-dockerd.sock]. As the default settings are now deprecated, you should set the endpoint instead.
WARN[0000] image connect using default endpoints: [unix:///var/run/dockershim.sock unix:///run/containerd/containerd.sock unix:///run/crio/crio.sock unix:///var/run/cri-dockerd.sock]. As the default settings are now deprecated, you should set the endpoint instead.
CONTAINER IMAGE CREATED STATE NAME ATTEMPT POD ID POD
d1ec5313509ed docker.io/nginx@sha256:943c25b4b66b332184d5ba6bb18234273551593016c0e0ae906bab111548239f 2 minutes ago Running web 0 6bd8649b74e52 static-web-w2-k8s
- API 서버를 활용하는 관점에서 kubectl 로 static pod를 삭제하더라도, yaml 파일이 사라진 것이 아니기에 삭제되지 않음
[root@m-k8s vagrant]# kubectl delete pod static-web-w2-k8s
pod "static-web-w2-k8s" deleted
[root@m-k8s vagrant]# kubectl get pod -A
NAMESPACE NAME READY STATUS RESTARTS AGE
default static-web-w2-k8s 0/1 Pending 0 2s
Dynamic addition and removal of static pods
- /etc/kubernetes/manifests 내 yaml 파일의 이동에 따라 static pod가 삭제되고 생성됨을 확인함
# mv /etc/kubernetes/manifests/static-web.yaml /tmp
# sleep 20
# crictl ps
WARN[0000] runtime connect using default endpoints: [unix:///var/run/dockershim.sock unix:///run/containerd/containerd.sock unix:///run/crio/crio.sock unix:///var/run/cri-dockerd.sock]. As the default settings are now deprecated, you should set the endpoint instead.
WARN[0000] image connect using default endpoints: [unix:///var/run/dockershim.sock unix:///run/containerd/containerd.sock unix:///run/crio/crio.sock unix:///var/run/cri-dockerd.sock]. As the default settings are now deprecated, you should set the endpoint instead.
CONTAINER IMAGE CREATED STATE NAME ATTEMPT POD ID POD
# mv /tmp/static-web.yaml /etc/kubernetes/manifests/
# sleep 20
# crictl ps
WARN[0000] runtime connect using default endpoints: [unix:///var/run/dockershim.sock unix:///run/containerd/containerd.sock unix:///run/crio/crio.sock unix:///var/run/cri-dockerd.sock]. As the default settings are now deprecated, you should set the endpoint instead.
WARN[0000] image connect using default endpoints: [unix:///var/run/dockershim.sock unix:///run/containerd/containerd.sock unix:///run/crio/crio.sock unix:///var/run/cri-dockerd.sock]. As the default settings are now deprecated, you should set the endpoint instead.
CONTAINER IMAGE CREATED STATE NAME ATTEMPT POD ID POD
9e409fa993ea9 docker.io/nginx@sha256:943c25b4b66b332184d5ba6bb18234273551593016c0e0ae906bab111548239f 29 seconds ago Running web 0 7c932733da3f4 static-web-w2-k8s
'kubernetes' 카테고리의 다른 글
[kubernetes] pod란? (0) | 2022.10.26 |
---|---|
[kubernetes] namespace 란? (0) | 2022.10.21 |
[kubernetes] etcd 및 백업 복구 방법 (0) | 2022.10.21 |
[kubernetes] kubernertes Component (0) | 2022.10.21 |