본문 바로가기
IT/Kubernetes

[Kubernetes] Cluster Architecture(클러스터 아키텍처) - DevelopMoon

by developmoon 2024. 10. 31.

이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.

 

개념

쿠버네티스 클러스터는 제어 평면(Control Plane)과 작업자 노드(Worker Nodes)로 구성된 구조로, 애플리케이션의 컨테이너를 효율적으로 배포하고 관리할 수 있도록 설계되어 있다.


선박에 비유하여 이해하기

쿠버네티스 클러스터를 운영하는 것은 선박을 관리하는 것과 유사하다.

각 노드와 구성 요소가 서로 역할을 맡아 조화롭게 클러스터를 운영하도록 돕는다.

 

1. 작업자 노드(Worker Node) : 선박

  • 작업자 노드는 컨테이너를 실어 나르는 선박과 같다.
  • 선박에 컨테이너를 적재하고 항해를 준비하는 것처럼 작업자 노드도 애플리케이션의 Pod를 실행하고 관리한다.
  • 그러나 단순히 컨테이너를 실어 나르는 것이 아니라, 각 선박의 상태와 실은 컨테이너의 상태를 모니터링하고 관리하는 작업이 필요하다.
  • 즉, 작업자 노드는 애플리케이션의 작업 부하를 실어 나르고 그 상태를 지속적으로 관리하는 역할을 수행한다.

2. 마스터 노드(Master Node) : 항구의 관제 시스템

  • 각 선박의 상태를 추적하고, 어떤 컨테이너가 어디로 가야 할지 계획하고 관리하는 역할을 한다.
  • 즉, 마스터 노드는 클러스터를 총괄 관리하는 역할을 수행하며, 클러스터 내 각 작업자 노드와 실행 중인 Pod에 대한 상태를 추적하고, 워크로드가 적절한 노드에 배치되도록 스케줄링 및 리소스 할당을 관리한다.
  • 이를 위해 Kube-API Server, Scheduler, Controller 등의 컨트롤 플레인 구성 요소(Control plane components)를 사용한다.

3. etcd : 항구의 데이터 저장소

  • etcd는 고가용성 키-값(key-value) 스토어로, 클러스터 전체 정보를 저장하는 항구의 데이터 저장소이다.
  • 선박에 실린 컨테이너 정보, 출발 시간, 컨테이너 상태 등의 모든 데이터를 저장하여 클러스터가 안정적으로 운영되도록 지원한다.

4. 스케줄러(Scheduler) : 선박 적재 계획자

  • 스케줄러는 적재 가능한 컨테이너와 선박을 매칭하는 적재 계획자이다.
  • 노드의 리소스 요구사항, 용량, 정책 등을 고려하여 적절한 작업자 노드를 찾아 컨테이너를 배치한다.

5. 컨트롤러(Controller) : 각 부서 사무실

  • 컨트롤러는 클러스터 상태를 원하는 방식으로 유지하기 위해 자동으로 관리 작업을 수행하는 역할을 하며, 항구의 여러 부서 사무실처럼 각기 다른 기능을 수행하는 여러 종류의 컨트롤러가 있다.
  • Node Controller : 노드를 클러스터에 온보딩하거나, 노드의 상태를 지속적으로 모니터링하고 관리한다.
  • Raplica Controller : 특정 애플리케이션의 컨테이너 수가 항상 지정된 수로 유지되도록 보장한다.
  • 이처럼 Controller는 클러스터 내 다양한 리소스의 상태를 확인하고, 필요할 때 자동으로 조치하여 클러스터의 안정성을 유지하는 역할을 한다.

6. Kube-API Server : 중앙 관제소

  • Kube-API Server는 선박의 중앙 관제소의 역할을 한다.
  • 모든 작업을 조율하고 클러스터의 상태를 지속적으로 업데이트하며 작업자 노드와 통신하여 필요한 작업을 실행한다.

7. kubelet : 선장의 역할

  • kubelet은 각 작업자 노드에서 실행되는 에이전트로 선박의 선장과 같은 역할은 한다.
  • kubelet은 Kube-API Server로부터 지시를 받아 컨테이너를 배포하거나 제거하고, 컨테이너와 노드의 상태를 보고하여 최신 정보를 제공한다.

8. kube-proxy : 네트워크 연결 담당

  • kube-proxy는 작업자 노드 간의 통신을 지원하는 네트워크 연결 담당이다.
  • 이를 통해 작업자 노드에 배치된 컨테이너가 서로 원활하게 통신할 수 있도록 네트워크 규칙을 적용한다.

9. 컨테이너 런타임(Container Runtime) : 컨테이너 엔진

  • 컨테이너 런타임 엔진(Docker, containerd 등)은 클러스터 내 모든 노드에 설치되어 컨테이너를 실행할 수 있도록 한다.
  • 마스터 노드도 컨트롤 플레인 구성 요소를 컨테이너로 호스팅할 수 있다.

Reference

https://kubernetes.io/docs/concepts/architecture/

https://www.udemy.com/course/certified-kubernetes-administrator-with-practice-tests