Apache Mesos vs Kubernetes

주의할 점은 Kubernetes를 Mesos와 직접 비교하는 것은 완전히 공정하지 않다는 것입니다. 우리가 추구하는 대부분의 컨테이너 오케스트레이션 기능은 Marathon과 같은 Mesos 프레임워크 중 하나에서 제공됩니다. 따라서 올바른 관점에서 상황을 유지하기 위해 Kubernetes를 직접 Mesos가 아닌 Marathon과 비교하려고 합니다.

이러한 시스템의 원하는 속성 중 일부를 기반으로 이러한 오케스트레이션 시스템을 비교할 것입니다.

지원되는 워크로드

Mesos는 컨테이너화되거나 비컨테이너화될 수 있는 다양한 유형의 워크로드를 처리하도록 설계되었습니다. 우리가 사용하는 프레임워크에 따라 다릅니다. 우리가 보았듯이 Marathon과 같은 프레임워크를 사용하여 Mesos에서 컨테이너화된 워크로드를 지원하는 것은 매우 쉽습니다.

반면 Kubernetes는 컨테이너화된 워크로드에서만 작동합니다. 가장 광범위하게 Docker 컨테이너와 함께 사용하지만 Rkt와 같은 다른 컨테이너 런타임을 지원합니다. 앞으로 Kubernetes는 더 많은 유형의 워크로드를 지원할 수 있습니다.

확장성(Scalability) 지원

Marathon은 애플리케이션 정의 또는 사용자 인터페이스를 통한 확장을 지원합니다. Autoscaling은 Marathon에서도 지원됩니다. 또한 모든 종속성을 자동으로 확장하는 애플리케이션 그룹을 확장할 수 있습니다.

Pod는 Kubernetes의 기본 실행 단위입니다. Pod는 Deployment에서 관리할 때 확장할 수 있습니다. 이것이 Pod가 항상 배포로 정의되는 이유입니다. 스케일링은 수동 또는 자동일 수 있습니다.

고가용성(High Availability) 처리

Marathon의 애플리케이션 인스턴스는 고가용성을 제공하는 Mesos 에이전트에 분산됩니다. 일반적으로 Mesos 클러스터는 여러 에이전트로 구성됩니다. 또한 ZooKeeper는 쿼럼 및 리더 선택을 통해 Mesos 클러스터에 고가용성을 제공합니다.

마찬가지로 Kubernetes의 포드는 여러 노드에 복제되어 고가용성을 제공합니다. 일반적으로 Kubernetes 클러스터는 여러 작업자 노드로 구성됩니다. 또한 클러스터에는 여러 마스터가 있을 수도 있습니다. 따라서 Kubernetes 클러스터는 컨테이너에 고가용성을 제공할 수 있습니다.

서비스 검색 및 로드 밸런싱

Mesos-DNS는 애플리케이션에 대한 서비스 검색 및 기본 로드 밸런싱을 제공합니다. Mesos-DNS는 각 Mesos 작업에 대한 SRV 레코드를 생성하고 작업을 실행하는 시스템의 IP 주소 및 포트로 변환합니다. Marathon 애플리케이션의 경우 Marathon-lb를 사용하여 HAProxy를 사용하여 포트 기반 검색을 제공할 수도 있습니다.

Kubernetes에 배포하면 포드가 동적으로 생성 및 소멸됩니다. 따라서 일반적으로 서비스 검색을 제공하는 Service를 통해 Kubernetes에서 Pod를 노출합니다. Kubernetes의 서비스는 포드에 대한 디스패처 역할을 하므로 로드 밸런싱도 제공합니다.

업그레이드 및 롤백 수행

Marathon에서 애플리케이션 정의에 대한 변경 사항은 배포로 처리됩니다. 배포는 애플리케이션의 시작, 중지, 업그레이드 또는 확장을 지원합니다. Marathon은 또한 최신 버전의 애플리케이션을 배포하기 위한 롤링 시작(Rolling Start)을 지원합니다. 그러나 롤백은 간단하며 일반적으로 업데이트된 정의를 배포해야 합니다.

Kubernetes의 배포는 업그레이드 및 롤백을 지원합니다. 우리는 이전 포드를 새 포드로 교체하면서 취할 배포 전략을 제공할 수 있습니다. 일반적인 전략은 재생성 또는 롤링 업데이트입니다. 배포의 롤아웃 기록은 기본적으로 Kubernetes에서 유지 관리되므로 이전 버전으로 쉽게 롤백할 수 있습니다.

로깅 및 모니터링

Mesos에는 모든 클러스터 구성 요소를 스캔하고 상태 및 기타 Metric과 관련된 데이터를 사용할 수 있도록 하는 진단 유틸리티가 있습니다. 사용 가능한 API를 통해 데이터를 쿼리하고 집계할 수 있습니다. 이 데이터의 대부분은 Prometheus와 같은 외부 도구를 사용하여 수집할 수 있습니다.

