이 게시물은 아래 강의를 참고 하였습니다.
참고 강의 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
$ cd /etc/kubernetes/manifests
$ sudo vi web.yaml
apiVersion: v1
kind: Pod
metadata:
name: web
spec:
containers:
- image: nginx
name: web
'k8s' 카테고리의 다른 글
CKA 준비 (5) Side-car Container Pod 실행하기 (0) | 2022.05.24 |
---|---|
CKA 준비 (4) multi-container Pod 생성하기 (0) | 2022.05.24 |
CKA 준비 (2) Pod 생성하기 (0) | 2022.05.23 |
CKA 준비 (1) ETCD Backup & Restore (0) | 2022.05.23 |
Ubuntu 20.04에 Kubernetes 설치 (2) Kubernetes 설치 및 kubernetes 클러스터 구성 (0) | 2022.05.18 |