- Published on
Kubernetes 입문편: 쿠버네티스는 왜 사용하는데요?
- Authors

- Name
- Justart
목차
- Kubernetes가 필요한 배경
- Kubernetes가 해결하는 운영 과제
- 정리
1. Kubernetes가 필요한 배경
Docker를 통해 우리는 애플리케이션 실행 환경을 표준화했다. 컨테이너는 애플리케이션과 그 실행에 필요한 모든 요소를 하나의 패키지로 묶어주며, 환경 불일치 문제를 해결해준다.
하지만 MSA 환경에서는 “실행”보다 더 중요한 문제가 등장한다. 컨테이너를 어떻게 안정적으로 운영할 것인가?
컨테이너 실행과 운영은 다른 문제
Docker는 컨테이너를 실행하는 데 매우 적합한 도구다.
그러나 다음과 같은 운영 요구사항을 기본적으로 해결해주지는 않는다.
- 컨테이너가 죽었을 때 자동 복구
- 특정 개수의 인스턴스를 항상 유지
- 트래픽 증가 시 자동 확장
- 무중단 배포
- 서비스 간 네트워크 관리
MSA 환경에서는 이러한 요구사항이 기본 조건이 된다.
MSA 환경에서 발생하는 운영 복잡성
MSA 환경에서는 서비스가 분리된다. 서비스가 분리된다는 것은 곧 다음을 의미한다.
- 서비스 개수 증가
- 배포 단위 증가
- 네트워크 호출 증가
- 장애 지점 증가
각 서비스는 독립적으로 배포되고 실행된다. 하지만 운영 관점에서는 다음 질문이 발생한다.
- 각 서비스는 몇 개의 인스턴스로 유지할 것인가?
- 특정 서비스에 트래픽이 몰리면 어떻게 확장할 것인가?
- 장애가 발생하면 누가 복구할 것인가?
- 새로운 버전 배포 시 다운타임을 어떻게 방지할 것인가?
이 지점에서 “단순 컨테이너 실행”은 더 이상 충분하지 않다.
2. Kubernetes가 해결하는 운영 과제
Kubernetes는 운영 환경에서 반복적으로 발생하는 운영 작업을 자동화해준다.
운영 기준을 자동으로 유지해야 하는 이유
운영 환경에서는 단순히 컨테이너를 실행하는 것이 아니라 정해둔 운영 기준을 자동으로 유지하는 것이 중요하다.
예를 들어:
- 어떤 서비스는 항상 3개의 인스턴스를 유지한다.
- CPU 사용량이 일정 수준을 넘으면 자동 확장한다.
- 새로운 버전 배포 시 점진적으로 교체한다.
이러한 요구사항은 사람이 직접 관리하기 어렵다.
지속적으로 상태를 감시하고, 문제가 생기면 자동으로 복구하는 시스템이 필요하다.
Kubernetes의 역할
Kubernetes의 핵심 개념은 다음과 같다.
IMPORTANT
사용자가 “원하는 상태”를 선언하면 Kubernetes가 현재 상태를 지속적으로 관찰하고, 원하는 상태로 수렴시킨다.
이 과정은 내부적으로 다음과 같은 기능을 포함한다.
- 컨테이너 자동 복구(Self-healing)
- 수평 확장(Horizontal Scaling)
- 무중단 배포(Rolling Update)
- 서비스 디스커버리(Service Discovery)
- 내부 로드밸런싱
즉, Kubernetes는 컨테이너 실행 자체를 대체하는 것이 아니라, 컨테이너 운영을 자동화하는 계층이다.
Docker와 Kubernetes는 어떻게 함께 쓰는가
앞서 본 운영 문제를 기준으로 보면 두 기술의 역할은 명확하게 나뉜다.
두 기술은 서로를 대체하는 관계가 아니라, 각기 다른 역할을 수행하는 보완적인 기술이다.
- Docker → 컨테이너를 생성하고 실행하는 기술
- Kubernetes → 컨테이너를 클러스터 환경에서 운영하는 시스템
MSA 환경에서는 서비스 수가 증가할수록 운영 자동화 계층이 반드시 필요해진다.
그 역할을 수행하는 것이 Kubernetes다.
3. 정리
이번 글에서는 Kubernetes가 왜 필요한지, 그리고 Docker와 어떤 관계인지에 초점을 맞춰 정리했다. 핵심은 단순한 컨테이너 실행만으로는 MSA 환경의 운영 문제를 해결하기 어렵다는 점이다.
Kubernetes는 원하는 상태를 선언하면 현재 상태를 지속적으로 맞춰주는 방식으로 복구, 확장, 배포, 네트워크 같은 운영 복잡성을 줄여준다.
다음 글에서는 Kubernetes의 핵심 리소스와 동작 방식을 다루고, 마지막 글에서는 Minikube로 로컬 Kubernetes 환경을 구성하는 과정을 정리할 예정이다.