관리 메뉴

피터의 개발이야기

[kubernetes] Static Pod란? 본문

Kubernetes/기초공부

[kubernetes] Static Pod란?

기록하는 백앤드개발자 2024. 1. 18. 13:39
반응형

[kubernetes] 쿠버네티스 목차

ㅁ Static Pod란

  Static Pod란 API-Server 없이 특정 노드에 있는 kubelet 데몬에 의해 직접 관리된다.

   컨트롤 플레인에 의해 관리되는 파드(예 Deployment)와는 달리,
    kubelet이 직접 스태틱 파드를 감시한다.

스태틱 파드는 Kubelet가 관리상 특정 노드에 있는 하나의 Kubelet에 매여 있다.

  Kubelet은 Pod를 관리하는 Pod이기 때문에 데온에 가깝다. 노드에서 구동되는 스타틱 파드는 API 서버에 의해서 볼 수 있지만, API 서버에서 제어될 수는 없다.

 

ㅁ 조회방법

$ k get po -A | grep controlplane
kube-system    etcd-controlplane                      1/1     Running   0          27m
kube-system    kube-apiserver-controlplane            1/1     Running   0          27m
kube-system    kube-controller-manager-controlplane   1/1     Running   0          27m
kube-system    kube-scheduler-controlplane            1/1     Running   0          27m

ㅇ 파드 이름에는 노드 호스트 이름 앞에 하이픈을 붙여 접미사로 추가된다.

 

ㅁ Static Pod 정의 위치 

$ cd/etc/kubernetes/manifests
$ ls
etcd.yaml  kube-apiserver.yaml  kube-controller-manager.yaml  kube-scheduler.yaml

 ㅇ 위에 4개의 스태틱 파드가 조회되었는데, 이들 정의하는 yaml 파일의 위치는 /etc/kubernetes/manifests 에 있다.

 

ㅁ Static Path 지정방법

# static Pod Path 조회
$ cat /var/lib/kubelet/config.yaml | grep staticPodPath
staticPodPath: /etc/kubernetes/manifests

 ㅇ kubelet의 설정파일인 config.yaml에 staticPod의 Path를 지정한다.

 

ㅁ Static Pod 상세 정보 조회

# manifest 파일 직업 조회
$ cat /etc/kubernetes/manifests/kube-apiserver.yaml | grep image
    image: registry.k8s.io/kube-apiserver:v1.27.0
    imagePullPolicy: IfNotPresent

# api-server로 조회
$ k get po -n kube-system kube-apiserver-controlplane -o yaml | grep image
    image: registry.k8s.io/kube-apiserver:v1.27.0
    imagePullPolicy: IfNotPresent
    image: registry.k8s.io/kube-apiserver:v1.27.0
    imageID: registry.k8s.io/kube-apiserver@sha256:89b8d9dbef2b905b7d028ca8b7f79d35ebd9baa66b0a3ee2ddd4f3e0e2804b45

 ㅇ API-Server의 image 정보를 확인할 때에 manifiest를 직접 조회하거나 api-server로 상세조회를 할 수 있다.

 

 

ㅁ Static Pod 생성하기

# 샘플 yaml 생성
$ k run static-busybox --image busybox --dry-run=client -o yaml
apiVersion: v1
kind: Pod
metadata:
  creationTimestamp: null
  labels:
    run: static-busybox
  name: static-busybox
spec:
  containers:
  - image: busybox
    name: static-busybox
    resources: {}
  dnsPolicy: ClusterFirst
  restartPolicy: Always
status: {}

# static path에 static-busybox.yaml 저장
$ k run static-busybox --image busybox --command -- sleep 1000 --dry-run=client -o yaml > /etc/kubernetes/manifests/static-busybox.yaml

# static pod 생성확인
$ k get po -A
NAMESPACE      NAME                                   READY   STATUS      RESTARTS     AGE
default        static-busybox-controlplane            0/1     Completed   1 (4s ago)   6s
kube-flannel   kube-flannel-ds-lg5vr                  1/1     Running     0            45m
kube-flannel   kube-flannel-ds-wxs5j                  1/1     Running     0            45m
kube-system    coredns-5d78c9869d-h5p6z               1/1     Running     0            45m
kube-system    coredns-5d78c9869d-qcptf               1/1     Running     0            45m
kube-system    etcd-controlplane                      1/1     Running     0            46m
kube-system    kube-apiserver-controlplane            1/1     Running     0            46m
kube-system    kube-controller-manager-controlplane   1/1     Running     0            46m
kube-system    kube-proxy-96ncv                       1/1     Running     0            45m
kube-system    kube-proxy-hsv6h                       1/1     Running     0            45m
kube-system    kube-scheduler-controlplane            1/1     Running     0            45m

 ㅇ static pod 생성은 static path에 yaml파일을 정의해 주면 kubelet이 자동으로 생성해 준다.

 

ㅁ Static Pod  수정하기

# 이미지 변경 작업
$ kubectl run --restart=Never \
    --image=busybox:1.28.4 static-busybox \
    --dry-run=client -o yaml \
    --command -- sleep 1000 > /etc/kubernetes/manifests/static-busybox.yaml
    
    
# 이미지 변경확인
$ k get po static-busybox-controlplane -o yaml | grep image
    image: busybox:1.28.4
    imagePullPolicy: IfNotPresent
    image: docker.io/library/busybox:1.28.4
    imageID: docker.io/library/busybox@sha256:141c253bc4c3fd0a201d32dc1f493bcf3fff003b6df416dea4f41046e0f37d47

 

 

ㅁ Static POD 삭젭 방법

# kubectl 명령어를 통해 delete는 가능하다
$ k delete po static-busybox-controlplane 
pod "static-busybox-controlplane" deleted

# 다시 조회하면 살아나있다.
# kubelet가 manifests에 정의되어 있는 yaml을 통해 직접 관리하기 때문에 자동 생성된다.
$ k get po
NAME                          READY   STATUS    RESTARTS   AGE
static-busybox-controlplane   0/1     Running   0          5s

# static path에서 직접 삭제
$ rm /etc/kubernetes/manifests/static-busybox.yaml 

# 1분 미만으로 삭제가 되었다.
$ k get po static-busybox-controlplane 
NAME                          READY   STATUS    RESTARTS   AGE
static-busybox-controlplane   1/1     Running   0          49s

$ k get po static-busybox-controlplane 
Error from server (NotFound): pods "static-busybox-controlplane" not found

ㅁ 함께 보면 좋은 사이트

쿠버네티스 공식문서 - 스태틱(static) 파드 생성하기

반응형
Comments