본문 바로가기

kubernetes

[kubernetes] static pod란

이 내용은 아래 공식문서를 기반으로 작성 함

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