들어가기 전에
- 일반적인 pod가 동작하는 방식에 대한 간단한 설명
파드 생성 명령어를 입력하면, 클러스터 내에 있는 master 노드(control plane)의 API pod로 요청이 들어간다.
API pod는 master 노드 내의 etcd 파드에 저장되어있는 클러스터의 상태정보를 꺼내어 scheduler pod 에 전달하여 pod 를 실행하기 가장 적합한 node 가 어딘지 조회한다.
API 는 해당 노드의 kubelet 에 pod 실행을 요청하며, kubelet 은 노드 내의 컨테이너 엔진을 통해 registry hub 에서 컨테이너 이미지를 다운받아 파드 형태로 실행하게 된다. 실행이 완료되면 컨테이너 엔진은 다시 kubelet 에게 실행정보를 전달하고, kubelet 은 다시 master 노드의 API 에 실행정보를 전달한다. API 는 etcd 파드에 해당 정보를 저장한다.
- 그렇다면 static pod 는 어떻게 실행될까?
일반 pod 는 API 를 통해 실행되는 반면, static pod 는 각 노드의 kubelet 에 의해 직접 실행된다.
더 자세히 설명하면, 각 node 에 daemon 형태로 떠있는 kubelet 프로세스는 각 노드 파일시스템의 /var/lib/kubelet/config.yaml 파일의 kubelet 구성정보를 기반으로 동작하는데, 이 파일에 static pod 를 배치시킬 위치 정보를 설정할 수 있다.(기본값 /etc/kubernets/manifests 디렉토리) 즉, /etc/kubernets/manifests 디렉토리 내에 pod.yaml 파일을 저장하면, kubelet 은 해당 정보로 pod 를 실행한다.(이것이 static pod). 반대로 해당 pod.yaml 을 삭제하면 kubelet 은 해당 pod 를 삭제한다.
여기서 master 노드(control plane)에 존재하는 API, etcd, scheduler, controller 등의 component 들도 실제로는 pod 인데, 어떻게 API pod 가 아직 생성되지 않은 상태에서 생성이 되는지에 대한 의문이 풀린다. mster node 의 kubelet daemon이 바라보는 manifests 내에 해당 컴포넌트들이 설정되어있기 때문이다.(모두 static pod 인 것이다)
참고: CKA의 static pod 를 문제에서는 configure kubelet to start a pod on the node 로 표현함.
1. pod 템플릿 생성
$ kubectl run <파드명> --image=<이미지명> --dry-run=client -o yaml
출력된 파드 설정 내용을 복사해둔다.
2. 작업할 node 접속
$ ssh <접속할노드명>
3. root 전환
$ sudo -i
4. static pod 설정파일을 생성하여 pod 실행
$ cat /var/lib/kubelet/config.yaml # kubelet 구성파일 출력
출력된 정보 중 staticPodPath 경로 확인 후 해당 경로로 이동
$ cd /etc/kubernetes/manifests
$ cat > <pod설정파일명>.yaml
복사했던 pod 설정정보 shift + insert 로 붙여넣고 ctrl + d 로 저장(불필요한 내용은 제거)
자동으로 static pod 가 실행된다.
5. master 노드로 복귀 후 static pod 확인
$ kubectl get pods
<pod명>-<node명> 규칙으로 파드가 생성된 것을 확인 가능
'Kubernetes' 카테고리의 다른 글
[Kubernetes] pod 생성하기 (0) | 2025.05.25 |
---|---|
[Kubernetes] etcd 파드 스냅샷 백업 및 복구 방법 (0) | 2025.05.25 |