들어가기 전에

- 일반적인 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명> 규칙으로 파드가 생성된 것을 확인 가능

 

참고영상: https://www.youtube.com/watch?v=u0Wg0HBVmmk&list=PLApuRlvrZKojqx9-wIvWP3MPtgy2B372f&index=7&ab_channel=TTABAE-LEARN

'Kubernetes' 카테고리의 다른 글

[Kubernetes] pod 생성하기  (0) 2025.05.25
[Kubernetes] etcd 파드 스냅샷 백업 및 복구 방법  (0) 2025.05.25
블로그 이미지

망원동똑똑이

프로그래밍 지식을 자유롭게 모아두는 곳입니다.

,

1. 클러스터 전환

$ kubectl config use-context <사용할컨텍스트명>

 

2. 네임스페이스 생성

$ kubectl create namespace <네임스페이스명> # 네임스페이스 생성
$ kubectl get namespaces # 네임스페이스 확인

 

3. 네임스페이스 내부에 pod 생성

공식문서: https://kubernetes.io/docs/reference/kubectl/generated/kubectl_run/

$ kubectl run <파드명> \
  --namespace <네임스페이스명> \
  --image=<사용할이미지명:버전> \
  --env=<key=value> \
  --dry-run-client \ # 테스트로 돌리기
  -o yaml # 생성 결과를 yaml 형태로 출력하기
$ kubectl get pod --namespace <네임스페이스명> # 특정 네임스페이스에서 동작중인 파드 확인

 

 

 

참고영상: https://www.youtube.com/watch?v=c5kdKi3wAaM&list=PLApuRlvrZKojqx9-wIvWP3MPtgy2B372f&index=6&ab_channel=TTABAE-LEARN

블로그 이미지

망원동똑똑이

프로그래밍 지식을 자유롭게 모아두는 곳입니다.

,

1. 현재 컨텍스트 확인

$ kubectl config current-context

 

 

2. 작업 시스템(node) 접속 및 환경 확인

$ ssh <node명> # 특정 node에 ssh 접속
$ etcd --version # etcd 버전 확인
$ etcdctl version # etcdctl 버전 확인

 

3. etcd backup

공식문서: https://kubernetes.io/docs/tasks/administer-cluster/configure-upgrade-etcd/#restoring-an-etcd-cluster

$ ETCDCTL_API=3 etcdctl \
  --endpoints=https://127.0.0.1:2379 \
  --cacert=<인증서ca파일경로> \
  --cert=<클라이언트인증서파일경로> \
  --key=<클라이언트키파일경로> \
  snapshot save <백업스냅샷파일경로>

 

4. restore

공식문서: https://kubernetes.io/docs/tasks/administer-cluster/configure-upgrade-etcd/#restoring-an-etcd-cluster

$ ETCDCTL_API=3 etcdctl \
  --data-dir <복구한스냅샷이풀릴경로> \
  snapshot restore <복구할스냅샷파일경로>

 

5. etcd 파드의 data 경로 수정 적용

 

특정 네임스페이스로 동작중인 etcd pod 확인

$ kubectl get pod -n kube-system

 

 

출력 중 etcd pod 확인 가능

해당 etcd pod의 설정경로는 /etc/kubernetes/manifests/etcd.yaml 이며, spec.volumes[].name: etcd-data 의 hostPath.path 부분을 복구한 스냅샷이 풀린 경로로 수정하여 저장하면 static pod 이기 때문에 자동으로 restart 되며 적용됨.

docker ps | grep etcd 로 etcd pod 내의 컨테이너가 정상적으로 up 되었는지 확인.

 

 

 

참고 영상: https://www.youtube.com/watch?v=dv_5WCYS5P8&list=PLApuRlvrZKojqx9-wIvWP3MPtgy2B372f&index=4&ab_channel=TTABAE-LEARN

'Kubernetes' 카테고리의 다른 글

[Kubernetes] static pod 생성하기  (0) 2025.05.25
[Kubernetes] pod 생성하기  (0) 2025.05.25
블로그 이미지

망원동똑똑이

프로그래밍 지식을 자유롭게 모아두는 곳입니다.

,