Kubernetes Architecture
쿠버네티스 아키텍처는 컨테이너화된 워크로드를 안정적이고 적응 가능한 환경을 제공하기 위해, 여러 서버와 클러스터에 분산된 컴포넌트들이 함께 동작하는 집합이다.
그리고 이러한 도커 오케스트레이션을 위해서는 크게 Control Plane과 Worker Node가 존재한다.
사실 직접 쿠베네티스로 인프라를 구축하면서 크게 신경을 쓰지 않았던 부분인데, 항상 아키텍쳐만 보면 두루뭉실하고 이해가 확실히 가지 않았다. 그러다 찾은 아키텍쳐 그림중 아래 그림이 가장 직관적으로 잘 설명하는 것 같아 이번 기회에 제대로 정리해보았다.
Control Plane(Master Node)
Kubernetes 클러스터를 관리하고 결정을 내리는 핵심 뇌 역할이다. 이제 흔히들 Master Node라고 하는데 요즘은 Control Plane이라고 한다.
(Control Plane = Master Node)
Control Plane에는 총 4가지가 있다.
API Server: 클러스터의 프론트 도어
1. 모든 요청이 시작되는 장소이다.
2. Rest API 형식으로 작동이 되고, 흔히 kubectl ~ 로 시작하는 명령어가 API Server 를 타고 요청을 보내고 받는다.
etcd: 클러스터의 상태 저장소
1. 쿠버네티스의 모든 정보가 저장되는 곳
예: 어떤 파드가 떠 있는지, 어떤 서비스가 있는지, 어떤 설정이 있는지 등
2. 진짜 중요한 구성요소라, 백업도 필수임
controller manager: 클러스터 상태 조율자
1. node의 pod 상태를 수정하거나 복구하는 역할
예: 특정 파드가 죽으면, 새로 생성하라고 지시하는 곳
2. 원하는 상태(desired state)에 맞춰 클러스터를 유지해주는 작업자 계속해서 etcd 상태를 감시하고, 차이점이 있으면 조정
Scheduler: 파드를 어떤 노드에 배치할지 결정
1. 새롭게 생성된 Pod가 있으면 (아직 할당 안된), 어떤 Node에 보낼지 결정함
2. CPU, 메모리, affinity, taint/toleration 같은 기준을 기반으로 결정
-> 이부분은 커스터마이징도 가능하고 디폴트로 Scheduler가 정한다.
apiVersion: v1 kind: Pod metadata: name: nginx spec: containers: - name: nginx image: nginx resources: requests: memory: "64Mi" cpu: "250m" # 250 millicpu (0.25 CPU) limits: memory: "128Mi" cpu: "500m"
Worker Node
Worker Node는 Control Plane 보다 비교적 간단하다.
두가지 요소가 있는데 kubelet와 kube proxy가 있다.
Kubelet: 워커 노드의 관리자 (주로 컨테이너와 상호작용)
1. worker node에서 control plane과 api server로 통신을 하는 역할을 담당한다. -> 주로 Pod의 상태체크
2. Pod에 지정된 컨테이너가 정상적으로 동작하고 있는지 확인하고, 문제가 생기면 컨테이너를 재시작하거나 종료시킨다.
3. Pod의 상태를 체크하고 필요한 조치를 취하며, 클러스터의 상태를 유지하게 함.
4. Pod에 리소스 요청, 제한에 맞는 리소스를 할당하려고 노력함.
주로 Pod의 상태관리와 컨테이너 실행 및 관리, Health Check등 Node에 돌아가는 Pod를 관리하는 역할이다.
Kube-Proxy: 네트워크 트래픽 라우팅 (서비스 통신 관리)
1. Cluster 내의 Pod간의 통신을 담당 -> 서비스의 로드밸런싱도 담당
2. Cluster 외부 통신도 담당
kube-proxy는 iptables나 ipvs를 사용하여 Cluster IP와 NodePort로 들어오는 요청을 적절한 Pod으로 전달한다.
참고자료
많은 영상과 공식문서를 참고했지만 아래 강의 내용이 가장 직관적이고 이해하기 쉬웠다.
https://www.youtube.com/watch?v=TlHvYWVUZyc
'DevOps&Cloud' 카테고리의 다른 글
CICD: JIB(Java Container Image Build) 장점과 언제 쓰는것이 좋을까 (1) | 2025.04.30 |
---|---|
Elastic Search 이해하기(Elastic Search vs RDBMS) (1) | 2025.04.26 |
Helm이란? (0) | 2025.04.23 |
Reverse Proxy, LoadBalancer의 차이 알아보기 (0) | 2025.04.14 |
Kubernetes의 Ingress Controller와 LoadBalancer 역할 이해하기 (0) | 2025.04.10 |