kubernetes 구조 #1

kubernetes의 구조를 이해해보자

Control Plane

쿠버네티스(Kubernetes)의 Control Plane은 클러스터의 관리 및 제어 기능을 담당하는 핵심 컴포넌트들로 구성된 영역입니다. Control Plane은 클러스터 내에서 발생하는 모든 동작을 조정하며, 애플리케이션의 배포, 상태 모니터링, 확장 및 복구 등을 관리합니다.

Control Plane은 **노드(Node)**와 파드(Pod) 등의 워크로드 리소스들을 관리하고 조정하는 역할을 수행하며, 이를 통해 Kubernetes 클러스터가 원하는 최종 상태(Desired State)를 유지할 수 있게 도와줍니다. 다음은 Control Plane의 주요 컴포넌트들입니다.


1. API 서버 (kube-apiserver)

API 서버는 클러스터 내 모든 상호작용의 중심입니다. 쿠버네티스의 다른 컴포넌트와 사용자, 외부 시스템이 모두 이 API 서버와 통신하여 클러스터를 관리하거나 정보를 교환합니다.

  • 역할: 클러스터의 중앙 제어 지점으로, 모든 REST API 요청을 처리하고 클러스터 상태를 수정하는 작업을 수행합니다.

  • 동작: API 서버는 etcd와 통신하며, 클러스터의 상태 정보를 저장하거나 조회할 수 있습니다. 또한, 클러스터 사용자와 자동화 도구가 사용하는 진입점 역할을 합니다.

  • 보안: API 서버는 인증, 인가, 권한 관리(RBAC)를 통해 클러스터 접근을 제어합니다.

예시:

kubectl get pods

위와 같은 명령어가 실행되는 의미는 kubernetes API 서버에 요청을 보내는 것입니다. 해당 명령어는 클러스터 내 파드 정보를 조회하는 것입니다.


2. 클러스터 상태 저장소 (etcd)

etcd는 쿠버네티스의 분산 키-값 저장소로, 클러스터의 상태와 구성 정보를 저장합니다.

  • 역할: 모든 클러스터의 데이터(파드, 서비스, 구성 정보 등)를 영구적으로 저장하며, 시스템의 최종 상태 정보를 유지합니다.

  • 고가용성: etcd는 분산 시스템으로 설계되어 여러 노드에 걸쳐 데이터를 복제하고, 장애가 발생하더라도 데이터 유실 없이 클러스터 상태를 복구할 수 있습니다.

  • 일관성: 쿠버네티스는 etcd를 통해 클러스터 상태의 일관성을 보장하며, 항상 최신의 상태 정보를 반영합니다.


3. 스케줄러 (kube-scheduler)

스케줄러는 클러스터의 각 노드에 파드(Pod)를 할당하는 역할을 담당합니다.

  • 역할: 스케줄러는 클러스터 내 가용 리소스(CPU, 메모리 등)와 파드의 요구 사항을 고려하여, 적절한 노드에 파드를 배치합니다.

  • 작동 방식: 파드를 생성할 때, 먼저 "스케줄되지 않은" 상태로 대기하다가 스케줄러가 이를 감지하고 적절한 노드에 할당합니다.

  • 고려 요소: 스케줄러는 리소스 사용량, 워크로드 균형, 노드 상태(가용성, 레이블 등) 등을 고려하여 파드를 배치합니다.


4. 컨트롤러 매니저 (kube-controller-manager)

컨트롤러 매니저는 클러스터의 다양한 컨트롤러들을 실행하고 관리하는 컴포넌트입니다. 각 컨트롤러는 쿠버네티스 리소스를 모니터링하고, 실제 상태가 사용자가 정의한 최종 상태에 맞게 조정되도록 합니다.

  • 역할: 컨트롤러는 클러스터의 상태를 모니터링하며, 파드, 노드, 디플로이먼트 등의 리소스가 의도한 상태를 유지하도록 관리합니다.

  • 주요 컨트롤러:

    • 노드 컨트롤러: 클러스터의 노드 상태를 감시하고, 장애가 발생한 노드를 감지.

    • 레플리케이션 컨트롤러: 특정 수의 파드가 항상 실행되도록 보장.

    • 엔드포인트 컨트롤러: 서비스와 파드 간 네트워크 연결 관리.

    • 서비스 어카운트 & 토큰 컨트롤러: 새로운 네임스페이스에 자동으로 서비스 어카운트 및 API 접근 토큰 생성.

예시: 만약 디플로이먼트에서 지정한 파드 수가 줄어들면, 레플리케이션 컨트롤러가 이를 감지하여 자동으로 부족한 파드를 재생성합니다.


5. 클라우드 컨트롤러 매니저 (cloud-controller-manager)

클라우드 컨트롤러 매니저는 클라우드 제공자와의 통합을 담당하는 컴포넌트로, 쿠버네티스 클러스터가 클라우드 리소스와 상호작용할 수 있도록 합니다.

  • 역할: 클라우드 서비스와 연계된 리소스, 예를 들어, AWS의 ELB나 Google Cloud의 Load Balancer 등을 관리합니다.

  • 주요 기능:

    • 노드 관리: 클라우드 제공자의 API를 통해 노드 상태를 모니터링하고, 클라우드 환경에서 노드가 제거되면 쿠버네티스에서 해당 노드를 삭제.

    • 로드 밸런서 관리: 클라우드 기반 로드 밸런서 생성 및 설정.

    • 스토리지 관리: 클라우드 제공자의 스토리지 볼륨을 자동으로 프로비저닝하고 관리.


Control Plane의 중요성

Control Plane은 쿠버네티스 클러스터가 지속적으로 원하는 상태를 유지하고, 모든 구성 요소가 안정적으로 작동하도록 하는 핵심 요소입니다.

  • 상태 관리: Control Plane은 클러스터의 목표 상태를 지속적으로 모니터링하고, 문제가 발생하면 자동으로 복구합니다.

  • 확장성: 쿠버네티스 클러스터가 확장되더라도 Control Plane은 다양한 리소스를 효율적으로 관리할 수 있는 기능을 제공합니다.

  • 자동화 및 자가 치유: Control Plane은 스케줄링, 상태 모니터링, 복구 작업을 자동으로 처리하여 운영자의 개입을 최소화하고, 클러스터가 자율적으로 운영될 수 있도록 도와줍니다.

결론적으로, 쿠버네티스 Control Plane은 클러스터의 두뇌에 해당하며, 클러스터 내 모든 리소스와 워크로드가 안정적이고 효율적으로 운영되도록 보장하는 중요한 역할을 담당합니다.

Last updated