Nomad と Kubernetes は、動的オーケストレーション ワークロードに利用できる 2 つの最も人気のあるオーケストレーション プラットフォームとして登場しました。
オーケストレーション プラットフォームは、実行している複数の異なるアプリケーションの構成、管理、調整を自動化するのに役立ちます。
Nomad と Kubernetes は どちらも、コンテナ化されたアプリケーションのデプロイと管理を簡素化します。適切なオーケストレーション プラットフォームを使用すると、サービスの検出やデプロイから調整やスケーリングに至るまで、さまざまなマイクロサービスやコンテナを効率的に処理できます。
適切なプラットフォームを選択する前に、Nomad と Kubernetes について詳しく学びましょう。
ノマドとは何ですか?
HashiCorp の Nomad は、 ワークロード オーケストレーションの問題に取り組みます。柔軟性があり、コンテナのデプロイと管理をスケジュールし調整します。クラウドとオンプレミスの両方で動作し、コンテナ化されていないワークロードもサポートします。
Nomad を使用すると、実行する必要がある単純なバイナリが得られます。他のソリューションとは異なり、リソースのフットプリントが非常に小さいため、サーバーのコンピューティングをあまり消費しません。コンテナーを超えて、Windows、Java、仮想マシン、Docker などのさまざまなワークロードを実行できます。
エンタープライズ コンテナを実稼働環境にデプロイして管理できます。さらに、コンテナ化されていないアプリケーションをコンテナ化せずに Nomad クラスタ上で実行することもできます。 Nomad を使用すると、簡単にスケールアウトして、顧客の居住地に地理的に近い場所でアプリケーションを実行できます。また、有効期間の短いバッチ ジョブを効率的に実行できます。
Nomad には、Community Edition と Enterprise Edition の 2 つのバージョンがあります。 Community Edition は無料で、Nomad クラスターを自己管理できます。 15 分以内に、ローカルまたはクラウド環境で実行できます。一方、 Enterprise Edition は 、コラボレーション、運用、ガバナンスなどのサポートと追加機能を提供します。
Kubernetesとは何ですか?
Kubernetes は 、拡張可能で移植性が高く、効率性の高いオーケストレーション プラットフォームです。 K8s としても知られ、当初は Google によって開発されました。現在、Cloud Native Computing Foundation または CNCF によって管理されており、最も人気のあるオーケストレーション プラットフォームです。
Kubernetes を使用すると、オンプレミス、パブリック クラウド、ハイブリッド モードなど、必要な場所にワークロードを効率的に移動できます。オーケストレーションとインフラストラクチャ管理のニーズを解決するために必要となる可能性のあるすべてのツールを提供することを目的としています。
これは、最も人気のあるオーケストレーション プラットフォームです。 Amazon Web Service や Google Cloud Platform などの大手クラウド サービス プロバイダーは、それぞれ Amazon Elastic Kubernetes Service (AWS EKS) と Google Kubernetes Engine (GKE) というマネージド Kubernetes サービスを提供しています。
こちらもお読みください: Kubernetes 入門: 初心者向けの概要
しかし、オーケストレーション プラットフォームの要件に応じてどれを選択すべきでしょうか?両者を比較して調べてみましょう。
Nomad 対 Kubernetes
#1. インストール

ほとんどのソフトウェア ツールとテクノロジを使用するための最初のステップはインストールであるため、その簡単さが重要な役割を果たします。 Nomad と Kubernetes のどちらかを選択する場合は、どれだけ簡単に始められるかに注目してください。
遊牧民
Nomad の場合は、コンパイル済みのバイナリまたはインストールが必要なパッケージを入手します。ローカル マシンに手動でインストールする場合は、 公式バイナリをダウンロードしてインストール できます。 Linux を使用している場合は、公式の Linux パッケージをインストールできます。いずれの場合でも、インストール後に行う必要があるのは、コマンド ラインから CNI (Container Network Interface) プラグインを直接インストールすることだけです。
Homebrew や Chocolatey などのパッケージ管理ツールを使用して MacOS または Windows にインストールする場合は、さらに簡単です。たった 1 つのコマンドで、CNI プラグインを含むインストールが完了します。
Kubernetes
Kubernetes に関しては、ニーズに応じてインストールできるさまざまなコンポーネントとクライアントがあります。それぞれのバイナリを取得します。さまざまなランタイムとシステム アーキテクチャに応じたさまざまなコンテナ イメージがあります。
Darwin、Linux、Windows などのプラットフォームとシステム アーキテクチャに一致する公式バイナリの
公式リポジトリ
を確認できます。正しいコンテナー イメージのインストールが完了したら、コンテナーと対話できるコマンド ライン ツールである
kubectl
が必要になります。
#2. スケーラビリティ

