多機能なコンテナクラスタ構築ツール「Kontena」 2ページ
CLIのインストール
前述の通り、KontenaではKontena CLI(kontenaコマンド)というコマンドラインクライアントを使ってクラスタの管理を行う。Kontena CLIはKontena Serverとネットワーク経由で通信できるマシンであれば、どのマシンでもインストールが可能だ。通常は管理作業に使用するマシンにインストールするのが一般的だろう。
なお、Kontena CLIはRubyで実装されており、実行にはRuby 2.0以降が必要となる。あらかじめyumやapt-getなどのパッケージマネージャでRubyおよびRuby向けパッケージマネージャであるgemをインストールしておこう。
Kontena CLIのインストールは、以下のようにgemコマンドで行える。
# gem install --no-document kontena-cli
インストールが完了したら、kontenaコマンドを実行できるか確認しておこう。なお、引数を指定せずにkontenaコマンドを実行すると簡単なヘルプが表示される。
$ kontena Usage: kontena [OPTIONS] SUBCOMMAND [ARG] ... Parameters: SUBCOMMAND subcommand [ARG] ... subcommand arguments Subcommands: grid Grid specific commands app App specific commands service Service specific commands vault Vault specific commands node Node specific commands master Master specific commands vpn VPN specific commands registry Registry specific commands container Container specific commands etcd Etcd specific commands external-registry External registry specific commands register Register Kontena Account login Login to Kontena Master logout Logout from Kontena Master whoami Shows current logged in user user User related commands version Show version Options: -h, --help print help
なお、今回検証に使用したKontena CLIのバージョンは0.14.7だ。これは「kontena version」コマンドで確認できる。
# kontena version cli: 0.14.7
続いて、「kontena register」コマンドを実行してKontena環境上で使用されるユーザーを作成しておく。ユーザーの作成にはメールアドレスとパスワードが必要だ。
# kontena register Email: hylom@example.com Password: ********** Password again: **********
Kontena Serverのインストール
KontenaにはKontena Serverのインストールを行うためのいくつかのプラグインが用意されており、いくつかのクラウド環境においてはこれらを利用して容易にKontena Serverを作成できるのだが、今回はこれらを利用せずにKontena Serverをインストールする手順を紹介する。これらプラグインの利用についてはKontenaのドキュメントを参照して欲しい。また、Docker Composeを使って簡易的にKontena Serverをインストールする方法もドキュメントには掲載されているので、手軽に試したい場合はこちらを利用しても良いだろう。
なお、今回Kontena Serverをインストールした環境はCentOS 7.2だが、サービスの起動にはsystemdを使用しているため、systemdが利用できる環境であればほかのLinuxディストリビューションでも同様の手順で利用できるはずだ。
また、Kontena ServerおよびKontena Agentをインストールするホスト上にはDockerがインストールされている必要がある。そのほか、Kontena Serverで使用するサーバー証明書の用意も必要だ。
サーバー証明書の作成
Kontenaでは、Kontena ServerとKontena CLI、Kontena Agent間の通信にデフォルトではHTTPSを利用する。そのため、HTTPSを利用するためのサーバー証明書が必要となる。今回は検証目的ということで、いわゆる自己署名証明書を作成して使用する。
まず、opensslコマンドで適当な秘密鍵を作成する。今回はRSA方式で2048ビットの鍵を作成した。
$ openssl genrsa 2048 > kontena-server.key
続いて、この鍵を使ってCSRファイルを作成する。この際、証明書を利用する組織の所在地や組織名の入力が必要となるので、適切なものを入力しておこう。
$ openssl req -new -key kontena-server.key > kontena-server.csr You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [XX]: ←国名を入力。日本ならJP State or Province Name (full name) []: ←州・県名を入力 Locality Name (eg, city) [Default City]: ←都市名を入力 Organization Name (eg, company) [Default Company Ltd]: ←組織名を入力 Organizational Unit Name (eg, section) []: ←部門名を入力 Common Name (eg, your name or your server's hostname) []: ←サーバーのホスト名を入力 Email Address []: ←担当者のメールアドレスを入力 Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: ←何も入力せずにスキップ An optional company name []: ←何も入力せずにスキップ
続いて、鍵ファイルとCSRファイルを元にCRTファイルを作成する。
$ openssl x509 -days 365 -req -signkey kontena-server.key < kontena-server.csr > kontena-server.crt
最後に、鍵ファイルとCRTファイルを1つのファイルにまとめたPEMファイルを作成する。このファイルが、Kontena Serverで使われる証明書ファイルとなる。
$ cat kontena-server.key kontena-server.crt > kontena-server.pem
設定ファイルの作成
続いて、Konena Serverを稼動させるホスト上で設定ファイルを作成する。必要な設定ファイルは下記のとおりだ。
- /etc/kontena/kontena-server.pem
- /etc/kontena/kontena-server.env
- /etc/kontena/kontena-haproxy.sh
- /etc/systemd/system/kontena-server-haproxy.service
- /etc/systemd/system/kontena-server-api.service
- /etc/systemd/system/kontena-server-mongo.service
/etc/kontenaディレクトリは通常は存在しないので、こちらは手動で作成しておく必要がある。
# mkdir /etc/kontena
/etc/kontena/kontena-server.pemファイルは、先に述べた手順で作成したSSLサーバー証明書ファイルだ。また、kontena-server.envファイルはKontena Serverの各種設定を記述したファイルで、内容は下記のようになる。
KONTENA_VERSION=latest KONTENA_VAULT_KEY=<ランダムな文字列> KONTENA_VAULT_IV=<ランダムな文字列> SSL_CERT="/etc/kontena/kontena-server.pem"
ここで「KONTENA_VAULT_KEY」および「KONTENA_VAULT_IV」パラメータではランダムな文字列を設定しておく必要がある。ここで利用できるランダムな文字列は、たとえば次のようにして生成できる。
# cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 64 | head -n 1 3f9KZl8J6i0ozlOrrjaT1pm0qYUG2i12G7Bs5CDrC8mQTR8vvHw1kRaOMfDJskxS ←表示された文字列をコピー&ペーストする
また、/etc/kontena/kontena-haproxy.shファイルの中身は以下のようになる。
#!/bin/sh if [ -n "$SSL_CERT" ]; then SSL_CERT=$(awk 1 ORS='\\n' $SSL_CERT) else SSL_CERT="**None**" fi /usr/bin/docker run --name=kontena-server-haproxy \ --link kontena-server-api:kontena-server-api \ -e SSL_CERT="$SSL_CERT" -e BACKEND_PORT=9292 \ -p 80:80 -p 443:443 kontena/haproxy:latest
このファイルには実行可能属性を付けておこう。
# chmod +x kontena-haproxy.sh
/etc/systemd/system以下に配置する3つのファイルは、それぞれ下記のようになる。
これら設定ファイルを配置したら、systemdの設定をリロードしておく。
# systemctl daemon-reload
なお、それぞれのサービスの起動順だが、まず最初にkontena-server-mongoサービスを起動し、続いてkontena-server-api、最後にkontena-server-haproxyという順番で起動する。
# systemctl start kontena-server-mongo # systemctl start kontena-server-api # systemctl start kontena-server-haproxy
これらコマンドの実行後、systemctlコマンドでそれぞれのサービスが正しく起動しているかを確認しておこう。
# systemctl | grep kontena kontena-server-api.service loaded active running Kontena Agent kontena-server-haproxy.service loaded active running Kontena Server HAProxy kontena-server-mongo.service loaded active running Kontena Server MongoDB
前述のとおり各サービスはそれぞれDockerコンテナとして稼動しており、その状況は「docker ps」コマンドで確認できる。
# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 223a233c1fa2 kontena/haproxy:latest "./run.sh" 2 minutes ago Up 2 minutes 0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp kontena-server-haproxy 87da7385c808 kontena/server:latest "./run.sh" 2 minutes ago Up 2 minutes 9292/tcp kontena-server-api 1e436c80bdab mongo:3.0 "/entrypoint.sh mongo" 2 minutes ago Up 2 minutes 27017/tcp kontena-server-mongo
なお、kontena-server-mongoコンテナは各種データを格納するために「kontena-server-mongo-data」というコンテナを利用する。このコンテナは単純にデータを格納するためだけに確保されたコンテナで、実行はされない。kontena-server-haproxyやkontena-server-api、kontena-server-mongoコンテナを削除しても関連データは失われないが、このkontena-server-mongo-dataコンテナを削除してしまうとDockerクラスタに関するすべての設定が失われてしまうので注意してほしい。
Kontena Serverが稼動したら、Kontena CLIをインストールしたホストからのログインを行ってみよう。ログインは「kontena login <Kontena Serverのホスト名もしくはIPアドレス>」コマンドで行える。たとえばKontena ServerのIPアドレスが「192.168.1.10」だった場合、以下のようになる。また、今回は自己署名証明書を利用しているため、SSL証明書の検証をスキップするよう「SSL_IGNORE_ERRORS」環境変数に「ture」を設定している。
$ export SSL_IGNORE_ERRORS=true $ kontena login https://192.168.1.10 Email: hylom@example.com Password: ********** _ _ | | _____ _ __ | |_ ___ _ __ __ _ | |/ / _ \| '_ \| __/ _ \ '_ \ / _` | | < (_) | | | | || __/ | | | (_| | |_|\_\___/|_| |_|\__\___|_| |_|\__,_| ------------------------------------- Copyright (c)2016 Kontena, Inc. Logged in as hylom@example.com Welcome! See 'kontena --help' to get started.