Kubernetes/Kubernetes Basics

쿠버네티스(Kubernetes) 아키텍처

ygtoken 2025. 3. 18. 10:34
728x90

 

안녕하세요, 오늘은 클라우드 네이티브 환경의 핵심 기술인 쿠버네티스(Kubernetes)의 아키텍처에 대해 자세히 알아보고자 합니다. 컨테이너 오케스트레이션 시장의 표준으로 자리 잡은 쿠버네티스의 내부 구조를 이해하면 효율적인 시스템 설계와 운영에 큰 도움이 됩니다.

목차

  1. 쿠버네티스란?
  2. 쿠버네티스 아키텍처 개요
  3. 컨트롤 플레인 컴포넌트
  4. 워커 노드 컴포넌트
  5. 쿠버네티스 작동 원리
  6. 핵심 리소스 오브젝트
  7. 쿠버네티스 아키텍처의 장점
  8. 마치며

쿠버네티스란?

쿠버네티스(Kubernetes, K8s)는 컨테이너화된 애플리케이션의 배포, 확장, 관리를 자동화하는 오픈소스 플랫폼입니다. 구글이 자사의 Borg 시스템을 기반으로 개발하여 2014년 오픈소스로 공개했으며, 현재는 Cloud Native Computing Foundation(CNCF)에서 관리하고 있습니다.

쿠버네티스는 마이크로서비스 아키텍처, DevOps, CI/CD 파이프라인 등 현대적인 애플리케이션 개발 및 운영 방식과 완벽하게 조화를 이루며, 다양한 환경(온프레미스, 퍼블릭/프라이빗 클라우드)에서 일관된 방식으로 애플리케이션을 실행할 수 있게 해줍니다.

쿠버네티스 아키텍처 개요

쿠버네티스 클러스터는 크게 **컨트롤 플레인(Control Plane)**과 **워커 노드(Worker Nodes)**로 구성됩니다. 컨트롤 플레인은 클러스터의 두뇌 역할을 하며, 워커 노드는 실제 애플리케이션이 실행되는 곳입니다.

 

컨트롤 플레인 컴포넌트

컨트롤 플레인(마스터 노드라고도 함)은 클러스터 관리를 담당하는 핵심 구성 요소들로 이루어져 있습니다:

1. API 서버(kube-apiserver)

  • 쿠버네티스 시스템의 프론트엔드
  • RESTful API를 통해 클러스터와 상호작용
  • 모든 명령과 쿼리의 게이트웨이 역할
  • 인증, 권한 부여, 입력 검증 등을 담당

2. etcd

  • 분산형 키-값 저장소
  • 클러스터의 모든 구성 데이터, 상태 정보 저장
  • 고가용성을 위해 여러 인스턴스로 실행 가능
  • 클러스터의 "진실의 원천(source of truth)" 역할

3. 스케줄러(kube-scheduler)

  • 새로 생성된 파드를 감지하고 실행할 노드 선택
  • 하드웨어 요구사항, 워크로드 분산, 어피니티/안티어피니티 규칙 등 고려
  • 최적의 노드 선택을 위한 복잡한 알고리즘 사용

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

  • 여러 컨트롤러 프로세스를 단일 바이너리로 실행
  • 노드 컨트롤러: 노드 상태 모니터링
  • 레플리케이션 컨트롤러: 파드 복제본 관리
  • 엔드포인트 컨트롤러: 서비스와 파드 연결
  • 서비스 어카운트 & 토큰 컨트롤러: 계정 관리

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

  • 클라우드 제공업체별 컨트롤 로직 포함
  • 클라우드 리소스(로드밸런서, 인스턴스, 스토리지 등) 관리
  • 클러스터가 클라우드 인프라와 상호작용하는 방법 제공

6. kube-dns (CoreDNS)

  • 클러스터 내부 DNS 서비스 제공
  • 서비스 디스커버리 기능 담당
  • 서비스 이름을 IP 주소로 변환
  • 쿠버네티스의 네트워킹 추상화 핵심 요소

워커 노드 컴포넌트

워커 노드는 실제 애플리케이션 워크로드가 실행되는 컴퓨팅 인스턴스입니다:

