보통의 쿠버네티스 전체 구성도
TMT쿠버네티스 클러스터의 전체 구성도는 클러스터 내부의 주요 컴포넌트와 외부와의 상호작용을 시각화한 아키텍처를 나타냅니다. 이 구성은 클러스터의 컨트롤 플레인(관리 영역), 워커 노드(작업 영역), 외부 클라이언트(트래픽 진입점)로 나뉩니다.
1. 쿠버네티스 클러스터의 주요 구성 요소
(1) 컨트롤 플레인(Control Plane):
- 클러스터를 관리하고 스케줄링 및 상태를 유지.
- 주요 컴포넌트:
- API Server: 클러스터와의 모든 통신의 진입점.
- etcd: 클러스터 상태 데이터를 저장하는 분산 키-값 저장소.
- Controller Manager: 클러스터 상태를 감시하고 원하는 상태로 유지.
- Scheduler: Pod를 적절한 워커 노드에 배치.
(2) 워커 노드(Worker Nodes):
- 애플리케이션이 실행되는 영역.
- 주요 컴포넌트:
- Kubelet: 각 노드에서 Pod 실행 및 관리를 담당.
- Kube Proxy: 네트워크 규칙을 설정하여 Pod 간 및 외부 트래픽 라우팅.
- Container Runtime: 컨테이너(Pod)를 실행하는 도구(Docker, containerd 등).
(3) 외부 클라이언트:
- 클러스터 외부에서 트래픽을 전송하는 사용자나 서비스.
- 주요 요소:
- Ingress Controller: 외부 트래픽을 클러스터 내부로 라우팅.
- Load Balancer: 트래픽 부하를 분산.
2. 전체 구성도
클러스터 구성 요소의 상호작용:
+-----------------------+
| External Client |
+-----------------------+
|
+-------------------+
| Load Balancer | (예: AWS ALB, GCP LB)
+-------------------+
|
+-------------------+
| Ingress Controller | (Nginx, Traefik 등)
+-------------------+
|
+-------------------------------------+
| Worker Nodes |
| +---------------+ +-------------+ |
| | Pod (App A) | | Pod (App B) | | --> Application 실행
| +---------------+ +-------------+ |
| +---------------+ +-------------+ |
| | Pod (App A) | | Pod (App B) | | --> Service 연결
| +---------------+ +-------------+ |
+-------------------------------------+
|
+-------------------+
| Control Plane |
| +---------------+ |
| | API Server | |
| +---------------+ |
| +---------------+ |
| | etcd | |
| +---------------+ |
| +---------------+ |
| | Scheduler | |
| +---------------+ |
| +---------------+ |
| | Controller Mgr| |
| +---------------+ |
+-------------------+
3. 구성 요소 간 역할
(1) 트래픽 흐름:
-
클라이언트(외부 사용자):
- 웹 브라우저나 API 요청을 통해 애플리케이션에 접근.
-
로드 밸런서:
- 외부 트래픽을 클러스터 내부로 전달.
- 클라우드 환경에서는 ALB/NLB 등이 사용.
-
Ingress Controller:
- Ingress 리소스에 정의된 규칙에 따라 트래픽을 적절한 서비스로 라우팅.
-
Service:
- Pod 앞단에서 트래픽을 수신하고, 적절한 Pod로 전달.
-
Pod:
- 애플리케이션 컨테이너가 실행되어 요청 처리.
(2) 컨트롤 플레인 관리:
- API Server:
- 모든 요청(스케줄링, 상태 조회 등)을 수신하고 처리.
- etcd:
- 클러스터 상태 데이터를 저장(예: Pod, Service 상태).
- Scheduler:
- 새로운 Pod가 생성되면, 적절한 워커 노드에 배치.
- Controller Manager:
- 클러스터 상태를 감시하고, 원하는 상태로 자동 조정.
(3) 네트워크 연결:
- Kube Proxy:
- 각 워커 노드에서 Pod 간 통신을 위한 네트워크 규칙 관리.
- Pod 간 통신:
- CNI 플러그인(예: Flannel, Calico)을 사용해 네트워크 연결.
4. 고가용성(HA) 구성
고가용성을 고려한 클러스터 구성은 단일 장애 지점(SPOF)을 제거합니다.
구성 요소:
- 컨트롤 플레인 다중화:
- 3개 이상의 컨트롤 플레인 노드를 구성하여 API Server와 etcd의 가용성을 보장.
- 노드 다중화:
- 워커 노드를 다중화하여 Pod를 여러 노드에 분산 배치.
- 로드 밸런서:
- 컨트롤 플레인과 Ingress Controller 앞단에 배치.
5. 예제 환경: 클라우드 기반
AWS 기반 구성 예제:
- 로드 밸런서:
- AWS Application Load Balancer(ALB)로 외부 트래픽을 Ingress로 전달.
- 클러스터 노드:
- Amazon EKS를 통해 마스터(컨트롤 플레인)와 워커 노드를 자동 관리.
- 네트워킹:
- Amazon VPC와 CNI 플러그인 사용.
6. 요약
쿠버네티스 전체 구성도는 크게 컨트롤 플레인, 워커 노드, 외부 트래픽 관리 계층으로 나뉩니다.
- 컨트롤 플레인: 클러스터 상태를 유지하고 관리.
- 워커 노드: 애플리케이션(Pod)이 실행되는 실제 작업 영역.
- 외부 트래픽 계층: Ingress Controller 및 Load Balancer로 외부 트래픽 처리.
각 구성 요소의 역할을 이해하면, 클러스터를 설계하고 유지보수할 때 효과적으로 대응할 수 있습니다.