보통의 쿠버네티스 전체 구성도

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) 트래픽 흐름:

  1. 클라이언트(외부 사용자):

    • 웹 브라우저나 API 요청을 통해 애플리케이션에 접근.
  2. 로드 밸런서:

    • 외부 트래픽을 클러스터 내부로 전달.
    • 클라우드 환경에서는 ALB/NLB 등이 사용.
  3. Ingress Controller:

    • Ingress 리소스에 정의된 규칙에 따라 트래픽을 적절한 서비스로 라우팅.
  4. Service:

    • Pod 앞단에서 트래픽을 수신하고, 적절한 Pod로 전달.
  5. Pod:

    • 애플리케이션 컨테이너가 실행되어 요청 처리.

(2) 컨트롤 플레인 관리:

  1. API Server:
    • 모든 요청(스케줄링, 상태 조회 등)을 수신하고 처리.
  2. etcd:
    • 클러스터 상태 데이터를 저장(예: Pod, Service 상태).
  3. Scheduler:
    • 새로운 Pod가 생성되면, 적절한 워커 노드에 배치.
  4. Controller Manager:
    • 클러스터 상태를 감시하고, 원하는 상태로 자동 조정.

(3) 네트워크 연결:

  • Kube Proxy:
    • 각 워커 노드에서 Pod 간 통신을 위한 네트워크 규칙 관리.
  • Pod 간 통신:
    • CNI 플러그인(예: Flannel, Calico)을 사용해 네트워크 연결.

4. 고가용성(HA) 구성

고가용성을 고려한 클러스터 구성은 단일 장애 지점(SPOF)을 제거합니다.

구성 요소:

  1. 컨트롤 플레인 다중화:
    • 3개 이상의 컨트롤 플레인 노드를 구성하여 API Server와 etcd의 가용성을 보장.
  2. 노드 다중화:
    • 워커 노드를 다중화하여 Pod를 여러 노드에 분산 배치.
  3. 로드 밸런서:
    • 컨트롤 플레인과 Ingress Controller 앞단에 배치.

5. 예제 환경: 클라우드 기반

AWS 기반 구성 예제:

  1. 로드 밸런서:
    • AWS Application Load Balancer(ALB)로 외부 트래픽을 Ingress로 전달.
  2. 클러스터 노드:
    • Amazon EKS를 통해 마스터(컨트롤 플레인)와 워커 노드를 자동 관리.
  3. 네트워킹:
    • Amazon VPC와 CNI 플러그인 사용.

6. 요약

쿠버네티스 전체 구성도는 크게 컨트롤 플레인, 워커 노드, 외부 트래픽 관리 계층으로 나뉩니다.

  • 컨트롤 플레인: 클러스터 상태를 유지하고 관리.
  • 워커 노드: 애플리케이션(Pod)이 실행되는 실제 작업 영역.
  • 외부 트래픽 계층: Ingress Controller 및 Load Balancer로 외부 트래픽 처리.

각 구성 요소의 역할을 이해하면, 클러스터를 설계하고 유지보수할 때 효과적으로 대응할 수 있습니다.

Edit this page