매일 업데이트
2023-09-06 13:15 13 min

선택할 오케스트레이션 플랫폼

최근 몇 년 동안, Nomad와 Kubernetes는 워크로드 오케스트레이션을 위한 선두 플랫폼으로 자리매김했습니다.

오케스트레이션 플랫폼은 다양한 애플리케이션의 구성, 관리 및 조정을 자동화하여 효율적인 운영을 지원합니다.

두 플랫폼 모두, NomadKubernetes는 컨테이너화된 애플리케이션의 배포와 관리를 간소화합니다. 적절한 오케스트레이션 도구를 선택하면 서비스 검색과 배포부터 조정과 확장에 이르기까지 광범위한 마이크로서비스와 컨테이너를 효과적으로 관리할 수 있습니다.

이제, 올바른 플랫폼을 선택하기 위한 판단을 내리기 전에 Nomad와 Kubernetes의 특징을 더 자세히 알아보겠습니다.

Nomad란 무엇인가요?

Nomad는 HashiCorp에서 개발한 워크로드 조정 솔루션입니다. 유연성을 제공하며 컨테이너 배포 및 관리를 계획하고 자동화합니다. 클라우드와 온프레미스 환경 모두에서 운용되며, 컨테이너화되지 않은 워크로드도 지원하는 것이 특징입니다.

Nomad는 실행 가능한 바이너리 파일 하나로 구성되어 있어, 다른 솔루션에 비해 서버에서 차지하는 리소스가 매우 적습니다. 컨테이너뿐만 아니라 Windows, Java, 가상 머신, Docker 등 다양한 유형의 워크로드를 실행할 수 있습니다.

프로덕션 환경에서 엔터프라이즈 컨테이너를 배포하고 관리하는 데 적합하며, 컨테이너화가 되어 있지 않은 애플리케이션도 Nomad 클러스터 내에서 실행할 수 있습니다. 또한 Nomad를 통해 애플리케이션을 확장하고 사용자와 지리적으로 더 가까운 곳에서 실행하는 것이 간편하며, 단기 일괄 작업도 효율적으로 처리할 수 있습니다.

Nomad는 커뮤니티 버전과 엔터프라이즈 버전의 두 가지 형태로 제공됩니다. 커뮤니티 버전은 무료로 사용할 수 있으며, 사용자가 Nomad 클러스터를 직접 관리할 수 있습니다. 이 버전은 15분 이내에 로컬 또는 클라우드 환경에서 실행 가능합니다. 반면, 엔터프라이즈 버전은 협업, 운영 및 거버넌스와 같은 지원과 추가 기능을 제공합니다.

Kubernetes란 무엇인가요?

Kubernetes는 확장성과 이식성이 뛰어나고 효율적인 오케스트레이션 플랫폼입니다. K8s라고도 불리며, 원래 Google에서 개발했습니다. 현재는 Cloud Native Computing Foundation(CNCF)에서 관리하고 있으며, 가장 널리 사용되는 오케스트레이션 플랫폼 중 하나입니다.

Kubernetes를 사용하면 온프레미스, 퍼블릭 클라우드, 하이브리드 환경 등 원하는 곳 어디에서나 워크로드를 효율적으로 이동할 수 있습니다. 이는 오케스트레이션 및 인프라 관리 요구 사항에 필요한 모든 도구를 제공하는 것을 목표로 합니다.

현재 가장 인기 있는 오케스트레이션 플랫폼이며, Amazon Web Services와 Google Cloud Platform과 같은 주요 클라우드 서비스 제공업체들은 각각 Amazon Elastic Kubernetes Service(AWS EKS)와 Google Kubernetes Engine(GKE)이라는 관리형 Kubernetes 서비스를 제공합니다.

또한 읽어보세요: Kubernetes 시작하기: 초보자를 위한 소개

그렇다면, 우리 조직의 오케스트레이션 플랫폼 요구 사항에 따라 어떤 것을 선택해야 할까요? 이제 두 플랫폼을 비교하여 자세히 알아보겠습니다.

Nomad 대 Kubernetes

#1. 설치

