본문으로 바로가기

init 컨테이너 & infra 컨테이너 / static Pod

category Kubernetes 2021. 7. 14. 21:10
반응형

init 컨테이너

  • 앱 컨테이너 실행 전에 미리 동작시킬 컨테이너
  • 본 Container가 실행되기 전에 사전 작업이 필요할 경우 사용
  • 초기화 컨테이너가 모두 실행된 후에 앱 컨테이너를 실행

infra container(pause)

  파드가 실행될 때 파드의 인프라를 만들어주는 컨테이너.

 


Staic Pod란?

 

우선 기존 Pod의 운영방식을 살펴보자

기존 Pod의 운영방식은 마스터 서버에서 kubectl  명령을 마스터의 api 서버에 전달해 etcd(클러스터의 상태를 저장하는 서버) 의 정보를 가져다가 스케쥴러에 보내준다. 스케쥴러는 가장 적절한 노드를 선택해서 해당 노드에 Pod를 실행해준다.

 

Staic Pod는 api 서버에 요청을 보내지 않는다.  kublet daemon에 의해 실행되는 Pod 를 static pod라 한다.

/etc/kubernetes/manifests/ 디렉토리에 k8s yaml 파일을 저장시 자동적용 된다.

디렉토리를 수정할 시 kubelet 데몬을 재실행 해준다.

 

실습 : 워커노드 1로 이동해서 /var/lib/kubelet/config.yaml 의 내용 확인.

staticPodPath 경로가 나온다. 저 디렉토리에다 pod.yaml 파일을 놓는다면 저 노드에서 파드가 kublet에 의해 실행된다.

워커노드1의 static pod 경로를 알았으니 확인을 쉽게 하기 위해 마스터(control-plane) 노드에서 실행하고 있는 Pod를 전부 삭제하고 확인해본다.

실행되고 있는 pod가 없다는걸 확인

워커노드의 static pod 경로로 이동해서 nginx.yaml 파일 생성.

apiVersion: v1
kind: Pod
metadata:
  name: mypod
spec:
  containers:
   - name: nginx
     image: nginx:1.14
     livenessProbe:
       httpGet:
         path: /
         port: 80

static pod 경로에 yaml 파일을 하나 생성해 주었다.

yaml 파일 하나를 넣었을 뿐인데 마스터 노드에서 kubectl get pods -o wide 명령어로 조회를 해보니

워커노드 1에서 pod가 하나 실행중 이였다.

 

마스터노드에서 실행시키지 않아도. 해당 노드의 static pod 경로에 yaml 파일을 놓을경우 해당 노드에 pod가 실행된다.

 

static pod 경로는 수정이 가능하며, 수정 했을 경우 kublet 데몬을 재시작 해주면 된다.

 

 

정리 :

1. api 서버 도움없이도 kubelet daemon으로 pod를 실행할 수 있다.

2. static pod path로 정의돼 있으니 그 정의된 디렉토리에 pods.yaml을 넣으면 된다.

반응형