Nomad? Kubernetes? どう違うの?
どうもこんにちは。HashiCorp Japanの伊藤です。
HashiCorpにはNomadという製品があります。これからのダイナミックなインフラやマイクロサービス化したアプリケーションインフラに対応すべく、HashiCorpが提供しているスケジューリングツールです。
よくお客様に、Kubernetesに対してのストロングポイントって何?って聞かれます。
それに対して、弊社の見解を私なりにざっくりとまとめてみました。(元ネタ: https://www.nomadproject.io/intro/vs/kubernetes.html)
Kubernetesとの比較
KubernetesはGoogleによって開発されたコンテナのオーケストレーションツールで、現在はCNCFによって開発が続いています。KubernetesはDockerやRktなどによるアプリケーション実行に対して、クラスタ管理、スケジューリング、サービスディスカバリ、モニタリング、シークレット管理などの機能を提供します。
それに対して、Nomadはクラスタ管理とスケジューリングのみを提供します。これは、HashiCorp道にあるUnix哲学に基づいています。全てのコマンドやツールはある特定の目的のためにデザインされるべきであり、複雑な処理を行う際は、それらのツールを組み合わせて行う、ということになります。
よって、Kubernetesで提供されるサービスディスカバリやシークレット管理などは、HashiCorpの別の製品であるConsulやVaultで担う構成となっています。
KubernetesはDockerなどのコンテナ管理に特化していますが、Nomadはより汎用なものを意識しています。Nomadはコンテナはもちろんのこと、スタンドアロンなアプリケーションも管理対象としています。Nomadによりタスク管理できる対象はプラグイン式でサポートされ、将来の拡張に向けて設計されています。
Kubernetesによるシステム設計には、多くのレガシーアプリケーションをコンテナ化によりマイクロサービス化させることが必須となります。これに対しNomadは既存のアプリケーションはそのまま存続させ、且つクラスタの管理下に置いてスケジューリングすることを念頭に置いています。
Kubernetesの機能は多数のシステムによって構築されています。例えば、ネットワークコーディネーションやストレージはetcdで担います。つまり、管理を維持することは、それら多数のシステム全てに対してもメンテナンスしていかないといけないという事です。
Kubernetes自体は非常に高い可用性を持っていますが、それを運用するのは非常に複雑です。
それに対し、Nomadのアーキテクチャは非常にシンプルです。まず、Nomadはシングルバイナリで提供されます。サーバーモードかクライアントモードでの運用も一つのバイナリで行います。また、他に依存するシステムなどもありません。Nomadのシングルバイナリには、軽量なリソースマネージャと複雑なスケジュ…