대부분의 소프트웨어 도구 및 기술을 사용할 때 첫 단계는 설치이며, 설치 용이성은 중요한 고려 사항입니다. Nomad와 Kubernetes 중 선택 시, 시작하기 얼마나 쉬운지 살펴보는 것이 중요합니다.

Nomad

Nomad의 경우, 미리 컴파일된 바이너리 또는 설치해야 할 패키지를 제공합니다. 로컬 컴퓨터에 수동으로 설치하려면, 공식 바이너리를 다운로드하여 설치하면 됩니다. Linux 사용자는 공식 Linux 패키지를 설치할 수 있습니다. 어떤 경우든, 설치 후에는 명령줄에서 직접 CNI(Container Network Interface) 플러그인만 설치하면 됩니다.

MacOS 또는 Windows에 설치할 경우, Homebrew 및 Chocolatey와 같은 패키지 관리 도구를 사용하면 설치가 훨씬 간단해집니다. 단 하나의 명령으로 CNI 플러그인을 포함한 설치가 완료됩니다.

Kubernetes

Kubernetes의 경우, 필요에 따라 설치할 수 있는 다양한 구성 요소와 클라이언트가 존재합니다. 각 구성 요소에 대한 바이너리를 개별적으로 얻어야 합니다. 다양한 런타임과 시스템 아키텍처에 대응하는 다양한 컨테이너 이미지가 제공됩니다.

공식 저장소에서 Darwin, Linux, Windows 등 사용자의 플랫폼 및 시스템 아키텍처에 맞는 공식 바이너리를 찾을 수 있습니다. 올바른 컨테이너 이미지 설치를 완료한 후에는 컨테이너와 상호 작용할 수 있는 명령줄 도구인 kubectl이 필요합니다.

#2. 확장성

컨테이너 워크로드에서 확장성은 매우 중요한 요소입니다. 시스템이 증가하는 작업 부하를 처리할 수 있는 능력을 결정합니다. 즉, 더 많은 컴퓨팅 성능이 필요한 경우 오케스트레이션 프레임워크는 새로운 리소스를 쉽게 추가할 수 있도록 지원해야 합니다.

Nomad

Nomad는 프로덕션 환경에서 10,000개 이상의 노드를 가진 클러스터를 실행하는 데 성공적으로 사용된 경험이 있습니다. 2020년에는 6,100개의 호스트에서 200만 개의 Docker 컨테이너를 사용하여 스트레스 테스트를 완료했습니다. 이는 10개 이상의 AWS 리전에 걸쳐 22분 동안 진행되었습니다. 이전의 100만 개의 컨테이너를 사용한 성공적인 실행 기록을 넘어선 성과입니다.

또한 Nomad Autoscaler를 사용하면 수평 자동 크기 조정이 가능하며, 필요에 따라 별도의 프로세스로 실행할 수 있습니다.

Kubernetes

Kubernetes는 버전 1.28부터 클러스터를 최대 5,000개 노드까지 확장할 수 있습니다. 총 150,000개의 포드 또는 총 300,000개의 컨테이너를 실행할 수 있습니다.

확장성이 향상되었지만, Nomad 클러스터 관리에 비해 Kubernetes 클러스터 유지는 더 복잡합니다. Nomad는 실행할 수 있는 총 노드 수에서 Kubernetes보다 유리한 위치에 있습니다.

#3. 성능

오케스트레이션 플랫폼을 선택할 때는 기능과 성능 간의 균형을 고려해야 합니다. 오케스트레이션 플랫폼의 성능은 사용되는 시스템 리소스의 양에도 영향을 미칩니다.

Nomad

Nomad는 단일 바이너리 접근 방식 덕분에 리소스 사용량이 적습니다. 또한 오케스트레이션 플랫폼을 실행하기 위해 별도의 서비스를 설치할 필요가 없습니다. 따라서 노드에서 CPU와 메모리 사용량이 줄어들어 오버헤드가 감소하고 성능이 향상됩니다.

Nomad는 적응력이 뛰어나 온프레미스 또는 클라우드 환경을 가리지 않고 다양한 워크로드를 처리할 수 있습니다. 단순성, 탄력성 및 효율성을 통해 클러스터 규모가 커져도 성능을 유지하는 데 이점이 있습니다.

