참고 사이트: https://brunch.co.kr/@topasvga/1455
Kubernetes Cluster 구조
Kubernetes Cluster 구조는 크게 Master Node 1개, Slave Node들로 구성되어있다.
차별이 담긴 네이밍 논란으로 인해, 지금은 Control plane 1개, Worker node들로 불리운다.
Control Plane
- 전체 Worker Nodes들의 관리자
- Worker Node들 중에 문제가 생긴 노드의 작업을 다른 노드가 실행하는 등 전체 매니징하는 노드이다.
- 구성 요소
etcd (etcdctl)
- 노드 관련 메타데이터 저장소
- key-value 형태
- 클러스터 및 리소스의 구성, 상태 정보가 담겨있음
API Server (kube-api)
- 쿠버네티스 클러스터 내 통신 담당
- 외부에서 트래픽이 들어오면 가장 먼저 API Server에게 방문해서 어디로 가야하는지 알아냄
Scheduler (kube-scheduler)
- 새로 생성된 Pod를 감지하여 특정 Node로 배치 ( Pod는 Node 내에 배치되어 동작 )
- 스케줄러가 없으면 Pod는 무한 대기상태이다.
- Node를 모니터링하고 스케줄 할당한다.
- Node 선정 방식
- Filter Node
if. 해당 Pod가 CPU 10개가 필요하다면, CPU 10개 있는 Node들로만 필터링한다. - Rank Nodes
우선순위 함수를 이용해 0에서 10까지의 정수로 노드에 점수를 매긴다.
if. CPU 10개가 필요한 Pod에 CPU 12 Node, CPU 16 Node가 있으면 CPU 16 Node가 우선순위가 높다.
Controller (kube-controller-manager)
- 시스템 내 구성요소의 상태를 지속적으로 모니터링하고 시스템 유지하는 역할
- Nodes의 상태를 모니터링하고 응용프로그램이 계속 실행할 수 있도록 kube-apiserver를 통해 조치를 취한다.
- ex) 다운된 노드가 없는지, 파드가 의도한 복제(Replicas) 숫자를 유지하고 있는지, 서비스와 파드는 적절하게 연결되어 있는지 etc.
Worker Nodes
실제로 Work하는 에이전트 들이다.
Kubelet
- 노드 단위로 실행
- 노드에서 컨테이너가 동작하도록 명령하는 역할
- 예시
상황: 변경된 YAML 적용을 위해 kubectl 명령 사용
1) YAML이 kube-apiserver에게 전송
2) kube-apiserver가 kubelet에게 전송
3) kubelet은 이 YAML을 통해 전달된 파드를 생성/변경 후 YAML에 명시된 컨테이너 잘 실행되었는지 확인
Container Runtime
- 컨테이너를 실행하는데 사용되는 기본 소프트웨어 (ex. Docker, Rocket, Cryo)
Kube-proxy
- 노드 간 통신 담당
- 쿠버네티스 클러스터 내 네트워크 요청을 전달하는 역할
- 외부 트래픽이 쿠버네티스 내 특정 파드를 바라보고 오더라도, 파드 IP는 매번 바뀌므로 정상적으로 도착 못할 수 있다.
kube-proxy는 매번 변경된 IP 관리, 갱신하여 고정적으로 파드에게 접근할 수 있도록 전달하는 역할
'Kubernetes' 카테고리의 다른 글
워크로드 API 카테고리(데몬셋) (1) | 2024.01.13 |
---|---|
워크로드 API 카테고리(디플로이먼트) (0) | 2024.01.07 |
워크로드 API 카테고리(레플리카셋/레플리케이션 컨트롤러) (0) | 2024.01.07 |
워크로드 API 카테고리(파드) (1) | 2024.01.07 |
쿠버네티스 구성요소 카테고리 (0) | 2024.01.06 |