여는 글

오랜만에 쿠버네티스(Kubernetes) 포스팅입니다. 오늘은 쿠버네티스를 도입한다고 했을 때 온프레미스와 클라우드 환경에서 어떤 차이가 있는지 포스팅 해보도록 하겠습니다.

온프레미스(On-premise) 및 클라우드(Cloud)에서 쿠버네티스(Kubernetes)실행

쿠버네티스(Kubernetes)에서 애플리케이션을 실행한다면 세가지 환경으로 분류 할 수 있습니다. 로컬(Local), 자체 인프라(On-premise), 클라우드(Cloud) 제공업체. 이 세가지 환경으로 분류할 수 있습니다. 또는 혼합(Hybrid)해서 사용할 수 있겠죠.

온프레미스(On-premise)에서 쿠버네티스(Kubernetes)실행

온프레미스(On-premise)에서 애플리케이션을 실행해야하는 경우는 주로 규정에 의해서 일겁니다. 실제로 우리나라(대한민국)에서도 금융IT는 규정으로 인해 온프레미스(On-premise)환경에서 애플리케이션을 실행해야합니다. 외부와의 네트워크는 차단되어야 하는데요. 우리 FISA-클라우드엔지니어링 부트캠프에 참여하면서 우리 금융 데이터센터를 견학했을 때 그 규모에 압도당한 경험이 있습니다.

쿠버네티스(Kubernetes)는 베어메탈(Bare Metal) 머신이나 데이터 센터에서 실행되는 가상 머신에서 직접 실행할 수 있습니다. 하지만, 클라우드(Cloud) 제공업체를 사용할 때처럼 쉽게 클러스터를 확장할 수는 없습니다.

클라우드(Cloud)에 쿠버네티스(Kubernetes)배포

클라우드(Cloud)에서 쿠버네티스(Kubernetes)를 실행하면 필요한 경우 신속하게 클러스터를 확장할 수 있는 장점이 있습니다. 쿠버네티스(Kubernetes)자체는 현재 클러스터 크기가 배포하려는 모든 애플리케이션을 실행하기에 더 이상 충분하지 않을 때 클라우드 공급자에게 추가 가상 머신을 프로비저닝하도록 요청할 수 있습니다.

반애로 워크로드 수가 감소하고 일부 노드가 워크로드를 실행하지 않고 남겨지면 쿠버네티스(Kubernetes)는 운영 비용을 줄이기 위해 클라우드 제공업체의 기능을 활용하여 가상 머신을 제거할수도 있겠죠. 클러스터의 이러한 탄력성은 클라우드에서 쿠버네티스(Kubernetes)를 실행하는 이점 중 하나입니다.

하이브리드(Hybrid) 클라우드 솔루션 사용

위 두 가지(On-premise, Cloud)를 혼용하는 방법을 예로 들면 다음과 같습니다. 온프레미스(On-premise)환경에서 쿠버네티스(Kubernetes)를 실행하고 자체 데이터 센터의 용량을 초과하는 경우엔 클라우드로 추가 노드를 프로비저닝하는 것입니다. 이렇게 하면 각각의(On-premise, Cloud) 장점을 가질 수 있습니다. 대부분의 경우 가상 머신 대여 비용 없이 로컬에서 실행되고, 특수한 상황에서 최대 로드가 발생할 경우 클라우드의 추가 리소스를 사용해서 추가 로드를 처리하는 것이죠.

쿠버네티스(Kubernetes) 사용 환경 선택하기

쿠버네티스(Kubernetes)를 도입 하기로 했다면, 쿠버네티스(Kubernetes)를 직접 관리할지, 쿠버네티스(Kubernetes) 유형 제품을 사용할지 고려해야합니다.

쿠버네티스(Kubernetes) 직접 관리

온프레미스(Kubernetes)에서 애플리케이션을 실행하고 있고 프로덕션용 쿠버네티스(Kubernetes) 클러스터를 실행하기에 충분한 하드웨어를 가지고 있다면 이를 직접 배포하고 관리하고자 할 겁니다. 하지만 이런 방식을 향해 대다수의 엔지니어는 일반적으로 좋은 아이디어는 아니라고 평가합니다.

쿠버네티스(Kubernetes)는 엄청난 복잡성을 가지고 있습니다. 클러스터(Cluster)를 실행하고자 한다면 내부 작동 방식을 잘 알고 있어야 합니다.

쉽게 말해, 쿠버네티스(Kubernetes)가 가진 기술적 난이도로 인해 관리형 쿠버네티스(Kubernetes)를 사용하는 것이 문제가 훨씬 적다는 것이죠. 비즈니스적인 측면에서 굳이 비싼 비용, 고 위험을 감수하고 싶진 않을테니 말이죠.