Kubernetes

Kubernetes는 컨테이너화된 워크로드에 최적화되어 있습니다. 여러 컨테이너 기반 마이크로서비스를 실행하는 경우, Kubernetes는 이를 관리하는 데 탁월한 성능을 발휘합니다. 광범위한 네트워킹 기능과 광범위한 통합을 통해 오케스트레이션 요구 사항을 가속화하고 세밀하게 조정할 수 있습니다.

다양한 기능과 구성으로 인해 Kubernetes는 시스템 리소스를 더 많이 사용합니다. 클러스터 규모가 커지면 이를 관리하는 데 추가 오버헤드와 복잡성이 발생할 수 있습니다.

#4. 네트워킹

컨테이너 오케스트레이션에서 네트워킹은 중요한 측면입니다. 이는 노드들이 서로를 찾고 통신하는 방법을 결정합니다.

Nomad

워크로드 조정에 중점을 두는 Nomad는 네트워킹에 대한 관여를 최소화하고 가능한 한 수정을 줄이려고 노력합니다.

Nomad는 인프라에 의존하지 않고 구성을 사용하여 작동합니다. DNS 서버 또는 로드 밸런서와 같은 추가 구성 요소를 실행하는 대신 구성에서 직접 필요한 정보를 얻을 수 있습니다. Nomad 스케줄링의 기본 단위인 할당은 네트워크 블록을 사용하여 포트를 요청할 수 있습니다.

Kubernetes

Kubernetes의 경우 네트워킹은 핵심 요소입니다. 로컬 호스트를 통한 컨테이너 간 통신, 포드 간 통신, 포드 간 통신, 영구 서비스 간 통신 등 다양한 측면을 제어할 수 있습니다.

Nomad의 동적 포트와 비교할 때 Kubernetes는 다른 접근 방식을 취합니다. Pod 그룹을 네트워크에 노출하기 위한 추상화로 서비스 API를 사용합니다.

#5. 요구 사항

대규모로 오케스트레이션 플랫폼을 실행하는 경우 시스템 요구 사항은 클러스터 규모와 실행 중인 워크로드에 따라 달라집니다. CPU 및 메모리 외에도 네트워크 리소스도 필요합니다.

Nomad

프로덕션 서버의 경우, 대규모 머신 인스턴스에서 실행하는 것이 좋습니다. 각 서버 인스턴스에는 4~8개 이상의 CPU 코어, 16~32GB 이상의 메모리, 40~80GB 이상의 고속 디스크가 권장됩니다. 또한 충분한 네트워크 대역폭을 확보해야 합니다.

방화벽을 사용하는 경우 Nomad에서 허용하는 세 개의 포트를 확인해야 합니다. 이 세 개의 포트는 서버와 클라이언트가 사용하는 HTTP API(기본값 4646), 내부 통신에 사용되는 RPC(기본값 4647), 서버가 다른 서버와 통신하는 데 사용하는 Serf WAN(기본값 4648)입니다.

Kubernetes

Kubernetes 클러스터는 고도로 컨테이너화된 프로덕션 환경에서 실행될 때 매우 복잡해질 수 있습니다. 그러나 각 노드에는 최소 2~4개의 CPU 코어와 8~16GB의 RAM을 유지하는 것이 좋습니다.

대규모 클러스터의 경우, 노드당 더 많은 리소스가 필요할 수 있습니다. 또한 네트워크 대역폭이 충분한지 확인해야 합니다.

Nomad와 Kubernetes는 요구 사항에 따라 확장할 수 있지만, Kubernetes 클러스터는 상대적으로 더 많은 리소스를 사용합니다.

#6. 코딩

코딩의 용이성은 선택한 프레임워크와 얼마나 효율적으로 상호 작용할 수 있는지를 결정합니다. 플랫폼과 작업을 정의하는 것 외에도 명령줄 도구와 상호 작용하려면 CLI 명령도 익혀야 합니다.

Nomad

