공식문서에 나와있는 쿠버네티스의 정의는 다음과 같습니다.
Kubernetes is a portable, extensible, open source platform for managing containerized workloads and services, that facilitates both declarative configuration and automation. It has a large, rapidly growing ecosystem. Kubernetes services, support, and tools are widely available.
쿠버네티스란 컨테이너화된 워크로드와 서비스를 관리하기 위한 이식 및 확장이 가능하고 선언적 구성과 자동화를 지원하는 오픈소스 플랫폼입니다.
하지만, 위의 정의를 통해서는 쿠버네티스의 의미가 잘 와 닿지는 않습니다. 그렇다면 "왜 쿠버네티스가 필요하게 되었는지, 이전의 플랫폼과는 어떤 차이점이 있는지"를 알아보겠습니다.
배포 방법의 변화를 3단계로 구분해 살펴보겠습니다.
1. 전통적인 배포 시대
초기 조직은 애플리케이션을 물리 서버에서 실행했었다. 한 물리 서버에서 여러 애플리케이션의 리소스 한계를 정의할 방법이 없었기에, 리소스 할당의 문제가 발생했다. 예를 들어 물리 서버 하나에서 여러 애플리케이션을 실행하면, 리소스 전부를 차지하는 애플리케이션 인스턴스가 있을 수 있고, 결과적으로는 다른 애플리케이션의 성능이 저하될 수 있었다.
이에 대한 해결책으로 서로 다른 여러 물리 서버에서 각 애플리케이션을 실행할 수도 있다. 그러나 이는 리소스가 충분히 활용되지 않는다는 점에서 확장 가능하지 않았으며, 조직이 많은 물리 서버를 유지하는 데에 높은 비용이 들었다.
2. 가상화된 배포 시대
위 전통적인 배포의 문제점에 대한 해결책으로 가상화가 도입되었다. 이는 단일 물리 서버의 CPU에서 여러 가상 시스템 (VM)을 실행할 수 있게 한다. 가상화를 사용하면 VM간에 애플리케이션을 격리하고 애플리케이션의 정보를 다른 애플리케이션에서 자유롭게 액세스할 수 없으므로, 일정 수준의 보안성을 제공할 수 있다.
가상화를 사용하면 물리 서버에서 리소스를 보다 효율적으로 활용할 수 있으며, 쉽게 애플리케이션을 추가하거나 업데이트할 수 있고 하드웨어 비용을 절감할 수 있어 더 나은 확장성을 제공한다. 가상화를 통해 일련의 물리 리소스를 폐기 가능한(disposable) 가상 머신으로 구성된 클러스터로 만들 수 있다.
각 VM은 가상화된 하드웨어 상에서 자체 운영체제를 포함한 모든 구성 요소를 실행하는 하나의 완전한 머신이다.
3. 컨테이너 개발 시대
컨테이너는 VM과 유사하지만 격리 속성을 완화하여 애플리케이션 간에 운영체제(OS)를 공유한다. 그러므로 컨테이너는 가볍다고 여겨진다. VM과 마찬가지로 컨테이너에는 자체 파일 시스템, CPU 점유율, 메모리, 프로세스 공간 등이 있다. 기본 인프라와의 종속성을 끊었기 때문에, 클라우드나 OS 배포본에 모두 이식할 수 있다.
💡 VM과 Containter의 차이점
VM은 자체 운영체제를 가지고 있지만, 컨테이너는 별도의 운영체제가 필요하지 않습니다.
컨테이너를 통한 배포 방식을 전통적인 배포 방식과 비교해보자면, 하나의 OS위에 프로그램을 여러개 구동시킨 것과 별 차이가 없어보이지만, 중요한 기술적인 차이점이 있습니다.
각 프로그램들이 “이 컴퓨터에서는 나만 구동되고 있다" 라고 판단할 수 있도록, 실제로 두 프로그램간에 간섭을 일으킬 수 없는 장벽을 치고, 동시에 OS는 각 프로그램들이 사용할 수 있는 CPU, 메모리 등의 자원 또한 독립적으로 사용할 수 있도록 할당하고 관리합니다.
물론 OS관점에서 보자면 둘다 OS 상에서 구동되는 프로그램이긴 하지만요. 이와 같은 컨테이너 동작 방식을 OS 커널을 공유하는 가상화 라고 하기도 합니다.
도커의 등장으로 컨테이너 기반 배포 방식이 보편화되었고, 많은 서비스들이 도커를 활용하여 이미지로 관리되기 시작했습니다. 이미지가 점점 많아지면서, 관리해야하는 컨테이너와 서버들 또한 많아지게 되었습니다.
그래서 이러한 컨테이너들의 관리를 자동화할 도구(컨테이너 오케스트레이션 툴)의 필요성이 대두되었고, 쿠버네티스 역시 이러한 컨테이너 오케스트레이션 툴 중 하나로, 현재 가장 대중적으로 사용되는 툴입니다. 쿠버네티스는 분산 시스템을 탄력적으로 실행하기 위한 프레임 워크를 제공하며, 애플리케이션의 확장과 장애 조치를 처리하고, 배포 패턴 등을 제공합니다.