AWSでNomadクラスタを構築――クラスタやジョブ管理の仕組みと内部構造を知る:コンテナ実行基盤「Nomad」をKubernetesと比較検証(3)(1/2 ページ)
コンテナオーケストレーションツールとして知られる「Kubernetes」とHashiCorpが提供する「Nomad」を比較検証する本連載。第3回はNomadを用いたクラスタ構築の手順やNomadの内部構造、ジョブ管理を中心に解説します。
Nomadクラスタの構築にかかる時間はどれくらい?
本連載第2回ではKubernetesの仕組みや内部構造を解説しました。今回はコンテナ実行基盤である「Nomad」の仕組みや内部構造を解説します。第2回と同じく、AWS(Amazon Web Services)にNomadクラスタを構築するのにどれくらいのステップと時間が必要かを確認しました。
検証内容について
AWS EC2でUbuntu 20.04 LTS AMIから作成したVM(仮想マシン)にNomadクラスタを構築しました。2021年8月時点の調査内容になります。
クラスタ構築の手順は以下の通りです。
Nomadは1つのバイナリで提供されていますが、クラスタを構築するためには幾つか手順を踏む必要があります。Kubernetesにおけるkubeadmのように、Nomadの環境構築を包括的に支援するツールは2021年8月時点で見つけられませんでした。そこで今回はAnsibleを利用してクラスタ構築を実施しました。Ansibleの実行完了にはおよそ10分程度かかりました。
また今回はKubernetesとの比較を兼ねてConsulとVaultを連携させてサービスメッシュやシークレットの機能を利用できるようにしています。もちろんConsulやVaultを連携させずシンプルにワークロードオーケストレーターとしてNomadのみをインストールすれば手順は簡略化できます。
Nomadを提供するHashiCorpおよび各プロダクトについて
HashiCorpはDevOpsに関連するプロダクトを複数リリースしているソフトウェア企業です。Nomadは単体でジョブスケジューラとして実行できるプロダクトです。同社のConsulとVaultを連携させることでワークロードに必要な機能を追加します。
Consulはネットワークを管理するソフトウェアです。サービスディスカバリ、Key/Valueストア(Consul KV)、DNS、サービスメッシュの機能を提供します。
Vaultはセキュアなシークレット管理機能を提供するソフトウェアです。単純なシークレット管理の他にインテグレートされたシークレット管理も利用可能です。例えばデータベースと連携して、一定間隔でローテートするセキュアなシークレットをデータベースのログインシークレットとして利用できます。
クラスタ管理
クラスタのコンセンサスアルゴリズムにRaftを採用しており、クラスタの状態はMemDBで管理しています。Leader選出アルゴリズムは多数決であり、Serverの数がQuorumに満たない場合はオペレーションを続行できなくなります。本番環境で利用する場合は、可用性を担保するために3台または5台のサーバを用意して運用する必要があります。
クラスタを構築する方法は3種類ありますが、Consulをインテグレーションしている場合はホスト名やIPを設定に含める必要はありません。
RegionとDatacenter
Regionは複数のDatacenterを管理できます。Regionごとにクラスタ管理され、Regionは他のリージョンとFederationをさせることができます。これにより異なるRegionにワークロードをデプロイできるようになり、オンプレミスとクラウドのハイブリッド環境やマルチクラウド環境を構築できます。
Network
大別すると次の2つの方法でワークロードにネットワークを提供します。
- Nomadが管理するLinuxネットワークネームスペースを利用する
- ホストOSのネットワークを利用する
ネットワークに関してはNomadバージョン0.12で大きな変更が加えられました。
1つ目はContainer Network Interface(CNI) pluginがサポートされるようになったことです。CNIを利用することでネットワークネームスペースやIPアドレス管理をCNIにオフロードできます。公式ドキュメントを参考に検証したところ、Docker Driverおよびcontained Driverで動作することを確認しました。
2つ目はMulti-Interface Networkingがサポートされるようになったことです。これにより柔軟なネットワーク構成が設計できるようになりました。例えばフロントエンドのネットワークとデータベースのネットワークを分けるなどの構成が考えられます。
補足:ロードバランサーについて
サードパーティーのロードバランサーをデプロイする仕組みは2021年8月時点でNomadにはありません。ロードバランサーは別途Terraformなどで構築して外部からのトラフィックを受け取る構成にする必要があります。
Task Driver
1つのワークロードに対して複数のTask Driverを利用でき、コンテナに限らずワークロードを実行できます。DriverはTaskごとに指定できるため、Task Group内で異なる実行基盤のワークロードを混在させることができます。
例えば、大規模システムで一度にマイクロサービス化することが難しいワークロードをNomadにマイグレーションして、ワークロードの一元管理、一貫性のあるオペレーション、部分的なコンテナ化を進めることができます。Nomadが対応しているTask Driverは次の通りです。
Docker Driver
Dockerコンテナを実行するためのDriverです。コンテナイメージをプロセスとして実行することができます。その他コンテナランタイムのDriverとしてはPodman、containerd、 LXCがあります。
Java Driver
Javaアプリケーションを実行するためのDriverです。Javaアプリケーションをコンテナ化する場合はJava Runtimeがインストールされているイメージを作成して実行する必要があります。
一方、Java DriverはホストにインストールされているJava Runtimeを利用するため、Nomadのワークロードとしてjarファイルを直接実行することが可能になります。これによりJavaアプリケーションのコンテナ化が不要になり、Dockerイメージに比べてポータビリティを高めることができます。
QUEM Driver
オンプレミス環境など特殊な設定を施したディストリビューション環境を、クラウド環境へオフロードする場合などに利用できます。
AWS EC2インスタンスではベアメタルインスタンス以外のKVM Virtualizationをサポートしていません。amd64アーキテクチャをサポートするベアメタルインスタンスはコストが高くなるため、利用する際は注意が必要です。
その他 Community Driver
Nomadファーストクラス実装のTask Driver以外では、ワークロードを動かすために別途プラグインとしてTask Driverを提供する必要があります。すでに複数のコミュニティーがTask Driverを提供しています。
Copyright © ITmedia, Inc. All Rights Reserved.