Kubernetes 개요
Kubernetes는 컨테이너화된 애플리케이션의 배포, 확장, 관리를 자동화하는 오픈소스 플랫폼입니다. 2014년 Google이 오픈소스로 공개했으며, 이름은 그리스어로 "조타수(helmsman)"를 의미합니다.
- 확장성: 수천 개의 컨테이너를 관리할 수 있는 구조
- 이식성: 온프레미스, 퍼블릭 클라우드, 하이브리드 환경 모두 지원
- 커뮤니티 중심 발전: CNCF(Cloud Native Computing Foundation) 주도로 빠르게 발전
Kubernetes가 필요한 이유
컨테이너는 애플리케이션을 패키징하고 배포하는 훌륭한 방법이지만, 실제 운영 환경에서는 다음과 같은 문제가 발생합니다.
- 장애 복구(컨테이너가 죽으면 자동 재기동)
- 서비스 디스커버리 및 로드밸런싱
- 무중단 배포 및 롤백
- 리소스 최적화
Kubernetes는 이런 운영 이슈를 체계적으로 해결합니다. 복잡한 분산 시스템의 구축과 운영을 프레임워크 수준에서 지원하는 것이죠.
Kubernetes 주요 기능
1. 서비스 디스커버리와 로드밸런싱
- Kubernetes는 DNS 이름 또는 자체 IP를 통해 Pod(컨테이너 집합)에 접근할 수 있게 합니다.
- 트래픽이 많을 경우 로드밸런서를 통해 네트워크 부하를 분산합니다.
2. 스토리지 오케스트레이션
- 로컬 스토리지, 퍼블릭 클라우드 스토리지(AWS EBS, GCP Persistent Disk 등)를 자동으로 마운트할 수 있습니다.
3. 자동화된 롤아웃 및 롤백
- 선언적 방식(Declarative Approach)으로 원하는 상태를 정의하면, Kubernetes가 실제 상태를 점진적으로 맞춰갑니다.
4. 자동 리소스 배치 (Bin Packing)
- 컨테이너별 CPU, 메모리 요청량을 기반으로 최적화된 노드에 컨테이너를 배치합니다.
5. 셀프 힐링(Self-Healing)
- 실패한 컨테이너를 자동으로 재시작하거나 교체합니다.
- 상태 확인이 실패한 컨테이너는 외부에 노출하지 않습니다.
6. 보안 및 설정 관리
- 비밀번호, OAuth 토큰, SSH 키 등 민감한 정보를 안전하게 저장하고 배포할 수 있습니다.
7. 수평적 확장
- 명령어, UI, 또는 CPU 사용량을 기반으로 Pod 수를 자동 확장하거나 축소합니다.
Kubernetes는 무엇이 아닌가
- PaaS가 아님: 전체 개발 플랫폼을 제공하지 않고, 필요한 기능만 제공합니다.
- CI/CD 툴이 아님: 소스코드 빌드 및 배포는 외부 시스템과 통합해야 합니다.
- 어플리케이션 서비스 제공자가 아님: 데이터베이스, 캐시 같은 서비스는 직접 운영하거나 별도 배포해야 합니다.
- 중앙집중식 오케스트레이터가 아님: 다양한 컨트롤러들이 비동기적으로 상태를 유지합니다.
Kubernetes의 역사적 배경
1. 전통적 서버 환경
- 물리 서버 위에 여러 앱이 동작 → 리소스 경합 및 비효율 문제
2. 가상화 시대
- VM 도입 → 자원 격리 및 효율 개선, 하지만 무겁고 느림
3. 컨테이너 시대
- OS 공유 기반 경량화 → 빠른 배포, 높은 이식성, 리소스 최적화
컨테이너 기술의 급격한 발전은 복잡한 컨테이너 환경을 운영할 수 있는 관리 시스템(Kubernetes)의 등장을 자연스럽게 이끌었습니다.