본문 바로가기
Kubernetes

스태틱(static) pods

by Nirah 2022. 12. 29.

static pod

 

스태틱 pods  API 서버 없이 특정 노드에 있는 kubelet 데몬에 의해 직접 관리된다.

컨트롤 플레인에 의해 관리되는 pods(예를 들어 디플로이먼트)와는 달리,

kubelet 이 각각의 스태틱 pods를 감시한다. (만약 실패할 경우 다시 구동한다.)

 

스태틱 pods는 항상 특정 노드에 있는 하나의 Kubelet에 매여 있다.

Kubelet 은 각각의 스태틱 pods에 대하여 쿠버네티스 API 서버에서 자동으로 mirror pod를 생성하려고 한다.

즉, 노드에서 구동되는 pods는 API 서버에 의해서 볼 수 있지만, API 서버에서 제어될 수는 없다.

 

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

만약 클러스터로 구성된 쿠버네티스를 구동하고 있고, 스태틱 pods를 모든 노드에서 구동하고 있다면,

스태틱 pods를 사용하는 대신 데몬셋(DaemonSet) 을 사용하는 것이 바람직하다.

 

 

 

 

일반적인 pods 실행과 static pods 실행의 차이점

 

일반적인 kubectl을 사용하여 pod 실행 명령어를 실행하면 kube-apiserver가 해당 명령어를 받는다.

명령어를 받게 되면 kube-apiserver는 명령어의 문법, 권한 등을 검사한다.

문법과 권한에 문제가 없으면 etcd에 있는 정보와 함께 명령어를 scheduler에 요청하게 된다.

scheduler는 etcd의 정보를 바탕으로 어느 node에 pod을 실행할지 결정하게 된다.

그럼 apiserver는 scheduler가 선택한 node의 kubelet에 요청을 보내게된다.

요청을 받은 kubelet은 docker 명령어를 실행하여 pod을 만들게 된다.

 

Static Pod은 일반적인 Pod과 실행 방식이 다르다. 일반적인 Pod은 apiserver를 통해 실행이 되는 반면,

Static Pod은 apiserver를 거치지 않고 실행하게 된다.

각 node에는 static pod 관련 yaml 파일을 저장할수 있는 디렉토리가 있다.

해당 디렉토리에 yaml 파일을 저장하면 kublet daemon에 의해 자동 실행되게 된다.

 

 

 

 

 

 

static pod의 필요성

master node에서 staticPodPath에 가보면 기본적으로 여러 yaml 파일이 존재한다.

이 yaml 파일들은 kubernetes가 실행되는 순간 master node에서 자동으로 실행되야 하는 object 들이다.

또한, 문제가 생기거나 사용자가 해당 object들을 delete 한다고 해도 다시 재실행되어야 하는 object들이다.

따라서 kubernetes를 설치하면 staticPodPath에는 중요한 파일들이 기본 생성된다.

/etc/kubernetes/manifests

 

 

 

 

 

 

static pods 생성

 

이번엔 node1에서 진행

static pod 관련 디렉토리 위치 조회

cat /var/lib/kubelet/config.yaml | egrep 'static'

 

스테틱 pods를 생성하기 위해 평범한 yaml파일을 만들어서 해당 위치에 넣어주자.

cd /etc/kubernetes/manifests

cat > static-pod.yaml

apiVersion: v1
kind: Pod
metadata:
  name: nginx-pod
spec:
  containers:
  - name: nginx
    image: nginx:1.14
    ports:
    - containerPort: 80
    - containerPort: 443
      protocol: TCP

 

해당 디렉토리에 yaml파일을 넣었을 뿐인데, node1에선 별도의 실행 없이도 pods가 실행되는것을 확인할 수 있다.

이것이 스테틱pods다.

 

 

master node에서 이 실행중인 스테틱 pods를 삭제해보겠다.

k delete pods nginx-pod-node1.labs.local

 

pods 삭제 후 바로 다시 재생성된다. 이런식으론 삭제가 안된다.

 

다시 node1에서 진행

스테틱 pods를 생성한 yaml 파일을 다른곳으로 이동

mv static-pod.yaml /tmp

 

스테틱 pods가 사라졌다.

이처럼 스테틱 pods를 존재시키려면 반드시 '지정된 위치'에 실행 파일(yaml) 이 존재해야 한다.

 

 

 

https://kubernetes.io/ko/docs/tasks/configure-pod-container/static-pod/

 

'Kubernetes' 카테고리의 다른 글

볼륨  (0) 2022.12.29
pods 및 컨테이너 리소스 관리  (0) 2022.12.29
init container (초기화 컨테이너)  (0) 2022.12.28
kubernetes Probe  (0) 2022.12.27
kubectl config 명령어 (클러스터 context 변경)  (0) 2022.12.27