コンテナのオーケストレーション実践|【技業LOG】技術者が紹介するNTTPCのテクノロジー|【公式】NTTPCご利用中のWebブラウザではJavaScriptが無効化されております。本Webサイトのすべての機能をご利用いただくために、JavaScriptを有効化した上でご覧ください。祥一Tweetはじめに今回は、Rancherというソフトウェアを使いDockerコンテナでシステムを作成してみました。RancherとDockerの紹介については以下にありますので参照ください。Dockerコンテナ管理ソフトRancherをVPSにインストールするhttps://blog.arena.ne.jp/vps/1121最近では、コンテナやマイクロサービスという言葉をよく聞くようになってきました。有名なところでは、クックパッド[※1]やAbemaTV[※2]等でも導入があるようです。用語の範囲を明確にすると、マイクロサービスは、システムを構築するためのソフトウェアエンジニアリング的な考え方でありコンテナは、システムを実装する方式の一つです。マイクロサービスとコンテナの特長と関係をひらたくまとめると次のようになります。マイクロサービスの世界では、ソフトウェアの主な機能がそれぞれコンポーネント化されAPIを使い公開します。それぞれのコンポーネントは、サービスとして必要な機能を備えており独自に自律的な状態管理を行います。一方でコンテナは、ホストサーバーのOSのカーネルと同じものを使いますが仮想化というカプセル化を行うので提供する機能を作成するコードは、ホストに同居するほかのコードに干渉しにくくなっておりそれぞれが自律的に存在します。他にも要因はあるようですが、このようなことがマイクロサービス的なソフトウェアの構築に用いられやすくなっているようです。マイクロサービス的に複数のホストサーバーをまたがってたくさんのDockerコンテナを使いシステムを構築する場合、「どこにサービスを提供するコンテナがあるのか」、また「必要なときに該当するサービスを提供するコンテナが起動しているかどうか」など統合的なコンテナ管理を少し楽にする仕組みが必要になります。それらをオーケストレーションといいます。独自のオーケストレーション機能である「Cattle」があります。Clusterの作成を通してこの「Cattle」を試してみました。Rancherのインストール♢今回は以下のようなホストサーバーの構成で作成しました。1.2.2DockerとRancherのバージョンについては、Rancherにてサポートされているものの対応表が以下にあるので確認が必要です。https://docs.rancher.com/rancher/v1.6/en/hosts/#supported-docker-versionsDockerのインストールはこのサイトにある以下を実行しました。shDockerの操作については以下を参照ください。Docker(ドッカー)実践編(1)https://blog.arena.ne.jp/vps/419♢RancherサーバーのインストールRancherサーバーのインストールは、「RancherServer」のホストにログインして以下のコマンドでインストールします。rancher/server:v1.5.6インストールに成功すると以下のようになります。/]#♢RancherServerへのログインブラウザで以下URLへログインします。:8080正しく起動できると以下のような画面が起動します。Hostサーバーの取り込みRancherServerの中で以下の操作をしてホストサーバーを管理対象として追加します。「Hosts」の順にクリックします。Host」をクリックします。URLの画面が出ますが「Save」をクリックして次の画面に移動します。Host」の画面で以下の赤線枠で囲んだ部分の文字列をコピーします。コピーは、赤線枠の右隣のボタンをクリックで完了します。<図3>該当するホストにコマンドラインでログインして3.の内容を貼り付けます。Host3のサーバーです。1.の操作をして待っていると以下のようになりRancherサーバーの管理下に置かれたことがわかります。ラベルを使ってみます。ホスト毎に次の内容をHostラベルとして、追加で設定します。cassandra3作業は以下で実行できます。各ホストサーバーの右上をクリックして「Edit」を選択します。Label」をクリックして入力フィールドを追加してHostラベル表に指定した値を入れます。図では、Host1での記入です。各ホストサーバーについて実施します。すべて終わると以下のようになります。<図7>以上でRancherの設定は終わりですDockerコンテナイメージ次に構築したRancherシステムに何か入れてみたいと思います。今回は、前回ご紹介しましたCassandraのDocker版がホストサーバー3台にまたがってクラスターを組んでいる環境を作成します。Hubにあるものを利用します。https://hub.docker.com/_/cassandra/ここでは、このDockerコンテナのイメージファイルをDocker単体で利用するときにどのように使えるのか等の確認をします。以下がCassandraのデータが入る領域なので今回は、ここをホストサーバーの共有ディレクトリに接続してデータはコンテナが変わっても残るように構築します。♢起動方法:起動するには次のフォーマットで実行すると作成されます。※tagでバージョン名を指定できます。cdb1を1台目のサーバーとします。/cassandra/data/:/var/lib/cassandra/コンテナの/var/lib/cassandraディレクトリをホストの/cassandra/dataに接続します。Cattleを利用し次の条件で動作するように作成します。コンテナ内のディレクトリをホストの共有ディレクトリに保存するコンテナをBusyBoxで作成します。/cassandra/dataBusyBoxコンテナのボリュームをCassandraのコンテナにマウントします。Cassandraのコンテナは3つ作成しそれぞれ以下のホスト名と起動するホストサーバーの配置とします。data3cdb1のIPアドレスを10.42.0.48で指定して作成します。コンテナアップデート時(Upgrade利用)にIPアドレスが変わらないようにします。構成後の概要図は以下のようになります。<図8>Stackの作成コンテナの集合体であるサービスが起動する領域を作成します。RancherサーバーのWeb画面より「STACKS」⇒「User」の順番にクリックします。Stack」をクリックします。Stack」の画面で「Name」「Description」に図の通りいれて「Create」ボタンをクリックします。<図9>サービスの作成いよいよCassandraのサービスを作成します。Cattleでは、「サービス」とは一つの機能を提供するまとまりという位置づけでその実体は、複数のコンテナにより構成されます。そのため、CassandraとBusyBoxのコンテナがsidekickで結ばれた状態のサービスを作成します。これをCassandraサービスとして起動します。3つCassandraサーバーが起動するため、最終的に3つサービスが各ホストに一つづつ出来上がります。Service」ボタンをクリックします。図の赤枠のとおり上半分と下半分があるので、まずは上半分を記入します。次の図のとおり設定します。次の図のとおり設定します。<図10-3>次に下半分を記入します。Cassandraコンテナの設定:「Volumes」「Networking」「Scheduling」のタブで次の図のとおり設定します。その他では設定していません。<図10-4>記入がおわったら、2-1でBusyBoxコンテナ用に記入で作成した場所に表示のある「data1」をクリックしてBusyBox用コンテナの設定をつづけます。BusyBoxコンテナの設定:「Volumes」「Scheduling」のタブで次の図のとおり設定します。<図10-5>「Create」をクリックすると一つ目のCassandraサービスが作成されます。♢二つ目以降のサービス作成:2つ目以降も一つ目と同じようにCassandraとBusyBoxのコンテナをsidekickを使い作成しますがCassandraコンテナ作成の設定時に<図10-1>の下半分の設定は次のようにします。設定するタブは「Command」「Volumes」「Networking」「Scheduling」です。「Volumes」「Scheduling」タブの登録は一つ目のCassandra作成と同じです。「Command」「Networking」タブは図のとおり作成します。<図10-6>以上で作成完了です。3つサービスが上がると次のようになります。3台認識されたか確認します。Shell」をクリックしてCassandraサーバーのコンテナにログインします。3台認識されているのがわかります。<図13>ホストのディレクトリとコンテナ内のdataディレクトリが共有されたことを確認します。Host3に入っているcdb3のサービスについて確認します。~]#コンテナ内のディレクトリがホスト接続されて置かれていることがわかります。UpgradeでバージョンアップUpgradeでCassandraをバージョン3.10にバージョンアップします。Upgradeのタイミングでコンテナの9042番ポートをホストサーバーの9042番ポートと紐づけます。最初にstackの画面でサービス毎に「Upgrade」ボタンをクリックします。<図15>次に図のとおり記入します。「Upgrade」ボタンをクリックします。Upgradeがおわったら次のような画面になります。バージョン3.10のコンテナが起動しているのがわかります。IPアドレスは新旧どちらも同じでかわらないことがわかります。右上のほうにある「?」印をクリックするとUpgrade前まで起動していたコンテナは廃棄されUpgradeは完了するのですが、「?」印の右をクリックして「Rollback」をクリックするとUpgrade後のコンテナはなくなりUpgrade前のコンテナを起動してUpgrade前の状態にもどりますが今回は「?」印をクリックでUpgradeを終了します。終了後は次の図のようになります。<図19>同じように残り2つのサービスについてもUpgradeを実施します。最終的には次の図のようになります。「testdata」というkeyspaceに次のようなデータをいれてみました。27ホストサーバーのポートにつながっているのでホスト側から操作します。27);cqlsh>♢データの状態を確認します。rows)cqlsh>ComposeファイルここまでRancherのGUI機能を使いシステム構築してきました。Composeのファイルを使うと一度に作成することができます。Composeファイルには、Dockerの仕組みやRancherでのオーケストレーションのルールをスクリプトベースで書き込みます。Composeファイルを自動的に生成してくれます。「STACKS」→「User」の順にクリックして目的のStackに入ります。YAML」のボタンをクリックします。<図21>Composeファイルを見ることができます。<図22>この2つのComposeファイル両方をStack作成時に読み込ませると同じことをするコンテナを作成できます。ここで作業端末にComposeファイルを保存します。Stackを削除してみました。「STACKS」→「All」の順にクリックするとシステム内のすべてのStackが表示され「CassandraDB」Stackは、削除されたことがわかります。Stack」をクリックして「CassandraDB2」という名前のStackを作成します。rancher-compose.ymlについてもあらかじめ作業端末に保存しておいたファイル名を指定します。<図24>ファイルが読み込まれるとそれぞれ該当のテキストボックスにファイルの内容が表示されるので「Create」ボタンをクリックします。<図25>「Create」をクリックすると同時に作成されます。<図26>♢作成状態の確認コンテナのIPアドレス作成後、試しに「cdb1」のサービスへ入るとCassandraサーバーは「10.42.0.48」のIPアドレス作成されていることがわかります。<図27>ホストサーバーの共有ディレクトリとの接続cdb1サーバーのコンソールからデータディレクトリを確認します。~]#ホストサーバーからも確認すると再作成前のとおりコンテナ内のディレクトリがホスト接続されて置かれていることがわかります。Cassandraの状態cdb1サーバーのコンソールからクラスターが組まれているか確認します。<図29>Cassandra3台で認識していることがわかります。次にHOST1からデータを確認します。rows)cqlsh>コンテナ内のディレクトリにデータを置いているとコンテナ再作成時にデータはすべて失われますが、ホストサーバーの共有ディレクトリにデータを置いていたので再作成前と同じデータを読み取ることができました。起動するコンテナのホスト指定もともと以下で作成していました。host3ホストでもそれぞれのホストサーバー上で起動していることがわかります。Store層を作成してみました。マイクロサービスという考え方ではこの上の層に、WebサーバーなどのアプリケーションをDockerコンテナとして作成しAPIを通して通信することで独自のシステムを構築していく事になります。Rancher「Cattle」で試してみましたが、シンプルでたいへん便利なツールであることがわかりました。このほか「Kubernetes」「Mesos」などのオーケストレーションについても手軽に使える環境をRancherでは提供しているのでシステム構築において選択肢が豊富なツールであることがわかりました。(プライバシーポリシー)情報セキュリティ基本方針サイトポリシーサイトマップ本ホームページに記載する会社名、商品名、ブランド名などは、各社の商号、登録商標、または商標です。Reserved.PageTop。