コンテナーのワークロードの場合、スケーラビリティは重要な要素です。これにより、増大するワークロードを処理するシステムの能力が決まります。つまり、より多くのコンピューティング能力が必要な場合、オーケストレーション フレームワークは新しいリソースを簡単に追加できる必要があります。
遊牧民
Nomad は、運用環境で 10,000 ノードを超えるクラスターを実行できることが証明されています。 2020 年に、Nomad は 6,100 台のホスト上で 200 万個の Docker コンテナを使用したストレス テストを完了しました。これは 10 の異なる AWS リージョンにまたがり、22 分間実行されました。これは、以前に成功した 100 万コンテナ の実行を上回りました。
Nomad Autoscaler を使用すると、水平方向の自動スケーリングも利用できます。必要に応じて、これを別のプロセスとして実行できます。
Kubernetes
バージョン 1.28 以降、Kubernetes ではクラスターを最大 5,000 ノードまで拡張できます。合計 150,000 個のポッド、または合計 300,000 個のコンテナーを実行できます。
スケーラビリティが向上したため、Nomad クラスターの管理と比較すると、Kubernetes クラスターの維持はより複雑になります。 Nomad は、実行できるノードの総数において Kubernetes よりも優れています。
#3. パフォーマンス
オーケストレーション プラットフォームを選択するときは、機能とパフォーマンスのバランスを目指す必要があります。オーケストレーション プラットフォームのパフォーマンスによって、使用するシステム リソースの量も決まります。
遊牧民
Nomad は単一バイナリ アプローチのため、リソース フットプリントが小さくなります。また、オーケストレーション プラットフォームを稼働させるために別のサービスをインストールする必要もありません。したがって、ノード上の CPU とメモリの消費量が減り、オーバーヘッドが低下し、パフォーマンスが向上します。
適応性が高く、オンプレミスでもクラウドでもさまざまなワークロードを処理できます。そのシンプルさ、復元力、効率性により、クラスター サイズが増加してもパフォーマンスを維持する上で有利になります。
Kubernetes
Kubernetes は、コンテナ化されたワークロード向けに高度に最適化されています。コンテナベースのマイクロサービス群を実行している場合、Kubernetes はそれらの管理に優れています。広範なネットワーキング機能と幅広い統合により、オーケストレーションのニーズを加速し、微調整することができます。
Kubernetes は広範な機能と構成を備えているため、より多くのシステム リソースを消費します。クラスターのサイズが大きくなるにつれて、クラスターの管理において追加のオーバーヘッドと複雑さに直面する可能性があります。
#4. ネットワーキング
コンテナ オーケストレーションに関しては、ネットワークは重要な側面です。これにより、ノードがどのように相互に位置を特定して通信できるかが決まります。
遊牧民
Nomad はワークロード オーケストレーションに重点を置いているため、ネットワークにはほとんど触れず、できるだけ変更を加えないよう努めています。
Nomad はインフラストラクチャに依存するのではなく、構成を使用して動作します。 DNS サーバーやロード バランサーなどの追加のコンポーネントを実行するのではなく、必要な情報を構成から直接取得します。 Nomad のスケジューリングの基本単位は割り当てと呼ばれ、ネットワーク ブロックを使用してポートを要求できます。
Kubernetes
Kubernetes に関して言えば、ネットワークは中心的な柱です。次の側面を制御できます。localhost を介したコンテナー間の通信、ポッド間の通信、ポッドからサービスへの通信、永続的なサービスからサービスへの通信です。
Nomad の動的ポートと比較すると、Kubernetes は異なるアプローチを採用しています。ポッドのグループをネットワークに公開するための抽象化としてサービス API を取得します。
#5. 要件
オーケストレーション プラットフォームを大規模に実行している場合、システム要件はクラスターのサイズと実行しているワークロードによって異なります。 CPU とメモリの他に、ネットワーク リソースも必要です。
遊牧民
運用サーバーの場合は、大規模なマシン インスタンスで実行することをお勧めします。各サーバー インスタンスには、4 ~ 8 個以上の CPU コア、16 ~ 32 GB 以上のメモリ、および 40 ~ 80 GB 以上の高速ディスクを搭載するのが適切です。また、十分なネットワーク帯域幅を確保する必要があります。
ファイアウォールを使用している場合は、Nomad が許可されている 3 つのポートを確認する必要があります。 3 つのポートは、サーバーとクライアントによって使用される HTTP API (デフォルト 4646)、内部通信に使用される RPC (デフォルト 4647)、およびサーバーが他のサーバーと通信するために使用する Serf WAN (デフォルト 4648) です。
Kubernetes
Kubernetes クラスターは、高度にコンテナー化された運用環境で実行すると、非常に複雑になる可能性があります。ただし、各ノードに少なくとも 2 ~ 4 個の CPU コアと 8 ~ 16 GB の RAM を搭載することをお勧めします。
大規模なクラスターの場合、ノードごとにさらに多くのリソースが必要になる場合があります。さらに、十分なネットワーク帯域幅があることを確認する必要があります。
Nomad と Kubernetes は要件に合わせてスケールアップできますが、Kubernetes クラスターは比較的多くのリソースを消費します。
#6. コーディング

