Kubernetes 기초 - 왜 쿠버네티스인가?

1. 개요

Docker만 사용할 때의 문제점

Docker만으로 컨테이너를 운영하면 다음과 같은 문제들이 발생한다:

문제 설명
스케일링 트래픽 증가 시 수동으로 컨테이너를 올리고 연결해야 함
고가용성 컨테이너가 죽으면 직접 확인하고 다시 살려야 함
서비스 디스커버리 여러 컨테이너가 서로를 어떻게 찾을 것인가?
로드밸런싱 트래픽 분산이 없으면 여러 컨테이너를 묶는 의미가 없음
배포 무중단 배포를 어떻게 구현할 것인가?

Kubernetes는 선언적 구성을 통해 이 문제들을 해결한다.


1.1 Kubernetes란?

컨테이너화된 워크로드와 서비스를 관리하기 위한 오픈소스 오케스트레이션 플랫폼

명령형 vs 선언적 구성

Docker (명령형)

docker run -d --name web -p 80:80 nginx

→ “web이라는 컨테이너에 nginx 이미지를 올려서 실행하고 포트는 80:80으로 열어”

Kubernetes (선언적)

# "나는 nginx 컨테이너가 3개 실행되길 원해"
spec:
  replicas: 3

1.2 Docker와의 관계

Kubernetes는 컨테이너 런타임 위에서 동작하며, Docker는 그 런타임 중 하나다.


2. 아키텍처 이해

2.1 클러스터 구조

Kubernetes 클러스터는 Control PlaneWorker Node로 구성된다.

Control Plane 컴포넌트

../../../  
API Server 모든 통신의 중심점. kubectl 명령을 받음
etcd 클러스터의 모든 상태를 저장하는 분산 key-value 저장소
Scheduler 새 Pod를 어느 노드에 배치할지 결정
Controller Manager 클러스터 상태를 원하는 대로 유지

Worker Node 컴포넌트

컴포넌트 역할
kubelet 노드의 에이전트. Pod의 생성/삭제를 담당

핵심 정리

  1. Kubernetes가 필요한 이유: Docker만으로는 스케일링, 고가용성, 서비스 디스커버리, 로드밸런싱, 무중단 배포가 어렵다
  2. 선언적 구성: “어떻게”가 아닌 “무엇을” 원하는지 선언하면 Kubernetes가 알아서 처리
  3. 아키텍처: Control Plane이 전체를 관리하고, Worker Node에서 실제 워크로드가 실행됨