1. kubelet

  • 각 노드에서 실행되는 에이전트
  • API 서버로부터 파드 스펙(PodSpec) 수신
  • 컨테이너 실행 상태 관리 및 모니터링
  • 노드 상태를 컨트롤 플레인에 보고

2. kube-proxy

  • 네트워크 프록시
  • 각 노드에서 실행되는 네트워크 규칙 관리
  • 서비스 개념을 구현하고 파드 간 통신 가능케 함
  • iptables 또는 IPVS 모드로 동작 가능

3. 컨테이너 런타임

  • 컨테이너 실행을 담당하는 소프트웨어
  • Docker, containerd, CRI-O 등 다양한 런타임 지원
  • Container Runtime Interface(CRI)를 통해 kubelet과 통신

쿠버네티스 작동 원리

쿠버네티스의 기본적인 워크플로우는 다음과 같습니다:

  1. 사용자가 kubectl CLI 도구나 API를 통해 명령을 실행합니다.
  2. API 서버가 요청을 수신하고 인증, 권한 부여 등을 처리합니다.
  3. API 서버가 etcd에 새로운 상태를 저장합니다.
  4. 컨트롤러가 상태 변화를 감지하고 필요한 작업을 수행합니다.
  5. 스케줄러가 새 파드를 적절한 노드에 할당합니다.
  6. kubelet이 할당된 노드에서 파드를 실행합니다.
  7. kube-proxy가 네트워크 규칙을 업데이트하여 파드 접근성을 보장합니다.
  8. kube-dns가 서비스 디스커버리를 위한 DNS 레코드를 업데이트합니다.

핵심 리소스 오브젝트

쿠버네티스는 다양한 리소스 오브젝트를 통해 애플리케이션을 정의하고, 관리하고, 확장하는데 필요한 추상화를 제공합니다:

  1. 파드(Pod): 가장 작은 배포 단위로, 하나 이상의 컨테이너를 포함
  2. 레플리카셋(ReplicaSet): 지정된 수의 파드 복제본 유지
  3. 디플로이먼트(Deployment): 애플리케이션 배포 및 업데이트 관리
  4. 서비스(Service): 파드 집합에 대한 단일 액세스 포인트 제공
  5. 인그레스(Ingress): HTTP/HTTPS 라우팅 규칙 관리
  6. 컨피그맵(ConfigMap) & 시크릿(Secret): 구성 데이터 및 민감 정보 관리
  7. 네임스페이스(Namespace): 클러스터 내 가상 클러스터 분리
  8. 볼륨(Volume): 데이터 저장 및 공유

쿠버네티스 아키텍처의 장점

쿠버네티스 아키텍처는 다음과 같은 이점을 제공합니다:

  1. 선언적 구성: 원하는 상태를 정의하면 쿠버네티스가 자동으로 해당 상태 유지
  2. 자동 복구: 장애 발생 시 자동으로 복구 (자가 치유)
  3. 수평적 확장: 트래픽 증가에 따라 자동 또는 수동으로 스케일링
  4. 서비스 디스커버리: 내장된 DNS를 통한 효율적인 서비스 디스커버리
  5. 로드 밸런싱: 트래픽을 여러 파드에 분산
  6. 롤링 업데이트: 무중단 업데이트 및 롤백 지원
  7. 시크릿 및 구성 관리: 분리된 구성으로 애플리케이션 코드와 설정 분리
  8. 스토리지 오케스트레이션: 다양한 스토리지 시스템 통합

마치며

쿠버네티스는 복잡한 시스템이지만, 그 아키텍처의 각 구성 요소는 명확한 역할과 책임을 가지고 있습니다. 이 글에서 설명한 기본 아키텍처를 이해하면 쿠버네티스 클러스터를 더 효과적으로 설계, 배포 및 관리할 수 있을 것입니다.

클라우드 네이티브 환경에서 쿠버네티스는 이제 필수적인 기술이 되었습니다. 계속해서 발전하는 쿠버네티스 생태계를 따라가기 위해서는 기본 아키텍처에 대한 이해가 무엇보다 중요합니다. 이 글이 여러분의 쿠버네티스 여정에 도움이 되었기를 바랍니다.

 


참고 자료:

728x90