Kubernetes는 리소스 Metric 또는 전체 Metric 파이프라인으로 다른 개체와 관련된 자세한 정보를 제공합니다. 일반적인 방법은 Kubernetes 클러스터에 ELK 또는 Prometheus+Grafana와 같은 외부 도구를 배포하는 것입니다. 이러한 도구는 클러스터 Metric을 수집하고 훨씬 사용자 친화적인 방식으로 제공할 수 있습니다.

저장소(Storage)

Mesos에는 상태 저장 애플리케이션을 위한 영구 로컬 볼륨이 있습니다. 예약된 리소스에서만 영구 볼륨을 생성할 수 있습니다. 일부 제한 사항이 있는 외부 저장소도 지원할 수 있습니다. Mesos는 스토리지 공급업체와 컨테이너 오케스트레이션 플랫폼 간의 공통 API 세트인 CSI(Container Storage Interface)에 대한 실험적인 지원을 제공합니다.

Kubernetes는 상태 저장 컨테이너에 대해 여러 유형의 영구 볼륨을 제공합니다. 여기에는 iSCSI, NFS와 같은 스토리지가 포함됩니다. 또한 AWS, GCP와 같은 외부 스토리지도 지원합니다. Kubernetes의 Volume 객체는 이 개념을 지원하며 CSI를 비롯한 다양한 유형으로 제공됩니다.

네트워킹

Mesos의 컨테이너 런타임은 두 가지 유형의 네트워킹 지원, 컨테이너당 IP 및 네트워크 포트 매핑을 제공합니다. Mesos는 컨테이너에 대한 네트워킹 정보를 지정하고 검색하기 위한 공통 인터페이스를 정의합니다. Marathon 애플리케이션은 호스트 모드 또는 브리지 모드에서 네트워크를 정의할 수 있습니다.

Kubernetes의 네트워킹은 각 포드에 고유한 IP를 할당합니다. 이렇게 하면 컨테이너 포트를 호스트 포트에 매핑할 필요가 없습니다. 또한 이러한 포드가 노드 간에 서로 통신할 수 있는 방법을 정의합니다. 이것은 Cilium, Contiv와 같은 네트워크 플러그인에 의해 Kubernetes에서 구현됩니다.

무엇을 사용할까?

명확한 결과를 기대하지만, 어떤 기술이 다른 기술보다 우수하다고 선언하는 것은 전적으로 공정하지 않습니다. 우리가 보았듯이 Kubernetes와 Mesos는 모두 강력한 시스템이며 상당히 경쟁적인 기능을 제공합니다.

그러나 성능은 상당히 중요한 측면입니다. Kubernetes 클러스터는 5000개 노드로 확장할 수 있으며 Marathon on Mesos 클러스터는 최대 10,000개의 에이전트를 지원하는 것으로 알려져 있습니다. 대부분의 실제 사례에서 우리는 그러한 큰 클러스터를 다루지 않을 것입니다.

마지막으로 유연성과 워크로드 유형으로 귀결됩니다. 새로 시작하고 컨테이너화된 워크로드만 사용할 계획이라면 Kubernetes가 더 빠른 솔루션을 제공할 수 있습니다. 그러나 컨테이너와 비컨테이너가 혼합된 기존 워크로드가 있는 경우 Mesos with Marathon이 더 나은 선택이 될 수 있습니다.

다른 대안

Kubernetes와 Apache Mesos는 꽤 강력하지만, 이 공간에서 유일한 시스템은 아닙니다. 우리가 이용할 수 있는 유망한 대안들이 꽤 많이 있습니다.. 자세한 내용은 다루지 않겠지만 몇 가지 항목을 간단히 나열해 보겠습니다.

  • Docker Swarm: 도커 스웜은 도커 컨테이너를 위한 오픈 소스 클러스터링 및 스케줄링 도구이다. Docker 호스트의 클러스터를 관리하는 명령줄 유틸리티가 제공됩니다. Kubernetes나 메소스와 달리 도커 컨테이너에 한정되어 있습니다.
  • Nomad: Nomad는 HashiCorp의 유연한 워크로드 조정자로 컨테이너형 또는 컨테이너형이 아닌 애플리케이션을 관리합니다. Nomad는 Docker 컨테이너와 같은 애플리케이션을 배포하기 위한 선언적 인프라(Infrastructure-as-code)를 활성화합니다.
  • OpenShift: 오픈시프트는 레드햇의 컨테이너 플랫폼으로, 쿠버네티스가 주관하고 관리합니다. OpenShift는 Kubernetes가 제공하는 통합 이미지 레지스트리, 소스-이미지 빌드, 네이티브 네트워킹 솔루션과 같은 많은 기능을 제공합니다.
반응형

+ Recent posts