Tech Sketch Bucket of Technical Chips by TIS Inc.

FlynnをインストールしてDockerコンテナを動かしてみた

Pocket

昨今、Dockerのエンタープライズ基盤への利用が拡大しつつある。それに対応すべく、DockerをPaaSとして運用する為の製品が多数、開発、提供されており、注目度も非常に高くなっている。
ITmedia社 @IT上で『実際に検証済み!OSS徹底比較』を連載させて頂いているが、その記事としてDokcer PaaS製品の比較検証の記事を執筆した。
その記事執筆にあたり、対象として選定した「Flynn」の評価を行うため、実際にインストールを行った手順を記事としてまとめてみた。評価は2016年9月時点での最新のStable版を使用して評価を行っている。

インストールの為に以下のサイトを参考にさせて頂いている。
flynnを使ったオートスケーリングシステム
Flynn Docs Manual Installation


検証に使用した環境は以下となる。※画像をクリックすると拡大表示
FlynnはUbuntu 14.04 LTS上での構築を推奨している為、Ubuntu 14.04 LTSをインストールしたサーバを3台使用した、Flynnのクラスタを構成する。Flynnの各サービスはクラスタを構成したサーバ内のいずれかで起動され、アクセスにはサブドメインを使用したURLを使用する為、別途にサブドメインに対応したDNSサーバを準備する必要がある。今回はCentOS + namedで構成したDNSサーバを使用している。


サブドメインに対応する為のnamedの設定

今回はtissvv097~099の3台でクラスタを構成する。
サブドメインでこの3台の中のいずれかにアクセスさせるためのnamedの設定例は以下となる。
通常に正引きの設定に黄色の帯を引いた行を追加する。逆引きは変更は不要となる。
# vi /var/named/front02.intra.tistest.jp


必要パッケージとFlynnのインストール (全サーバ共通)

1.パッケージの更新の適用
$ sudo apt-get update -y

2.ntpのインストールと自動起動の設定
$ sudo apt-get install -y sysv-rc-conf ntp
$ sudo service ntp start
$ sudo sysv-rc-conf ntp on

3.Flynnインストールに必要となるパッケージのインストール
$ sudo apt-get install -y git upstart

4.Dockerのインストール
最新版のversion 1.12.1, build 23cf638を使用した。
sudo su -c "curl -fsSL https://get.docker.com/ | sh"

5.root以外のユーザへのdockerコマンドの実行許可設定
本例では "maintain" ユーザに権限を付与している。設定反映には再ログインが必要となる。
sudo usermod -aG docker maintain

6.Dockerの起動と自動起動の設定
$ sudo service docker start
$ sudo sysv-rc-conf docker on

7.Flynnのインストール
$ curl -fsSL -o ~/install-flynn https://dl.flynn.io/install-flynn
$ sudo bash ~/install-flynn


Flynnクラスタの構成

1.flynn-hostの停止確認
$ sudo service flynn-host status

"flynn-host start/running, process XXXX" が表示された場合、flynn-hostを停止する。
$ sudo service flynn-host stop

2.flynn-hostのdiscovery用のURLを生成
いずれか1台で実施する。今回の例では1台目のサーバ(tissvv097:10.255.202.97)を選択している。
sudo flynn-host init --init-discovery --external-ip 10.255.202.97

3.各サーバにdiscovery用のURLを登録
全サーバで実施する。 --discovery に設定するURLは直前のコマンドで生成されたものを使用する。
sudo flynn-host init --discovery https://discovery.flynn.io/clusters/5fe9d304-7518-405f-b51f-8c9b54ad33e8

4.flynn-hostの起動と自動起動の設定
$ sudo service flynn-host start
$ sudo sysv-rc-conf flynn-host on

5.flynn-hostのclusterの生成
いずれか1台で実施する。今回の例では1台目のサーバ(tissvv097:10.255.202.97)を選択している。
ドメイン名は先ほどのDNS設定でサブドメインを利用可能とした物を、--discovery は前のコマンドと同じURLを使用する。
sudo \
CLUSTER_DOMAIN=front02.intra.tistest.jp \
flynn-host bootstrap \
--min-hosts 3 \
--discovery https://discovery.flynn.io/clusters/5fe9d304-7518-405f-b51f-8c9b54ad33e8


コマンドの実行には5分程度の時間がかかる。途中 "mariadb""mongodb" の設定で止まったようになるが、待っていれば先に進むはずである。
このコマンドが正常終了すると、最後に各ノードのCluster参加用のコマンドとdashboardのURLとパスワード(token)が表示される。

6.各サーバへのclusterへの参加
今回はDockerを使用する為、前述のcluster参加用コマンドに "--docker" オプションを追加している。
sudo flynn cluster add --docker -p e1cnkEFq6yIQkjKWfPAxrI1Iol8hU98whV6PkWNgDXY= default front02.intra.tistest.jp a4d910ea5f98d057562179bfd93d4172

7.cluster参加の確認
以下のコマンドでclusterに参加が行えているかの確認が行える。この確認は全サーバで実施する。
sudo flynn cluster


