모든 강의 이미지 출처는 [인프런] 쿠버네티스 어나더 클래스(지상편) - Spring 1,2 입니다.
Section 11. Component 동작으로 이해하기
전체 개요

- Controller : 타 Controller나 Object를 제어하는 역할
- Object : Object 단독으로 하나의 인프라 개념으로 단독 역할
- Controller와 Object를 합친 하나의 명칭으로 Resource라고 한다.
- 또한, Resource에는 Namespace Level과 Cluster Level로 구분되어진다.
Pod 생성 요청이 수행되는 과정

- 사용자가
kubectl
명령으로 Pod 생성 요청을 수행한다.
kubectl
은 API 서버(kube-apiserver
)에게 요청을 보내기 전 ~/.kube/config
파일에 저장된 클러스터 정보와 인증정보를 참조하여 신원을 증명한다.
- 검증 단계가 통과되면 API 서버는 etcd에 요청으로 들어온 Pod 객체 정보를 저장소인 etcd에 저장한다.
- etcd에 Pod 객체 정보가 추가되면 스케줄러(
kube-scheduler
)에 의해 어떤 노드에 Pod를 배치할지 결정된다.
- 선정된 노드에서 실행되고 있던
kubelet
은 API 서버로 부터 Pod 생성 요청을 감지하고 Container Runtime에게 컨테이너 생성을 요청한다.
- 만약 Pod 객체 정보에 Probe 설정 있다면 kubelet이 해당 설정에 맞게 Health Check API를 날리게 된다.
Service 생성 요청이 수행되는 과정

- 사용자가
NodePort
타입의 서비스를 만들고 Pod와 연결한다.
- kubelet이
kube-proxy
에게 네트워크 생성을 요청한다.
kube-proxy
는 Iptables에 설정된 nodePort가 어떤 서비스와 연결되어 있는지에 대한 맵핑 룰을 업데이트한다.
- 사용자가 nodeIP와 nodePort를 통해 요청을 날리면 Node로 부터 컨테이너까지 CNI가 트래픽 전달한다.
HPA 동작

- 컨테이너의 자원 사용량은 Container Runtime이 알고있고 kubelet이 10초에 한번씩 CPU, Memory 사용량을 조회한다.
- HPA가 부하를 인지하기 위해서는
metrics-server
가 별도로 필요하며, metrics-server
는 60초 단위로 메트릭을 수집한다.
- kube-controller-manager는 15초 마다 metric-server를 통해 임계값과 메트릭을 확인하고, 15초 단위로 스케일링을 발생시킨다.