쿠버네티스(Kubernetes)는 컨테이너화된 어플리케이션의 배포, 확장, 관리를 자동화하는 오픈소스 컨테이너 오케스트레이션 플랫폼이다. 이는 구글의 내부 컨테이너 오케스트레이션 시스템인 Borg에서 비롯되었다. Borg는 구글 내 수천 개의 어플리케이션 배포를 관리했으며, 2014년 구글은 Borg의 오픈소스 버전을 공개하면서 Kubernetes가 시작되었다.
Kubernetes는 "Kubernetes"의 긴 이름을 줄여서 작명된 것으로, "k8s"는 첫 글자 'k'와 마지막 글자 's' 사이에 있는 8개의 글자를 대체한다. 이같은 다른 예시로는 i18n은 국제화, l10n은 로컬라이제이션 등이 있다.
Kubernetes 클러스터는 컨테이너화된 어플리케이션을 실행하는 노드라는 여러 대의 컴퓨터로 구성된다.
클러스터는 제어 평면(control plane)과 일련의 워커 노드(worker nodes)로 이루어져 있다.
제어 평면은 클러스터의 상태를 관리하고, 워커 노드는 컨테이너화된 어플리케이션 워크로드를 실행한다. Pod는 Kubernetes에서 가장 작은 배포 가능한 단위이며, Kubernetes 제어 평면에서 생성하고 관리된다. Pod는 하나 이상의 컨테이너에 대한 공유 스토리지와 네트워킹을 제공한다.
제어 평면은 API 서버, etcd, 스케줄러, 그리고 컨트롤러 매니저와 같은 여러 가지 코어 컴포넌트로 구성된다. API 서버는 제어 평면과 클러스터의 나머지 부분 간의 기본 인터페이스 역할을 하며, RESTful API를 노출함으로써 클라이언트가 제어 평면과 상호 작용하고 클러스터 관리 요청을 제출할 수 있다.
etcd는 API 서버와 제어 평면의 다른 컴포넌트가 클러스터에 대한 정보를 저장하고 검색하기 위해 사용하는 분산형 키-값 저장소이다.
쿠버네티스는 언제 사용해야 할까? 소프트웨어 엔지니어링에서 많은 것들과 마찬가지로, 이는 모두 트레이드오프에 관한 문제이다.
쿠버네티스의 이점으로는 확장성과 높은 가용성, 셀프 힐링, 자동 롤백, 수평 확장이 있다. 이를 통해 필요에 따라 애플리케이션을 빠르게 확장하거나 축소시킬 수 있어서 수요 변화에 대처할 수 있다.
쿠버네티스는 또한 이식성이 뛰어나기 때문에 기반이 되는 인프라에 상관없이 일관되고 신뢰성있는 방식으로 애플리케이션을 배포하고 관리하는 데 도움이 된다. 쿠버네티스는 애플리케이션을 패키지화하고 배포하며 관리하는 데 일관된 방식을 제공한다.
쿠버네티스의 단점으로는 복잡성과 비용이 있다. 쿠버네티스를 설정하고 운영하는 것은 복잡하며, 제대로 된 쿠버네티스 환경을 설정하고 관리하기 위해서는 높은 전문성과 리소스가 필요하다.
또한 위에서 언급한 모든 기능을 지원하기 위해 일정 이상의 최소한의 리소스를 필요로 하기 때문에, 많은 소규모 조직에게는 과도할 수 있다.
하지만 아마존 EKS, Google Cloud의 GKE, Microsoft Azure의 AKS와 같은 클라우드 제공 업체에서 제공하는 관리형 쿠버네티스 서비스를 사용하면, 제어 평면의 관리를 관리형 쿠버네티스 서비스에게 위탁함으로써 기본 인프라에 대해 걱정하지 않고 쿠버네티스 애플리케이션을 실행할 수 있다.