초보를 위한 쿠버네티스 안내서를 수강하며 정리한 내용입니다.
중간에서 상태를 확인하고 실행하는 영역은 Master, 실제로 컨테이너가 실행되는 영역은 Node
Master
- 상태 확인(Observe) -> 차이점 발견(Diff) -> 조치(Act)
- Current State와 Desired State가 일치하는지 확인, 차이점이 발견되면 Current State가 Desired State가 되도록 조치, 이 과정을 반복
- API Server
- 상태를 바꾸거나 조회
- etcd와 유일하게 통신하는 모듈
- REST API 형태로 제공
- 권한을 확인하여 적절한 권한이 없을 경우 요청을 차단
- 관리자 요청 뿐 아니라 다양한 내부 모듈과 통신
- 수평으로 확장되도록 디자인
- etcd
- 모든 상태와 데이터를 저장
- 분산 시스템으로 구성하여 안전성을 높임 (고가용성)
- 가볍고 빠르면서 정확하게 설계 (일관성)
- Key-Value 형태로 데이터 저장
- 백업 필수
- Scheduler
- 새로 생성된 pod를 감지하고 실행할 Node를 선택
- Node의 현태 상태와 pod의 요구사항을 확인
- Controller
- 끊임없이 상태를 확인하고 원하는 상태를 유지
- 복잡성을 낮추기 위해 하나의 프로세스로 실행
- 논리적으로 다양한 컨트롤러가 존재
- 조회 흐름
- Controller가 API Server에 정보 조회 요청
- API Server는 요청을 보낸 Controller가 정보 조회 권한이 있는지 확인
- 권한이 있으면 etcd에서 정보를 조회하여 Controller에게 전달
- 기본 흐름
- 원하는 상태가 변경되면 API Server는 Controller한테 알림
- Controller는 원하는 상태와 현재 상태가 불일치하기 때문에 조치를 해야 함, 원하는 상태로 리소스를 변경
- Controller는 리소스가 변경된 결과를 API Server한테 전달
- API Server는 Controller에게 정보 갱신 권한이 있는지 확인
- 권한이 있으면 etcd에 정보를 갱신
API Server 통신

Node
- Node에는 크게 Proxy와 Kubelet이라는 두 개의 컴포넌트가 있음
- Proxy와 Kubelet도 Master와 통신할 때 API Server만 바라봄
- Proxy
- Kubelet
- 각 Node에서 실행
- Pod을 실행 / 중지하고 상태를 확인
Pod이 생성되는 과정
- 관리자가 API Server에 Pod 생성 요청
- API Server는 요청을 etcd에 상태를 생성 요청으로 기록
- Controller는 새로 생긴 Pod가 있는지 계속 확인하다가 Pod 생성 요청을 발견
- Controller는 API Server에 실제 Pod를 할당하는 요청 보냄
- API Server는 해당 요청을 받아서 etcd에 상태를 할당 요청으로 변경
- Scheduler는 할당 요청이 들어온 Pod이 있는지 계속 확인하다가 Pod 할당 요청을 발견
- Sechduler가 특정 Node에 Pod를 할당
- API Server는 etcd에 Pod를 특정 노드에 할당하는데 아직 실행되기 전 상태라고 변경
- Kubelet이 자신의 Node에 할당된 Pod 중에서 아직 실행이 안 된 것이 있는지 계속 확인하다가 새로 추가된 Pod를 확인
- 해당 정보를 가지고 와서 Node에 Pod를 생성
- API Server가 etcd에 Pod가 특정 Node에 할당되었고 실행 중이라는 상태로 변경