쿠버네티스는 분산 시스템을 실행하기 위한 컨테이너 오케스트레이션 프레임워크입니다.
cluster structure

- 쿠버네티스 클러스터는
control plane 과 node 로 구성됨
control plane : 클러스터의 상태를 관리하고, 워커 노드에 작업을 할당함. 마스터 노드
node : 파드를 호스팅하고 관리함. 워커 노드
- ex)
kubectl get nodes 명령어를 통해 확인 가능
control plane : 마스터 노드
<none> : 워커 노드

control plane
- 쿠버네티스의 마스터 노드
cloud controller manager : 클라우드 공급자와 상호작용해 노드 수준의 스케일링을 제공함
API server
kube-apiserver
- 클러스터와 상호작용하는 모든 요청은 API 서버를 통함
- ex)
kubectl 명령어는 API server 에게 전달됨
Controller Manager
- 노드 상태 관리
- 노드의 상태를 주기적으로 확인함
- 노드가 비정상적이면 해당 노드를
NotReady 상태로 변경하고, 필요한 경우 파드를 다른 노드로 이동
- 파드 관리
- 특정 메트릭
ex)CPU, Memory 을 모니터링하여 파드의 현재 상태를 지속적으로 확인
- ex) HPA
- 설정된 목표 메트릭과 현재 메트릭을 비교하여 파드의 수를 조정해야 할지를 결정
- CPU 사용량이 설정한 임계값을 초과하면 HPA는 더 많은 파드를 생성
- 필요한 경우, 파드의 수를 늘리거나 줄이는 작업을 수행
- 서비스 관리
- 서비스와 연결된 파드가 변화할 경우 엔드포인트를 업데이트
- 서비스가 항상 현재 상태에 맞는 파드에 요청을 전달할 수 있도록 함
Scheduler
- 파드 스케줄링
- 새로운 파드가 생성되면, 파드를 실행할 적절한 노드를 선택함
- 이때 노드의 사용 가능한 리소스와 파드의 리소스 요청을 비교함
- 기본적으로 Least Requested Priority 방식 선택함
- API 서버에 파드-노드 매핑 정보를 알려줌
Worker Node
- 워커 노드에서는
kubelet 과 kube-proxy 가 실행됨
Kubelet
- 파드 관리
- API 서버를 통해 받은 파드 사양을 바탕으로 파드를 실행함
- 헬스 체크
- 파드의 헬스 체크를 수행하여 비정상 상태의 파드를 감지하고, 필요시 재시작하거나 종료함
- 상태 보고
- kubelet은 주기적으로 노드와 파드의 상태를 API 서버에 보고함
- 파드의 실행 상태, 오류, 리소스 사용량 등
- 리소스 관리
Kube-proxy
- 클러스터 내의 서비스와 파드 간의 통신을 관리함
- 서비스 라우팅
- 클러스터 내 서비스에 대한 요청을 적절한 파드로 라우팅
- 로드밸런싱
- 서비스에 대한 요청이 여러 파드에 분산되도록 하여 로드 밸런싱을 수행함
- 클러스터 외부 접근
- NodePort 또는 LoadBalancer 서비스 유형을 사용하는 경우, kube-proxy는 외부에서 클러스터 내 서비스로의 접근을 가능하게 함
- 쿠버네티스 서비스는 개념적인 것이고, 실제 라우팅은 kube-proxy 가 담당함