오늘날의 서비스 사용자들은 애플리케이션이 24*7 가용하기를 바라며 개발자는 하루에도 수 차례 새로운 버전의 애플리케이션을 배포하기를 바랍니다. 컨테이너 기술을 활용하면 소프트웨어를 패키지하며 애플리케이션의 다운 타임 없이 릴리스 및 업데이트를 할 수 있습니다. 그런데, 컨테이너 기술이 애플리케이션을 포장하고 실행하는 데에 좋은 방법임이 분명하지만, 프로덕션 환경에서는 애플리케이션을 실행하는 컨테이너를 관리하고 다운 타임이 없는지 확인해야 합니다. 바로 이때, 쿠버네티스가 필요합니다.
컨테이너에 대해 자세히 알고 싶다면, (여기)를 클릭하세요!
1. Kubernetes는 무엇인가?
K8s라고도 부르는 쿠버네티스는 컨테이너화된 애플리케이션을 자동으로 배포하고 관리해 주는 오픈소스 시스템으로, Google에서 15년간 프로덕션 워크로드 운영 경험을 토대로 구축되어 커뮤니티로부터 도출된 아이디어와 방법들이 결합되어 있습니다. 결국 컨테이너화된 애플리케이션의 확장과 장애 조치를 처리하고, 배포 패턴 등의 기능을 제공할 수 있는 것입니다.
아래 영상에서 쿠버네티스 개발자 중 한 명으로, 헵티오(Heptio)창업자 겸 CTO인 조 베다가 설명하는 쿠버네티스의 개념 설명을 들을 수 있습니다.
2. 쿠버네티스가 제공하는 기능
(1) 서비스 디스커버리와 로드 밸런싱
쿠버네티스는 DNS를 사용하거나 자체 IP 주소를 사용해 컨테이너를 노출할 수 있습니다. 컨테이너에 대한 트래픽 문제로 부하가 늘어날 경우 트래픽을 로드밸런싱 하고 배포하여 배포가 안정적으로 이루어질 수 있도록 합니다. 즉, 쿠버네티스를 사용하면 익숙하지 않은 서비스 디스커버리 메커니즘을 사용하기 위해 애플리케이션을 수정할 필요가 없습니다.
(2) 스토리지 오케스트레이션
쿠버네티스를 사용하면 로컬 저장소, 공용 클라우드 공급자 등과 같이 원하는 저장소 시스템을 자동으로 탑재할 수 있습니다.
(3) 자동화된 롤아웃과 롤백
쿠버네티스는 애플리케이션 또는 애플리케이션의 설정 변경 시 점진적으로 롤아웃하는 동시에 애플리케이션을 모니터링해서 모든 인스턴스가 동시에 종료되지 않도록 보장합니다. 만약 어떤 문제가 발생했을 경우 쿠버네티스는 변경 사항을 롤백합니다.
(4) 자동화된 빈 패킹(bin packing)
리소스 요구 사항과 기타 제약 조건에 따라 컨테이너를 자동으로 배치하며 가용성은 그대로 유지합니다. 활용도를 높이고 더 많은 리소스를 절약하기 위해 중요한(critical) 워크로드와 최선의 (best-effort) 워크로드를 혼합합니다.
(5) 자동화된 복구(self-healing)
쿠버네티스는 오류가 발생한 컨테이너를 재시작하고, 노드가 죽었을 때 컨테이너를 교체하며, ‘사용자 정의 상태 검사’에 응답하지 않는 컨테이너를 제거합니다. 서비스 준비가 끝날 때까지 해당 과정을 클라이언트에게 알리지 않습니다.
(6) 시크릿과 구성 관리
쿠버네티스를 사용하면 암호, OAuth 토큰 및 SSH 키와 같은 중요한 정보를 저장하고 관리할 수 있습니다. 컨테이너 이미지를 재구성하거나 스택 구성에 시크릿을 노출하지 않고도 시크릿 및 애플리케이션 구성을 배포하고 업데이트할 수 있습니다.
3. Kubernetes 배포판 6가지
쿠버네티스는 컨테이너 오케스트레이션에서 개발자가 주로 선택하는 프로젝트로 자리 잡았을 정도로 지원도 풍부하고 좋은 평판을 유지하면서 꾸준히 발전하고 있습니다. 그런데, K8s가 무분별하게 확산되며 복잡하고 설치와 구성이 어렵다는 것은 큰 단점입니다. 따라서 컨테이너 도구와 쿠버네티스를 포용하는 솔루션을 적절하게 활용하는 지혜가 필요합니다. 아래 여섯 가지의 쿠버네티스 배포판은 EKS, GKE와 같은 클라우드 전용 서비스는 제외하고 로컬 또는 클라우드에 호스팅 되는 옵션으로 실행 가능한 소프트웨어 배포판 중심으로 살펴보았습니다.
(1) 캐노니컬 쿠버네티스 (Canonical Kubernetes)
캐노니컬(Canonical)은 자체적인 쿠버네티스 배포판을 제공합니다. 캐노니컬 쿠버네티스 배포판의 장점 중 하나는 그 근간에 우분투 리눅스 배포판이 있다는 것으로, Ubuntu를 기반으로 하여 보안 팀의 보안 패치 및 업데이트를 지원받을 수 있습니다.
(2) 도커 (Docker)
도커(Docker)는 자체 클러스터링 및 오케스트레이션 시스템인 도커 스웜(Docker Swarm)을 보유해 왔으며 오케스트레이션 도구로 쿠버네티스와 어깨를 나란히 할 수 있는 시스템이었습니다. 그런데 2017년 10월, 도커가 쿠버네티스를 통합하겠다고 발표했습니다. 도커 엔터프라이즈 3.0에는 개발자 데스크톱, 프로덕션 환경 간 쿠버네티스 버전을 일관되게 유지하는 도커 쿠버네티스 서비스가 추가됐습니다. 이는, 도커(Docker)가 복잡한 컨테이너 환경을 관리함에 있어서 스웜보다 쿠버네티스가 더 적합함을 인정한 것입니다.
(3) VM웨어 탄주 쿠버네티스 그리드(Tanzu Kubernetes Grid)
VM웨어의 탄주 애플리케이션 플랫폼(Tanzu Application Platform)은 모듈식 애플리케이션 인식 플랫폼으로 클러스터에서 소프트웨어를 빠르고 안전하게 빌드하고 배포할 수 있는 프로덕션 경로를 제공합니다. 쿠버네티스가 관련된 부분은 탄주 쿠버네티스 그리드(TKG)입니다. TKG의 핵심은 다른 VMware 제품과 통합되는 인증 쿠버네티스 배포판이라는 것입니다. 쿠버네티스가 제공하는 리소스에 대해 세밀한 제어가 필요한 경우에는 TKG를 사용하고, 일반적인 워크로드에는 탄주 애플리케이션 서비스를 사용하면 됩니다.
(4) 미란티스 쿠버네티스 엔진 (Mirantis Kubernetes Engine)
미란티스(Mirantis)는 클라우드 플랫폼 활용 시 완전한 관리형 솔루션을 제공하며 가장 중요한 코드를 프로덕션에 더 빨리 전달할 수 있을 것이라고 주장합니다. Mirantis Kubernetes Engine은 환경에 적합한 방식으로 클라우드 네이티브 애플리케이션을 구축, 실행 및 확장할 수 있는 기능을 제공합니다. 또한, 플랫폼 전반에 걸쳐 세분화된 보안 액세스 제어를 통해 효과적인 임무 분리를 보장하며 최소 권한 원칙에 따라 구축된 보안 전략을 추진할 수 있습니다.
(5) 랜처 쿠버네티스 엔진 (Rancher Kubernetes Engine (RKE))
RKE는 CNCF 인증 Kubernetes 배포판으로, K8s 리소스가 RKE와 다르더라도 CNCF 인증 K8s 배포간에 이식이 가능합니다. RKE 다음 새로운 버전(interation)으로 간주되는 RKE2는 보안과 간소화된 운영, 고급 CNI플로그인과 통합을 중점을 둔 것으로 더 큰 네트워킹 기능을 갖춘 애플리케이션, 보안 및 규정준수가 중요한 환경에 적합한 솔루션으로 이용됩니다.
RKE1과 RKE2의 주요한 차이점은 컨테이너 런타임입니다. RKE의 경우 컨테이너 런타임으로 Docker를 필요로 하고 RKE2는 Containerd에 의존합니다. 또 다른 주요한 차이점은 RKE2는 kubelet에 의해 관리되는 정적 포드를 제어 평면으로 사용하는 반면 RKE에서는 제어 평면 포드가 도커에 의해 관리된다는 것입니다. containerd를 사용하면 RKE2가 컨테이너 레지스트리를 미러링 할 수 있습니다.
Rancher에서는 라이트 한 쿠버네티스 배포판도 제공합니다. 로우 프로파일 환경에 최적화된 K3s는 서버 인스턴스당 512MB의 RAM과 200MB의 디스크 공간만 확보되어 있으면 활용 가능합니다. 사양에 맞추기 위해 일반적으로 사용되지 않는 많은 플러그인을 뺐고, 필요한 경우에는 빠진 요소들을 다시 추가할 수 있습니다.
(6) 레드 햇 오픈시프트 (Red Hat OpenShift)
레드 햇 오픈시프트(OpenShift)는 원래 헤로쿠(Heroku) 빌드팩과 유사한 “카트리지”를 사용해 애플리케이션을 패키징 했고, 애플리케이션은 “기어”라는 컨테이너에 배포됐습니다. 도커 등장 이후 오픈시프트도 새로운 컨테이너 이미지 및 런타임 표준을 사용하도록 수정했습니다. 그리고 오픈시프트 내의 오케스트레이션 기술로 쿠버네티스도 도입했습니다. 최신 버전인 오픈시프트 4에서는 레드 햇 엔터프라이즈 리눅스 코어 OS에서 가져온 몇 가지 개선 사항(예를 들어 플랫폼의 변경 불가 인프라)이 추가됐습니다. 또한 쿠버네티스 전반의 심층적인 맞춤형 자동화를 위한 쿠버네티스 오퍼레이터(Kubernetes Operator)를 사용할 수 있습니다.
참고
Infoworld - 6 Kubernetes distributions leading the container revolution
Kubernetes - Docs
Cloud Native – 클라우드 네이티브 용어집
Docker – Docker will include Kubernetes in the box
VMware – Tanzu Kubernetes Grid
VMware - Tanzu Application Platform
Mirantis - Mirantis Kubernetes Engine
SUSE – RKE vs. RKE2: Comparing Kubernetes Distros
Rancher – Rancher Kubernetes Engine (RKE)
Red Hat - Red Hat OpenShift