[따배쿠] 6. 쿠버네티스 동작 원리

( 참고 : 따배쿠 https://www.youtube.com/watch?v=6n5obRKsCRQ&list=PLApuRlvrZKohaBHvXAOhUD-RxD0uQ3z0c )


1. 쿠버네티스 동작 원리

figure2


  1. 개발자/운영자가 컨테이너들을 build한다
    • ex) main ui 컨테이너, login 담당 컨테이너, 결제 담당 컨테이너
  2. build했던 이미지들을 도커 명령어로 hub에 올리기
    • docker push
  3. ( + 4 )쿠버네티스 명령어를 통해, 이 컨테이너가 실행될 수 있도록 요청
    • cli 명령어나, yaml파일 형식으로, master (control plane)에 실행 요청!
  4. master는 이 요청에 따라서, worker node들에게 해당 컨테이너를 배치
  • scheduler는, 어디가 적절할지 판단한 뒤 REST API server에게 최적의 노드를 알려줌
  1. 이 API는, 할당받은 node의 kubelet에게, 해당 컨테이너를 실행해줄것을 요청함

  2. 해당 node의 kubelet은, 도커 명령어로 변환한 뒤, 도커 데몬에게 실행할 것을 요청함.

  3. 도커 데몬은, hub에서 해당 image를 찾은 뒤 실제로 실행함.

  4. 쿠버네티스는, 이렇게 실행되게 된 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의 네트워크 동작을 관리
  • 컨테이너 런타임 : 컨테이너를 실행하는 엔진


figure2

  • 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를 받아온 뒤, 해당 컨테이너를 실행함