コーディングのしやすさによって、選択したフレームワークをどれだけ効率的に操作できるかが決まります。プラットフォームとジョブを定義する以外に、コマンド ライン ツールを操作するための CLI コマンドも学習する必要があります。
遊牧民
HCL または HashiCorp 構成言語は、Nomad で使用される主な構成言語です。 HCL は、人間が読みやすいものと機械が読みやすいものの間でバランスをとることを目指しています。これを使用して、アプリケーションとサービスのタスク、制約、依存関係などのジョブ仕様を作成できます。
さらに、Nomad コマンド ライン ツールの CLI コマンドも学習する必要があります。これにより、ノマド クラスターと対話して構成を行うことができます。
Kubernetes
別の言語に依存するのではなく、YAML ファイルを使用して Kubernetes を構成できます。 JSON も使用できます。これらの構成ファイルを使用すると、ポッド、サービス、デプロイメント、その他のリソースの仕様など、アプリケーションの実行方法を簡単に記述することができます。
複雑な Kubernetes アプリケーションを実行している場合、Helm は Kubernetes のパッケージ マネージャーであり、複雑な Kubernetes アプリケーションであっても定義、インストール、アップグレードすることができます。 Helm チャートは YAML で記述されており、デプロイメントをカスタマイズするためのテンプレートと値ファイルを含めることができます。
kubectl
コマンドライン ツールを使用して、Kubernetes クラスターと対話します。これには、Kubernetes リソースを作成、変更、管理するためのさまざまなコマンドの実行が含まれます。
#7。 統合
オーケストレーション プラットフォームには、サポートする独自の統合ホストが付属しています。機能セットを増やすために追加できるサードパーティの統合もいくつかあります。
遊牧民
Nomad を使用すると、さまざまなツールやテクノロジーと積極的に統合できます。 Docker や他のコンテナ ランタイムとシームレスに接続し、コンテナ化されたアプリケーションのデプロイを容易にします。インフラストラクチャのプロビジョニングには、Terraform 統合を使用してリソースの作成を簡素化できます。
HashiCrop の一部である 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 ベースのイベント駆動型自動スケーリング) などのサーバーレス フレームワークを使用して Kubernetes を拡張できます。
#8. GUI
場合によっては、コマンド ラインやコードから離れて、実行しているプラットフォームを視覚化することもできます。 GUI またはグラフィカル ユーザー インターフェイスを使用すると、それが可能になります。
遊牧民