HCL(HashiCorp Configuration Language)은 Nomad에서 사용되는 기본 구성 언어입니다. HCL은 사람이 읽을 수 있는 것과 기계 친화적인 것 사이의 균형을 유지하는 데 중점을 둡니다. 이를 사용하여 애플리케이션 및 서비스에 대한 작업, 제약 조건 및 종속성을 포함한 작업 사양을 작성할 수 있습니다.

또한, Nomad 명령줄 도구에 대한 CLI 명령도 익혀야 합니다. 이를 통해 Nomad 클러스터와 상호 작용하고 구성할 수 있습니다.

Kubernetes

다른 언어에 의존하는 대신 YAML 파일을 사용하여 Kubernetes를 구성할 수 있습니다. JSON도 사용할 수 있습니다. 이러한 구성 파일을 사용하면 포드, 서비스, 배포 및 기타 리소스에 대한 사양을 포함하여 애플리케이션 실행 방법을 쉽게 정의할 수 있습니다.

복잡한 Kubernetes 애플리케이션을 실행할 경우, Helm은 복잡한 Kubernetes 애플리케이션도 정의, 설치 및 업그레이드할 수 있는 Kubernetes용 패키지 관리자입니다. Helm 차트는 YAML로 작성되었으며 배포를 사용자 정의하기 위한 템플릿과 값 파일을 포함할 수 있습니다.

kubectl 명령줄 도구를 사용하여 Kubernetes 클러스터와 상호 작용합니다. 여기에는 Kubernetes 리소스를 생성, 수정 및 관리하기 위한 다양한 명령을 실행하는 작업이 포함됩니다.

#7. 통합

오케스트레이션 플랫폼은 지원하는 자체 통합 호스트와 함께 제공됩니다. 또한 기능 세트를 늘리기 위해 추가할 수 있는 여러 타사 통합을 찾을 수도 있습니다.

Nomad

Nomad를 사용하면 다양한 도구 및 기술과 적극적으로 통합할 수 있습니다. Docker 및 기타 컨테이너 런타임과 원활하게 연결하여 컨테이너화된 애플리케이션 배포를 촉진합니다. 인프라 프로비저닝의 경우, Terraform 통합을 사용하여 리소스 생성을 간소화할 수 있습니다.

HashiCorp 제품군의 일부인 Nomad는 서비스 검색 및 상태 확인을 위해 HashiCorp Consul과 협력할 수 있으며, HashiCorp Vault는 안전한 비밀 관리를 보장합니다. 모니터링 요구 사항은 Prometheus, Grafana 및 ELK Stack과 같은 통합을 통해 충족됩니다. 또한 Nomad는 CI/CD 파이프라인에 완벽하게 통합되어 자동화된 애플리케이션 배포를 가능하게 합니다.

Kubernetes

오랜 기간 검증된 솔루션인 Kubernetes는 다양한 기술과 통합할 수 있는 목록을 제공합니다. 컨테이너 배포를 위해 Docker와 연결할 수 있으며, 네트워킹 요구 사항에 따라 Calico 또는 Cilium과 같은 솔루션을 사용할 수 있습니다. Ceph와 같은 스토리지 옵션과 AWS EKS(Amazon Elastic Kubernetes Service) 및 Google GKE(Google Kubernetes Engine)와 같은 클라우드 기반 제공업체는 영구 스토리지를 적극적으로 관리합니다. 클라우드 네이티브 솔루션은 추가 서비스도 제공합니다.

서버리스 워크로드를 지원하려는 경우, Kubernetes가 유용합니다. Knative 및 KEDA(Kubernetes 기반 Event-Driven Autoscaling)와 같은 서버리스 프레임워크를 사용하여 Kubernetes를 확장할 수 있습니다.

#8. GUI

때때로 명령줄과 코드에서 벗어나 실행 중인 플랫폼을 시각적으로 확인하고 싶을 수 있습니다. GUI(그래픽 사용자 인터페이스)를 통해 이를 수행할 수 있습니다.

Nomad

Nomad는 바이너리의 일부로 내장된 웹 UI를 제공합니다. Nomad를 설치하고 서버를 실행하면 API, CLI와 함께 GUI가 함께 제공됩니다. UI를 사용하고 클러스터를 검사하기 위한 추가 구성은 필요하지 않습니다.

