多機能なコンテナクラスタ構築ツール「Kontena」



 Dockerの普及に伴い、昨今ではDockerを使ったさまざまなクラスタ構築ツールが登場している。今回紹介するKontenaもそのようなクラスタ構築ツールの1つで、多機能かつ構成が容易で、またさまざまな環境で利用できるのが特徴だ。

多機能でかつ構成が容易なDockerクラスタ構築ツール

 Linuxによるインフラ関連において、ここ数年で最も注目されていると言っても過言ではないDockerだが、開発当初は単一のサーバーでの利用にのみフォーカスして開発が進められており、複数のマシンを連ねたクラスタ環境でDockerを利用するためには、サードパーティ製のツールが必要となっていた。その代表的なものに「Kubernete」や「CoreOS」があるが、今回紹介するのはそれらとは別のアプローチを採用したコンテナクラスタ環境構築ツール「Kontena」だ。

 KontenaもKuberneteやCoreOSと同様に既存のさまざまな技術を組み合わせてコンテナを実行させるためのクラスタを構築するツールであるが、それら各コンポーネントが組み込まれたコンテナとして提供されている点が特徴となる。そのため、Dockerが利用できる環境であればディストリビューションを問わずに利用が可能だ。

Dockerクラスタとは

 さて、Kontenaについて説明する前に、Kontenaが実現するDockerクラスタについて簡単に説明しておこう。まず、ネットワークで複数のサーバーを接続し、その各サーバーでそれぞれアプリケーションを実行できる環境を「クラスタ環境」と呼ぶ(図1)。

図1 クラスタ環境のイメージ
図1 クラスタ環境のイメージ

 クラスタ環境ではアプリケーションを分散実行させることで負荷を分散でき、また複数のサーバー上で同一のアプリケーションを重複実行することで、もしサーバーに障害が発生してもサービスを提供し続けられる、といったメリットがある。なお、クラスタ環境を構成する各サーバーは「ノード」と呼ばれる。

 いっぽう、Dockerを使ったクラスタ環境(Dockerクラスタ)では、クラスタの各ノード上にDockerをインストールし、Dockerのコンテナを使ってアプリケーションを実行させる点が特徴となる(図2)。

図2 Dockerクラスタのイメージ
図2 Dockerクラスタのイメージ

 Dockerを利用することで、アプリケーションとOS環境の依存関係を減らすことができるのがDockerクラスタのメリットだ。さらに、DockerのSwarmモードや、Kubernete、Kontenaなどのクラスタ構築支援ツールを利用することで、各ノードを遠隔操作して自動的にコンテナを実行させたり、サーバーの障害を検知して停止したコンテナを自動的に別のノードで実行させる、といったことも可能になる。

Kontenaのアーキテクチャ

 Kontenaは、このようなDockerクラスタを構築するためのツールだ。クラスタ管理にクライアント−サーバー構成を採用しているのが特徴で、「Kontena Server」がクラスタ全体の管理を行うアーキテクチャになっている。管理者は「Kontena CLI」と呼ばれるクライアント経由でKontena Serverにアクセスしてさまざまな操作を実行する。また、コンテナを実行するノードの管理は、各ノードで「Kontena Agent」と呼ばれるエージェントを実行させることで行われる。Kontena AgentはKontena Serverとやり取りを行い、コンテナやネットワークなどの各種管理作業やコンテナの実行を行う仕組みになっている(図3)。

図3 Kontenaのアーキテクチャ
図3 Kontenaのアーキテクチャ

 なお、Kontena CLIはRubyで実装されており、Rubyのパッケージ管理ツールであるgem経由でインストールが可能だ。また、Kontena ServerおよびKontena AgentはともにDocker用のイメージとして配布されており、「docker pull」コマンドや「docker run」コマンドだけでダウンロードおよびインストール、実行が可能になっている。

Kontenaが備える機能

 Kontenaでは、前述したようにクラスタのノードを遠隔操作し、指定したコンテナを適切なノード上で自動的に実行させることが可能だ。もちろんコンテナの監視機能や、停止したコンテナを自動的に再起動させる機能もある。

 また、ユーザー認証機能を備えているのも特徴だ。KontenaではKontena ServerやKontena Agentがインストールされたサーバー上のユーザーとは独立したユーザー管理機構を備えており、これらサーバー上に個別にユーザーを作成することなしに、ユーザー毎に異なる権限を与えることができる。権限がないコンテナに対する操作は行えないため、たとえば異なる複数のプロジェクトのコンテナを同じクラスタ環境上に同居させる、といったことが可能になる。

 なお、コンテナ間の通信は独自のVPN(仮想プライベートネットワーク)を利用する仕組みになっている。そのため、クラスタを構成する各ホスト間がプライベートなネットワークで接続されていない場合でも、安全にホスト間の通信が行える。

 「オーケストレーション」と呼ばれる、複数のコンテナを組み合わせて提供されるようなサービスを適切に自動設定する機能も備えている。オーケストレーション機能は以前紹介した「Docker Compose」と互換性があり、Docker Compose用の設定ファイルをほぼそのまま利用することが可能だ。

 そのほか、監査機能やログ、統計処理機能、独自のプライベートイメージレジストリといった機能も備えている。

 なお、Kontenaはオープンソースで提供されており、基本機能は無料で利用できる。また、1ユーザー当たり月額9ドルの有料プランも提供されている(Kontenaのpricingページ)。

KontenaによるDockerクラスタ構築

 それでは、実際にKontenaを使ってDockerクラスタを構築していく例を紹介していこう。流れとしては、まずクライアントであるKontena CLIをインストールし、続けてKontena ServerとKontena Agentをインストールする、という形になる。