카테고리 없음

Kubernetes Architecture 정리

make-min 2025. 2. 26. 13:00
반응형

1. 쿠버네티스(Kubernetes)란? 🤖

쿠버네티스(Kubernetes, K8s)는 컨테이너화된 애플리케이션을 배포하고 관리하기 위한 오픈소스 오케스트레이션 플랫폼이다. 컨테이너가 증가함에 따라, 이를 효율적으로 배포, 운영 및 확장할 수 있는 도구가 필요해졌으며, 쿠버네티스는 이러한 요구사항을 해결하는 핵심 기술이다.

주요 기능 ✨

  • 자동 배포 및 롤백: 애플리케이션의 새로운 버전을 배포하고, 문제가 발생하면 자동으로 이전 상태로 롤백 가능 🔄
  • 로드 밸런싱 및 서비스 디스커버리: 클러스터 내에서 트래픽을 균형 있게 분배하고, 서비스 탐색 기능 제공 ⚖️
  • 자동화된 스케일링: 트래픽 증가에 따라 컨테이너 수를 자동 조절 가능 (Horizontal Pod Autoscaler, HPA) 📈
  • 셀프 힐링(Self-healing): 장애가 발생한 컨테이너를 자동으로 재시작하여 서비스 안정성 보장 🩹
  • 비밀 정보 및 설정 관리: 시크릿(Secret) 및 설정(ConfigMap)을 사용하여 보안 및 설정을 효율적으로 관리 🔒

2. 쿠버네티스 클러스터의 기본 구조 🏗️

쿠버네티스 클러스터는 크게 마스터 노드(Master Node) 와 작업자 노드(Worker Node) 로 구성된다.

 
쿠버네티스 클러스터 아키텍처

2.1. 마스터 노드 (Master Node) 🎮

마스터 노드는 클러스터 전체를 관리하며, 핵심적인 컨트롤 플레인(Control Plane) 컴포넌트들이 실행된다.

(1) API 서버 (Kube API Server) 🌐

  • 클러스터의 진입점으로, 모든 내부 및 외부 요청을 처리하는 역할
  • kubectl 또는 다른 클라이언트가 클러스터와 통신할 때 API 서버를 통해 명령 실행

(2) etcd 📚

  • 쿠버네티스의 모든 상태 정보를 저장하는 Key-Value Store 데이터베이스
  • 클러스터의 구성 정보, 배포된 애플리케이션 정보, 네트워크 설정 등이 저장됨
  • 고가용성을 위해 다중 노드로 구성 가능

(3) 스케줄러 (Kube Scheduler) 📋

  • 클러스터 내에서 새로운 Pod가 어느 작업자 노드에 배치될지를 결정
  • 스케줄링 기준: 리소스 가용성, 노드 상태, 정책 설정, 테인트/톨러레이션(Taint/Toleration) 등

(4) 컨트롤러 매니저 (Kube Controller Manager) 🔄

  • 여러 컨트롤러(Controller)들을 실행하는 컴포넌트
  • 주요 컨트롤러:
    • 노드 컨트롤러: 노드 상태 모니터링 및 장애 감지
    • 레플리케이션 컨트롤러: 지정된 수의 Pod가 항상 실행되도록 보장
    • 엔드포인트 컨트롤러: 서비스와 관련된 Pod의 네트워크 엔드포인트 관리
    • 서비스 어카운트 & 토큰 컨트롤러: 인증 및 권한 관리

2.2. 작업자 노드 (Worker Node) 🏭

작업자 노드는 실제 애플리케이션 컨테이너가 실행되는 곳으로, 다음과 같은 핵심 컴포넌트로 구성된다.

(1) 쿠블렛 (Kubelet) 🤖

  • 각 노드에서 실행되는 에이전트로, API 서버의 명령을 받아 Pod를 실행 및 관리
  • 컨테이너 상태를 주기적으로 체크하고, 장애 발생 시 복구

(2) Kube Proxy 🌉

  • 각 노드에서 네트워크 규칙을 관리하여 서비스 간 통신을 지원
  • 클러스터 내 Pod 간 네트워크 트래픽을 라우팅하고, 외부 트래픽을 적절한 서비스로 전달

(3) 컨테이너 런타임(Container Runtime) 🐳

  • 컨테이너를 실행하기 위한 소프트웨어
  • 대표적인 런타임: Docker, containerd, CRI-O 등

3. 쿠버네티스의 동작 과정 🔄

  1. 사용자가 kubectl apply -f deployment.yaml을 실행하면 API 서버가 요청을 처리함. 📝
  2. API 서버는 요청을 etcd에 저장하고, 스케줄러가 적절한 작업자 노드를 선정함. 💾
  3. Kubelet이 API 서버의 명령을 받아 컨테이너 런타임을 통해 컨테이너를 실행. 🚀
  4. Kube Proxy가 네트워크 연결을 설정하여, 다른 Pod 또는 서비스와 통신할 수 있도록 지원. 🔌
  5. 컨트롤러 매니저가 Pod 상태를 모니터링하고, 장애 발생 시 자동으로 복구. 🔍

4. 쿠버네티스의 서비스 네트워킹 🌐

쿠버네티스에서 네트워크는 크게 Pod 네트워크와 서비스 네트워크로 나뉜다.

4.1. Pod 네트워크 🔄

  • 각 Pod는 고유한 IP를 가지며, 동일한 네임스페이스 내에서는 직접 통신 가능
  • 쿠버네티스 네트워크 정책을 사용하여 특정 트래픽만 허용 가능

4.2. 서비스 (Service) 🌟

  • Pod의 IP 주소는 동적으로 변경될 수 있기 때문에, 서비스(Service)를 사용하여 안정적인 네트워크 엔드포인트를 제공
  • 대표적인 서비스 유형:
    • ClusterIP: 클러스터 내부에서만 접근 가능 🔒
    • NodePort: 노드의 특정 포트를 통해 외부 접근 가능 🚪
    • LoadBalancer: 클라우드 제공자의 로드 밸런서를 통해 트래픽 분산 ⚖️
    • Headless Service: DNS를 통해 직접 Pod로 라우팅 가능 🧭

5. 쿠버네티스의 스토리지 관리 💽

5.1. 볼륨 (Volumes) 📂

  • 컨테이너가 재시작되어도 데이터를 유지할 수 있도록 지원
  • 대표적인 볼륨 유형:
    • emptyDir: Pod가 삭제되면 데이터도 삭제됨 ⏱️
    • hostPath: 노드의 특정 디렉터리를 마운트 🖥️
    • Persistent Volume (PV) & Persistent Volume Claim (PVC): 클러스터 레벨에서 지속 가능한 스토리지 관리 💾

6. 쿠버네티스 배포 전략 🚀

 
쿠버네티스 배포 전략
 

애플리케이션을 안전하게 배포하는 전략이 중요하다.

  • 롤링 업데이트(Rolling Update): 점진적으로 새 버전 배포, 무중단 배포 가능 🔄
  • 블루-그린 배포(Blue-Green Deployment): 새로운 환경을 별도로 배포 후 트래픽 전환 🔵🟢
  • 카나리아 배포(Canary Deployment): 일부 사용자에게만 새 버전 제공 후 점진적으로 확장 🐤

7. 결론 🎯

쿠버네티스는 현대적인 애플리케이션 운영을 위한 필수적인 기술이다. 클러스터의 구조와 각 구성 요소의 역할을 이해하면, 더 효과적으로 쿠버네티스를 활용할 수 있다. 이를 기반으로 실습을 병행하며 익히는 것이 중요하다. 🚀

반응형