Nomad 서버를 시작한 후, 웹 브라우저에 서버 주소를 입력하면 웹 UI로 리디렉션됩니다. 명령줄 인터페이스에서 직접 필요한 웹 페이지를 방문할 수 있는 ui 하위 명령도 있습니다.

Kubernetes

Kubernetes는 기본적으로 GUI를 제공하지 않지만, 필요에 따라 설치할 수 있습니다. Kubernetes 자체는 대시보드라는 공식 UI를 제공합니다. 기본적으로 설치되지는 않지만 kubectl 도구를 사용하여 설치하고 실행할 수 있습니다. 대시보드를 사용하면 클러스터 개요를 확인할 수 있습니다.

컨테이너화된 애플리케이션을 Kubernetes 클러스터에 배포하고 관리하고 문제를 해결할 수 있습니다. AWS EKS 및 Google GKE와 같은 클라우드 기반 공급자는 자체 UI 도구를 제공하며, 실행할 수 있는 타사 도구도 있습니다.

Nomad vs. Kubernetes: 요약표

기능 Nomad Kubernetes
설치 미리 컴파일된 단일 바이너리 다양한 구성 요소와 클라이언트를 위한 개별 바이너리
확장성 10,000개 노드 및 2백만 개 컨테이너 실행 가능 5,000개 노드 및 총 300,000개 컨테이너
성능 더 적은 리소스 공간으로 간편하고 효율적 광범위한 기능 세트 제공, 더 많은 리소스 사용
네트워킹 동적 포트 할당을 통한 단순한 구성 세밀한 제어, 동적 포트에 의존하지 않음
요구 사항 대규모 클러스터에 대한 더 낮은 시스템 요구 사항 대규모 클러스터에 더 많은 시스템 리소스 필요
코딩 HCL 사용, 다양한 통합 및 도구 제공 YAML 및 JSON과 같은 기존 언어 사용
통합 공식 및 타사 통합 지원 매우 광범위한 통합 및 도구 지원
GUI 내장된 웹 UI 별도 설치 필요

귀하의 오케스트레이션 요구 사항에 적합한 플랫폼을 선택하세요

Nomad와 Kubernetes 중에서 오케스트레이션 플랫폼을 선택하는 것은 특정 요구 사항과 우선 순위에 따라 결정됩니다. 두 플랫폼 모두 배포 예약, 자동화된 롤아웃 및 복구, 클러스터 검색 및 관리 등 다양한 사용 사례를 지원합니다.

단순성을 우선시하고 작업량이 적다면, Nomad가 더 나은 선택일 수 있습니다. 단일 바이너리와 최소한의 리소스 요구 사항을 갖춘 Nomad는 설정과 운영이 더 쉽습니다. 또한, 클러스터를 확장하여 많은 수의 노드를 지원할 수 있습니다.

반면, 광범위한 기능, 세밀한 제어 및 폭넓은 통합이 필요하다면, Kubernetes가 적합합니다. Kubernetes는 컨테이너화된 워크로드를 위한 강력한 솔루션을 제공하며, 다양한 도구 및 기술과 원활하게 통합될 수 있습니다. AWS 및 Google Cloud에서 제공하는 관리형 솔루션을 활용할 수도 있습니다.

Nomad의 경우, 새로운 언어(HCL)를 배워야 할 수 있다는 점을 고려해야 하며, 반면 Kubernetes 구성은 YAML 또는 JSON과 함께 작동합니다. 또한 편의성을 위해 웹 UI가 필요할 수도 있습니다.

사용 가능한 시스템 리소스와 관련된 비용도 고려해야 합니다. Nomad와 Kubernetes 간의 오케스트레이션 플랫폼 선택은 사용자의 요구 사항, 전문 지식 및 리소스를 기반으로 해야 합니다.

다음으로, 더 나은 컨테이너 오케스트레이션을 위한 Kubernetes 모범 사례를 확인해 보세요.

저자
Korea

기술 트렌드와 실용적인 팁을 전하는 लेखक입니다.