Nomad は、組み込みの Web UI をバイナリの一部として提供します。 Nomad をインストールしてサーバーを実行すると、API および CLI とともに GUI が得られます。 UI の使用を開始してクラスターを検査するには、構成は必要ありません。
Nomad サーバーを起動したら、Web ブラウザにサーバー アドレスを入力できます。その後、Web UI にリダイレクトされます。
ui
サブコマンドもあるので、コマンド ライン インターフェイスから必要な Web ページに直接アクセスできます。
Kubernetes

Kubernetes にはデフォルトでは GUI が付属していません。ただし、要件に応じてインストールできます。 Kubernetes 自体は、Dashboard と呼ばれる公式 UI を提供しています。デフォルトではインストールされませんが、
kubectl
ツールを使用して起動して実行できます。ダッシュボードを使用すると、クラスターの概要を取得できます。
コンテナ化されたアプリケーションを Kubernetes クラスターにデプロイし、管理し、トラブルシューティングを行うことができます。 AWS EKS や Google GKE などのクラウドネイティブプロバイダーは、独自の UI ツールを提供します。実行できるサードパーティ製ツールもあります。
Nomad と Kubernetes: 概要表
特徴 | 遊牧民 | Kubernetes |
---|---|---|
インストール | 単一のコンパイル済みバイナリ | コンポーネントやクライアントごとに異なるバイナリ |
スケーラビリティ | 10,000 ノードと 200 万コンテナを実行可能 | 5,000 ノードと合計 300,000 コンテナ |
パフォーマンス | シンプルかつ効率的でリソースフットプリントが小さい | 機能は豊富ですが、より多くのリソースを使用します |
ネットワーキング | 動的ポート割り当てを備えた単一構成 | きめ細かい制御が可能で、動的ポートに依存しません。 |
要件 | 大規模なクラスターに対するシステム要件の低減 | より大きなクラスターにはより多くのシステム ソースが必要です |
コーディング | HCL と呼ばれる独自の言語があります。 | YAML や JSON などの既存の言語を使用できます |
統合 | 公式とサードパーティの統合が良好です | 非常に幅広い統合とツールが利用可能 |
GUI | 組み込みのWeb UIが利用可能 | 別途インストールする必要があります |
オーケストレーションのニーズに適したプラットフォームを選択
Nomad と Kubernetes のどちらを選択するかは、特定の要件と優先順位によって異なります。どちらのプラットフォームも、展開のスケジューリング、自動ロールアウトとリカバリ、クラスターの検出と管理など、さまざまなユースケースをサポートしています。
シンプルさを優先し、ワークロードが少ない場合は、Nomad の方が良い選択かもしれません。 Nomad は単一のバイナリと最小限のリソース要件により、セットアップと操作が容易になります。さらに、多数のノードをサポートするようにクラスターを拡張できます。
一方、広範な機能、きめ細かい制御、幅広い統合が必要な場合は、Kubernetes が最適です。コンテナ化されたワークロードに堅牢なソリューションを提供し、さまざまなツールやテクノロジーとシームレスに統合できます。 AWS や Google Cloud が提供するマネージド ソリューションを活用することもできます。
Kubernetes 構成は YAML または JSON で動作しますが、Nomad の場合は新しい言語 (HCL) を学習する必要があるなど、他の領域を考慮してください。さらに、使いやすさのために Web UI が必要になる場合があります。
利用可能なシステム リソースとそれに関連するコストも考慮してください。 Nomad と Kubernetes の間でオーケストレーション プラットフォームを選択する場合は、ニーズ、専門知識、リソースに基づいて行う必要があります。
次に、コンテナ オーケストレーションを改善するための Kubernetes のベスト プラクティスを確認してください。