Docker

쿠버네티스(Kubernetes)

차가운개발 2024. 12. 23. 20:58

 

쿠버네티스는 컨테이너화된 애플리케이션의 배포, 확장 및 관리를 자동화하는 오픈 소스 플랫폼이다.

Google에서 개발하고 CNCF에 기부된 프로젝트로 현대적인 클라우드 네이티브 애플리케이션을 운영하기 위한 표준으로 자리 잡았다

 

쿠버네티스의 목적

  • 컨테이너 기반 애플리케이션을 자동으로 배포하고 관리
    클러스터에 새 버전의 애플리케이션을 쉽게 배포, 버전 롤백 자동화

  • 애플리케이션의 확장성 제공
    트래픽 증가 시 컨테이너 수를 자동으로 늘리거나 감소

  • 컨테이너의 상태를 지속적으로 모니터링하여 실패를 복구
    장애가 발생한 컨테이너를 감지하고 자동으로 재시작, 교체

  • 애플리케이션 및 인프라 상태 모니터링, 로깅, 이벤트 추적등 시스템 관찰

 

쿠버네티스의 아키텍처

Control Plane(컨트롤 플레인)

클러스터 전역 관리를 담당 애플리케이션을 원하는 상태로 유지하기 위한 두뇌 역할

 

구성 요소

  • kube-apiserver
    쿠버네티스의 프론트 엔드로 모든 명령과 질의가 이곳을 통해 이루어진다
    kubectl CLI, 대시보드 혹은 자동화 툴이 API server로 요청을 보냄
  • etcd
    분산 키-값(key-value) 저장소로 클러스터의 모든 상태 정보를 보관(파드, 서비스, 설정 등)
    고가용성을 위해 여러 노드에 분산배치 가능
  • kube-scheduler
    새로 생성된 파드를 어느 노드에 배치할지 결정(스케줄링)
    노드의 CPU, 메모리, 네트워크 사용량 등 다양한 지표를 고려

  • kube-controller-manager
    쿠버네티스의 여러 컨트롤러를 통합 실행
    클러스터 상태를 원하는 상태로 유지하기 위해 지속적으로 모니터링하고 조치

 

Worker Node(워커노드)

애플리케이션(컨테이너)을 실제로 실행하는 물리 또는 가상 머신

 

구성 요소

  • kublet
    노드에서 동작하는 에이전트, Control Plane과 통신하며 파드를 생성하고 관리
    파드의 상태를 모니터링하고 필요 시 재시작등의 조치 수행
  • kube-proxy
    네트워크 프록시로 각 노드에서 파드 간 통신, 서비스 라우팅 등을 처리
    쿠버네티스 Service 리소스를 구현하기 위해 사용

  • 컨테이너 런타임
    파드 내 컨테이너를 실제로 실행하는 소프트웨어(Docker)

 

쿠버네티스의 핵심 리소스

파드(Pod)

  • 가장 작은 배포 단위
  • 하나 이상의 컨테이너와 스터리지, 네트워크 등을 함께 묶어서 관리
  • 일반적으로 파드는 단일 컨테이너가 1:1로 대응되지만, 보조 프로세스를 위해 여러 컨테이너를 함께 둘 수 있음

디플로이먼트(Deployment)

  • 애플리케이션의 원하는 상태를 정의하는 개념
  • ex 이미지를 가진 파드를 3개 실행하라 선언
  • 쿠버네티스는 이를 보고 필요한 파드 수를 맞추거나 이미지 버전을 교체하며 롤링 업데이트 수행

레플리카셋(ReplicaSet)

  • 디플로이먼트가 원하는 파드의 개수를 유지하기 위해 사용하는 리소스
  • ex 디플로이먼트가 파드 5개를 요청하면 레플리카셋이 실제 파드를 5개 되도록 늘리거나 줄임

서비스(Service)

  • 파드에 대한 네트워크 접근을 일관되고 안정적으로 제공하는 추상화 레이어
  • 파드는 생성/삭제가 자주 일어나므로 IP가 변동되지만 Service는 고정 IP(Cluster IP) 혹은 DNS 이름을 통해 파드를 접근하도록 해줌
  • 로드밸런싱 역할도 수행

인그레스(Ingress)

  • 클러스터 외부에서 서비스에 접근하기 위한 규칙을 정의
  • HTTP/HTTPS 경로 기반 라우팅, TLS 종단, 여러 도메인에 대한 라우팅 등을 설정
  • Ingress Controller를 통해 구현함

컨피그맵 & 시크릿

  • 컨피그맵 : 애플리케이션 환경설정, 설정 파일 등을 외부화하여 관리
  • 시크릿 : 암호, 토큰, 인증서 등 민감한 정보를 암호화하여 안전하게 관리

볼륨 & 퍼시스턴트 볼륨

  • 볼륨 : 파드 내 컨테이너들이 공유할 수 있는 디스크 영역
  • 퍼시스턴스 볼륨 : 파드가 사라져도 데이터가 유지되는 영구 스터리지
  • 퍼시스턴트 볼륨 클레임 : 파드가 필요한 스토리지를 요청하는 추상화

 

동작 방식 및 특징

선언적(Declarative) 구성

  • 사용자는 어떻게가 아닌 무엇을 원하는지 선언적으로 작성(YAML 파일 등)
  • 쿠버네티스는 이를 보고 클러스터 상태를 지속적으로 조정하여 원하는 상태에 맞춘다

셀프 힐링

  • 파드가 비정상적으로 종료되면 자동으로 재시작, 노드 장애 시 다른 노드에 배포
  • 장애 복구가 자동화되어 운영자가 직접 개입해야 하는 경우를 최소화

롤링업데이트

  • 애플리케이션 버전을 새 컨테이너 이미지로 교체할 때, 순차적으로 파드를 교체
  • 문제 발생 시 기존 버전으로 롤백 가능

오토스케일링

  • Horizontal Pod Autoscaler(HPA)
    CPU, 메모리 사용량 등을 기준으로 파드 수를 자동 조절
  • Cluster Autoscaler
    노드 리소스가 부족할 때 클러스터 노드를 자동으로 추가

 

장단점

장점

  • 자동화와 확장성
    컨테이너 배포 업데이트 스케일링이 자동화되어 운영 부담 경감
  • 플랫폼 독립성
    온프레미스, 클라우드, 하이브리드 등 모두 동일한 인터페이스로 관리
  • 자체 복구로 가용성 향상

단점

  • 초기 진입 장벽이 높음
  • 과도한 복잡성을 초래할 수 있음
  • 관리 오버헤드 : 종합적인 운영 시 추가 비용과 리소스 필요