클라우드(Cloud)에서 관리형 쿠버네티스(Kubernetes) 클러스터(Cluster) 사용

대부분의 주요 클라우드 제공업체는 Kubernetes-as-a-Service를 제공합니다. 클라우드 공급자가 제공하는 다른 API와 마찬가지로 Kubernetes API를 사용하는 동안 쿠버네티스(Kubernetes) 및 해당 구성 요소를 관리해줍니다.

  • Google Kubernetes Engine(GKE)
  • Azure Kubernetes Service(AKS)
  • Amazon Elastic Kubernetes Service(EKS)
  • IBM Cloud Kubernetes Service
  • Red Hat OpenShift Online and Dedicated
  • VMware Cloud PKS
  • Alibaba Cloud Container Service for Kubernetes(ACK)

쿠버네티스(Kubernetes) 버전(Version) 선택

온프레미스(On-premise) 환경이던 클라우드(Cloud)환경이던 쿠버네티스(Kubernetes)를 도입하고자 결정했다면, 고려해야할 사항이 한가지 더있습니다. 그것은 바로 ‘바닐라 쿠버네티스(Vanilla Kubernetes)’를 사용할 것인지 ‘엔터프라이즈 쿠버네티스(Enterprise Kubernetes)’를 사용할 것인지 입니다.

바닐라 쿠버네티스(Vanilla Kubernetes)

쿠버네티스(Kubernetes)의 오픈 소스 버전(Open Source Version)은 커뮤니티에서 유지 관리합니다. 최신버전으로 유지된다는 장점이 있지만, 바닐라 버전을 프로덕션 용도로 사용하기 위해선 모든 것을 미세 조정해주어야 합니다.

엔터프라이즈 쿠버네티스 (Enterprise Kubernetes)

프로덕션에서 쿠버네티스(Kubernetes)를 사용하기 위해 OpenShift 또는 Rancher의 엔터프라이즈급 쿠버네티스(Kubernetes)를 사용하는 방법이 있습니다. 기본적으로 더 나은 보안과 성능을 제공하는 것뿐만 아니라 ‘바닐라 쿠버네티스 (Vanilla Kuberenetes)’ API에서 제공하는 것 이외에도 추가적인 오브젝트 타입을 제공합니다.

또한, 쿠버네티스에서 잘 알려진 서드파티 애플리케이션을 배포하고 관리하기 위한 추가 소프트웨어 도구도 제공합니다.

‘엔터프라이즈 쿠버네티스(Enterprise Kubernetes)’는 ‘바닐라 쿠버네티스 (Vanilla Kuberenetes)’보다 한 두버전 뒤처지지만 문제될 것 없이 장점이 더 많습니다.

쿠버네티스(Kubernetes) 도입

쿠버네티스(Kubernetes)를 도입 하는 것이 꼭 좋은 생각은 아닙니다.

자동화된 관리?

애플리케이션이 대규모 ‘모놀리식 앱(Monolithic App)’이라면 쿠버네티스(Kubernetes) 도입이 필요하지 않습니다. 마이크로 서비스(Micro Service)를 배포한다 해도 쿠버네티스(Kubernetes)를 무조건 도입해야 하는 것도 아닙니다.

보통 시스템의 20개 이상의 마이크로 서비스(Micro Service)가 있거나 서비스를 늘릴 가능성이 있는 경우에 쿠버네티스(Kubernetes)의 이점을 누릴 있습니다.

학습 난이도?

쿠버네티스(Kubernetes)를 사용하기 위해 애플리케이션을 수정할 필요는 없지만, 개발자와 엔지니어 모두 쿠버네티스(Kubernetes)를 사용할 줄 알고 이론에 대한 지식을 요구합니다. 시작 단계가 아닌 경우라면 쿠버네티스(Kubernetes)로의 전환으로 신속하게 이루어지진 않습니다. 쿠버네티스(Kubernetes)는 장기적으로 운영 비용을 절감시켜주지만, 그 과정에 있어 따라 새로운 채용이 필요할 수도 있고, 새로운 비용이 발생할수도 있습니다.

결론

오늘은 쿠버네티스(Kubernetes)를 도입한다고 할 때 고려해야하는 사항들을 살펴봤습니다. 저는 MSA프로젝트를 진행하면서 쿠버네티스(Kubernetes)를 사용하지 않은 점이 많은 아쉬움으로 남지만 이는 기술 습득 기회로 봤을 때 경우지 결과적으로 쿠버네티스(Kubernetes)를 도입하지 않은 덕분에 저희의 프로젝트가 완성도를 갖출 수 있었다고 생각합니다. 혹시나 이 글을 읽으시는 분도 쿠버네티스(Kubernetes)를 도입하는 것에 다양한 방면으로 고려하여 진행하셨으면 좋겠습니다.