[따배쿠] 6. 쿠버네티스 동작 원리
( 참고 : 따배쿠 https://www.youtube.com/watch?v=6n5obRKsCRQ&list=PLApuRlvrZKohaBHvXAOhUD-RxD0uQ3z0c )
1. 쿠버네티스 동작 원리
- 개발자/운영자가 컨테이너들을 build한다
- ex) main ui 컨테이너, login 담당 컨테이너, 결제 담당 컨테이너
- build했던 이미지들을 도커 명령어로 hub에 올리기
docker push
- ( + 4 )쿠버네티스 명령어를 통해, 이 컨테이너가 실행될 수 있도록 요청
- cli 명령어나, yaml파일 형식으로, master (control plane)에 실행 요청!
- master는 이 요청에 따라서, worker node들에게 해당 컨테이너를 배치
- scheduler는, 어디가 적절할지 판단한 뒤 REST API server에게 최적의 노드를 알려줌
-
이 API는, 할당받은 node의 kubelet에게, 해당 컨테이너를 실행해줄것을 요청함
-
해당 node의 kubelet은, 도커 명령어로 변환한 뒤, 도커 데몬에게 실행할 것을 요청함.
-
도커 데몬은, hub에서 해당 image를 찾은 뒤 실제로 실행함.
-
쿠버네티스는, 이렇게 실행되게 된 container를 “pod”라는 단위로 관리함
2. 쿠버네티스 컴포넌트
(1) master component
etcd
: key-value 타입의 저장소kube-apiserver
: API를 사용하도록 요청을 받고 검사kube-scheduler
: pod를 실행할 node를 선택kube-controller-manager
: pod를 관찰하며 개수를 보장
(2) worker node component
kubelet
: 모든 노드에서 실행되는 k8s 에이전트kube-proxy
: k8s의 네트워크 동작을 관리컨테이너 런타임
: 컨테이너를 실행하는 엔진
- 1) API는 명령어를 받는다
kubectl create ~~
- 명령어 검사하고, 합당하면 실행을 함!
- 2) etcd는 워커 노드들에 대한 상태 정보 & kubernetes 정보를 key:value 형태로 저장
- worker node 내에 있는 kubelet이 있는데, 이 안에 있는 cAdvisor는 각자의 상태 정보들을 수집하여 master에게 전달해주고, master는 이 정보를 etcd에 보관한다.
- 3) API는, 들어온 명령을 받아서 scheduler에게 어디에 실행할지 물어봄. scheduler는 etcd 정보를 바탕으로, 판단한뒤 응답해줌
- 4) API는 응답받은 정보를 바탕으로 ( 어디에 실행할 지 ), 특정 node의 kubelet에게 특정 컨테이너를 실행해줄 것을 요청함
- 5) kubelet은 직접 실행할 수 없음, 도커 명령어로 변환한뒤, 도커(데몬)에게 해당 요청을 전달해줌.
- 6) 도커 데몬은, hub에서 해당 image를 받아온 뒤, 해당 컨테이너를 실행함