k8s

CKA 준비 (3) Static pod 생성하기

Joon0464 2022. 5. 23. 21:21

이 게시물은 아래 강의를 참고 하였습니다.
참고 강의 https://www.youtube.com/watch?v=KdATmTulf7s&list=PLApuRlvrZKojqx9-wIvWP3MPtgy2B372f&index=1 

 

이론)

* kubernetes 동작 원리

kubectl 명령어로 pod 생성 요청 -> 마스터 시스템의 API로 전달됨 -> API 는 요청을 받으면 etcd 안에 있는 클러스터 상태 정보를 scheduler에게 보내고 어떤 노드에 생성하면 되는지 scheduler에게 요청 -> scheduler가 클러스터의 상태를 확인해서 가장 적합한 노드를 선택하여 API 에게 알려줌 -> API는 scheduler에게 받은 응답을 통해 특정 노드의 kubelet에게 pod 생성을 요청 -> kubelet은 컨테이너 엔진에게 파드 생성을 요청 -> 컨테이너 엔진은 registry 허브에서 컨테이너 이미지를 다운 받아 컨테이너 실행 -> 실행된 상태 정보를 kubelet에게 보냄 -> kubelet은 파드 상태 정보를 API 에게 보냄 -> API는 특정 노드에 파드가 실행되었다는 정보를 etcd에 저장

 


* static pod의 동작 원리
- API를 통하지 않고 파드가 생성된다.
- 각 노드의 kubelet에게 static pod 생성 요청
- /var/lib/kubelet/config.yaml -> kubelet 구성 정보, static 파드를 동작시킬 위치 정보가 등록되어 있음
- 기본값은 /etc/kubernetes/manifest로 되어있다.
- /etc/kubernetes/manifest 에 pod.yaml를 등록해주면 kubelet이 해당 yaml 파일을 기준으로 파드를 생성한다.
- master 의 API, Scheduler, ETCD, Controller 도 전부 static pod 형태로 동작한다.

문제)

Configure kubelet hosting to start a pod on the node
Node: hk8s-w1
pod Name: web
image: nginx

답안)

$ kubectl run web --image=nginx --dry-run=client -o yaml

apiVersion: v1
kind: Pod
metadata:
  creationTimestamp: null
  labels:
    run: web
  name: web
spec:
  containers:
  - image: nginx
    name: web
    resources: {}
  dnsPolicy: ClusterFirst
  restartPolicy: Always
status: {}

 -> 복사해서 메모장에 붙여넣음
$ ssh hk8s-wl	# ssh 로 node에 접속
$ sudo cat /var/lib/kubelet/config.yaml 로 확인
-> staticPodPath: /etc/kubernetes/manifests

static pod yaml 위치 확인

$ cd /etc/kubernetes/manifests
$ sudo vi web.yaml
apiVersion: v1
kind: Pod
metadata:
  name: web
spec:
  containers:
  - image: nginx
    name: web

node 이름은 문제와 상이함