쿠버네티스(Kubernetes)는 도커(Docker)와 같은 컨테이너 애플리케이션을 관리하기 위한 오픈소스 플랫폼입니다. 여러 호스트에 걸쳐 컨테이너를 자동화하거나 확장해야 할 때, 쿠버네티스는 배포 속도를 크게 높여 줍니다. 이를 위해 쿠버네티스 API 같은 내부 구성 요소나, 쿠버네티스 위에서 동작하는 서드파티 확장 기능을 활용합니다.
이 글에서는 쿠버네티스의 기본 개념과 함께, Azure와 Google Cloud 같은 클라우드 제공업체와 벤더들이 쿠버네티스 서비스를 잇달아 출시하면서 서버 시장에 일으킨 거대한 변화가 무엇인지 살펴봅니다.
쿠버네티스: 간략한 역사
쿠버네티스는 구글이 오픈소스 커뮤니티에 선물한 프로젝트 중 하나입니다. 이 컨테이너 플랫폼은 10년 넘게 구글의 내부 프로젝트로 운영되었던 '보그(Borg)'의 일부였습니다. 보그를 통해 구글은 서로 다른 애플리케이션에서 발생하는 수천 개의 작업('Borglet'이라 불림)을 클러스터 전반에서 관리할 수 있었습니다. 그 목적은 런타임 기능의 고가용성을 보장하면서 물리 머신과 가상머신을 최대한 효율적으로 활용하는 것이었습니다.

이러한 아키텍처는 높은 가용성을 효율적으로 확보하고자 하는 다른 기업들에게도 큰 영향을 미쳤습니다. 2015년경 쿠버네티스 1.0이 공개되자마자 구글은 해당 기술에 대한 통제권을 내려놓았습니다. 현재 쿠버네티스는 리눅스 재단(Linux Foundation) 산하 조직인 CNCF(Cloud Native Computing Foundation)가 관리하고 있습니다.

쿠버네티스의 작동 방식
보그 프로젝트의 아이디어를 계승하면서 'Borglet'은 '파드(Pod)'라는 개념으로 발전했습니다. 파드는 컨테이너를 담는 스케줄링 단위로, 개별 IP 주소를 가지며 컨테이너가 CPU, 메모리, 스토리지 등의 자원이 필요할 때마다 그 역할을 수행합니다.

파드는 라운드 로빈(round-robin) 방식으로 트래픽을 로드 밸런싱해 높은 가용성을 보장합니다. 또한 파드는 '워커 노드(worker node)', 즉 '미니언(minion)'이라고도 불리는 머신(또는 가상머신) 안에 배치됩니다. 그리고 '마스터 노드(master node)'가 쿠버네티스 API를 통해 컨테이너 오케스트레이션을 수행하며 전체 클러스터를 제어합니다. 도커는 각 워커 노드에서 실행되며, 이미지를 다운로드하고 컨테이너를 시작하는 역할을 담당합니다.

쿠버네티스 클러스터에 API로 연결하려면 kubectl이라는 CLI 명령어를 사용합니다. 마스터 노드가 워커 노드에 전달하는 모든 지시를 이 하나의 명령어가 실행하기 때문에 매우 중요한 도구입니다. kubectl을 익히는 데는 어느 정도 학습이 필요하지만, 한번 익혀 두면 쿠버네티스 클러스터를 자유롭게 활용할 수 있습니다. 참고로 쿠버네티스와 도커는 모두 Go 프로그래밍 언어로 작성되었습니다.
주요 활용 분야
쿠버네티스는 머신 활용 효율이 매우 뛰어나 서버 및 데이터 센터 비용을 획기적으로 절감할 수 있습니다. 대표적인 활용 사례는 다음과 같습니다.
- 애플리케이션 서버 관리: 대부분의 애플리케이션 서버에는 보안, 설정 관리, 업데이트 등이 필요하며, 이러한 운영을 쿠버네티스로 처리할 수 있습니다.
- 자동 롤아웃 및 롤백: 여러 엔드 노드에 걸친 제품 배포(rollout)나 되돌리기(rollback)를 자동화할 수 있어 더 이상 걱정할 필요가 없습니다.
- 스테이트리스(stateless) 앱 배포: 웹 애플리케이션을 원격으로 제어할 수 있습니다. 예를 들어 쿠버네티스를 활용하면 Nginx 서버를 스테이트리스 방식으로 손쉽게 운영할 수 있습니다.
- 스테이트풀(stateful) 앱 배포: MySQL 데이터베이스처럼 상태를 유지해야 하는 앱도 실행할 수 있습니다.
- API 객체 저장: 다양한 스토리지 요구 사항에 대해 컨테이너 원칙을 적용해 최적의 저장 환경을 보장합니다.
- 즉시 사용 가능(out-of-the-box): 서비스 디스커버리, 로깅·모니터링, 인증과 같은 필수 기능을 기본적으로 제공합니다.
- IoT 애플리케이션: 대규모 확장(scaling) 능력 덕분에 IoT 분야에서도 활용이 빠르게 늘고 있습니다.
- 어디서든 실행: 쿠버네티스는 환경을 가리지 않고 실행할 수 있으며, 실제로 휴대용 케이스 안에서도 구동 가능합니다.

마무리
쿠버네티스의 궁극적인 목표는 컴퓨팅 자원을 최대한 활용하는 것입니다. 여러 호스트에 걸쳐 컨테이너를 오케스트레이션할 수 있기 때문에 엔드 노드에서 자원 부족이나 장애가 발생하기 어렵습니다. 마스터 노드에서 명령 한 번만 내리면 애플리케이션이 자동으로 확장되는데, 이러한 자동 확장 기능은 혁명적이라고 해도 과언이 아닙니다.
쿠버네티스에 대해 더 깊이 알아보고 싶다면, 튜토리얼을 제공하는 공식 웹사이트(kubernetes.io)를 방문해 보시길 권합니다.