Kubernetes (K8s) 기초 개념

개요

다수의 컨테이너화된 애플리케이션을 자동으로 배포, 확장, 관리해주는 오픈소스 컨테이너 오케스트레이션 엔진입니다.

1. 등장 배경

  • 물리 서버 -> 가상화(VM) -> 컨테이너(Docker)로 발전하면서 수많은 컨테이너를 관리할 도구가 필요해졌습니다.
  • 서버 1대에 컨테이너 10개를 띄우는 것은 쉽지만, 서버 100대에 1,000개의 컨테이너를 무중단으로 관리하고 스케일링하는 것은 수동으로 불가능합니다. 이를 해결하는 것이 K8s입니다.

2. 아키텍처 구성 요소

K8s는 크게 클러스터를 관리하는 마스터(Control Plane)와 실제 애플리케이션이 도는 워커 노드(Worker Node)로 나뉩니다.

2.1 Control Plane (마스터 노드)

  • API Server: 클러스터의 중심 역할. 사용자의 모든 kubectl 명령은 API 서버를 거쳐 검증 및 실행됩니다.
  • etcd: 클러스터의 모든 설정과 상태 데이터를 저장하는 고가용성 분산 Key-Value 저장소입니다.
  • Scheduler: 노드의 자원 상태(CPU, 메모리)를 파악하여 새로운 Pod를 어떤 워커 노드에 배치할지 결정합니다.
  • Controller Manager: 시스템의 상태를 지속적으로 관찰하고, 사용자가 정의한 상태(Desired State)와 현재 상태(Current State)가 다를 경우 이를 일치시키는 작업을 수행합니다.

2.2 Worker Node (워커 노드)

  • kubelet: 마스터 노드의 명령을 받아 컨테이너를 실행하고, 컨테이너가 정상적으로 동작하는지 상태를 마스터에 보고하는 에이전트입니다.
  • kube-proxy: 노드의 네트워크 규칙(iptables 등)을 관리하고, 들어오는 트래픽을 알맞은 컨테이너로 전달합니다. (L4 네트워크 계층 역할)
  • Container Runtime: 실제 컨테이너를 실행하는 엔진입니다. (예: containerd, CRI-O)

3. 구현 도구 및 관리형 서비스

구분오픈소스 (직접 구축)상용 / 클라우드 서비스 (Managed)
로컬 테스트 환경Minikube, kind, k3sDocker Desktop K8s
프로덕션 환경kubeadm, KubesprayAWS EKS, GCP GKE, Azure AKS

4. 실제 적용 예시

대규모 트래픽에 대응하는 자동 확장

대형 라이브 스트리밍 서비스에서 금요일 밤 트래픽이 평소 대비 5배 폭증한다고 가정합니다.
기존 방식이라면 운영자가 급하게 서버를 증설해야 하지만, K8s를 도입하면 시스템이 CPU 사용량 증가를 자동으로 감지합니다.
사전에 설정된 규칙에 따라 비디오 트랜스코딩 컨테이너를 10개에서 50개로 즉시 자동 확장(Auto-scaling)하여 지연을 방지하고, 트래픽이 감소하면 다시 10개로 축소하여 클라우드 비용을 절감합니다.

5. 다음 단계