Flynn dashboardの初期設定

1.Flynn dashboardへの接続
ブラウザでコマンドで表示されたURLにアクセスするとFlynnのdashboardが表示される。DNSによるサブドメインの名前解決が必須なため、ブラウザを使用する端末も同じDNSから名前解決を行えることが必須となる。 ※画像をクリックすると拡大表示

2.CA証明書のインストール
ブラウザ上の "click here" の部分をクリックするとCA証明書のインポート画面が表示されるので "この認証局による Web サイトの識別を信頼する" をチェックしてOKをクリックする。※画像をクリックすると拡大表示

3.Flynn dashboard へのログイン
CA証明書のインストールが完了し、Add doneをクリックするとログイン画面が表示される。先ほどのコマンドのパスワード(token)を入力し、loginをクリックする。 ※画像をクリックすると拡大表示

ログイン完了後は以下の画面が表示される。使用するApplicationsが登録されていないため、何も表示されていない。


Flynn公式のサンプルアプリケーションの登録

Githubのflynn-examplesからnodejs-flynn-exampleruby-flynn-exampleの2つを選択し、登録・実行を行う。

手順は基本的に githubからclone → flynnのapplicationsに登録 → gitコマンドでアプリケーション本体をpush の流れとなる。

1.nodejs-flynn-exampleの登録
$ git clone https://github.com/flynn-examples/nodejs-flynn-example
$ cd nodejs-flynn-example
$ flynn create nodejs-flynn-example
$ git push flynn master

2.ruby-flynn-exampleの登録
$ git clone https://github.com/flynn-examples/ruby-flynn-example
$ cd ruby-flynn-example
$ flynn create ruby-flynn-example
$ git push flynn master

3.exampleの登録結果の確認
nodejs-flynn-exampleとruby-flynn-exampleがapplicationsに登録されている。 ※画像をクリックすると拡大表示

4.nodejs-flynn-exampleを起動
nodejs-flynn-exampleを選択してProcessesを0→1にしてSaveをクリックするとdeployされコンテナが起動する。 ※画像をクリックすると拡大表示

5.起動したコンテナの確認
Show logsをクリックするとコンテナの起動状態の確認画面が表示される。起動中のコンテナをクリックするとログが表示される。 ※画像をクリックすると拡大表示


Dockerコンテナの登録

Docker hub上のコンテナもFlynnのapplicationsとして利用できる。ただし、httpの80/tcp又は8080/tcpでのレスポンスがあるもの以外は正常に起動したと判定される、Deploy→Drop→Deploy→… が繰り返されてしまう状態ととなった。今回の例では、前述の条件を満たす tomcatコンテナを使用している。

手順は基本的に Docker hubからコンテナをpull → flynnのapplicatiosに登録 → Docker registoryに登録するtag付け→flynnのDocker registoryに登録 の流れになる。

1.tomcatのDockerコンテナの登録
flynn docker login
docker pull tomcat
flynn create --remote "" tomcat
docker tag tomcat:latest docker.front02.intra.tistest.jp/tomcat:latest
flynn -a tomcat docker push docker.front02.intra.tistest.jp/tomcat:latest

2.tomcatのDockerコンテナの登録結果の確認
tomcatがapplicationsに登録されている。 ※画像をクリックすると拡大表示

3.tomcatを起動
tomcatを選択してProcessesを0→1にしてSaveをクリックするとdeployされコンテナが起動する。 ※画像をクリックすると拡大表示

4.起動したコンテナの確認
Show logsをクリックするとコンテナの起動状態の確認画面が表示される。起動中のコンテナをクリックするとログが表示される。 ※画像をクリックすると拡大表示


Flynn clusterで使用するmariadbとmongodbの起動

前述のインストールの時点で 「途中 "mariadb""mongodb" の設定で止まったようになる」と記載したが、Flynn clusterの起動時に本来はmariadbとmongodbも起動される仕様となっている。現行バージョンではその起動に失敗しているため、statusの画面、mariadbとmongodbがFAULT(赤いハート)になっている。 ※画像をクリックすると拡大表示

この問題を以下の手順で解消することができる。

1."Show System Applications" を起動
applicationsの画面で"Show System Applications"をクリックする。※画像をクリックすると拡大表示

2.mariadb/mongodbを起動
System Applicationsの画面でmariadb/mongodbをそれぞれ選択して、dbを2台ずつ起動する。 ※画像をクリックすると拡大表示

3.status画面を確認
statusの画面でmariadb/mongodbがどちらも緑のハート(RUNNING)になっていることを確認。 ※画像をクリックすると拡大表示


ここまでで、Flynnのインストールとcluster構成およびDockerコンテナの起動検証までが完了となる。
ただ、Flynnが起動した(であろう)DockerコンテナはDocker psには表示されず、独自の"containerinit"のプロセスで制御されているようである。他のDocker PaaS系の製品とは一線を隔している感もあるが、lxcと並存できたりするので使ってみると面白そうな製品である。


エンジニア採用中!私たちと一緒に働いてみませんか?