LoginSignup
11
10

More than 5 years have passed since last update.

[実践編]docker + さくらのクラウドでマルチホストなoverlayネットワークしてみるよ(準備編)

Last updated at Posted at 2015-12-01

関連記事

[導入編]docker-machine + さくらのクラウドでお手軽リモートdockerするよ

[実践編]docker-machine + さくらのクラウドでリモートdocker:ビルドサーバ作るよ

[実践編]docker-machine + さくらのクラウド:石狩〜東京間でスケールアウト可能なswarmクラスタ組むよ。


はじめに

前回はswarmを使ってクラスタリングしてみました。
今回は一歩進んで、クラスタの構成情報を専用のネットワークに分離した上でKVS(Key-Value-Store)で管理するようにしてみます。

ネットワークの分離にはdocker1.9にて正式実装されたマルチホストネットワーク機能を利用します。
また、さくらのクラウドのスイッチ/ルーター機能を利用するため、docker-machine-sakuracloud v0.0.5を使用します。

参考情報

マルチホストネットワークについては以下の記事が参考になると思います。

Docker : マルチホスト間での仮想ネットワーク

Dockerのoverlayネットワークでコンテナを分散実行

docker-machine-sakuracloud v0.0.5について

今回docker1.9を利用するにあたりdocker-machine-sakuracloudをバージョンアップしました。
主な変更点は以下の通りです。

  • docker-machine 0.5.1で行われたプラグイン関連の後方互換性のない変更への対応
    :up: 2015/12/5:後方互換が確保されるようにdocker-machine側が修正されていました。

  • マシン作成時にカーネル3.16以降を適用

  • マシン作成時にスイッチ/ルーター接続済みのNICを設定するオプションの追加

以下のようにオプション指定することでプライベートIPを持ったマシンを作成できます。
:up: 2016/1/21:追加NICのIPアドレス指定オプションを修正


 $ docker-machine create -d sakuracloud \
                         --sakuracloud-access-token [アクセストークン] \
                         --sakuracloud-access-token-secret [トークンシークレット] \
                         --sakuracloud-connected-switch [さくらのクラウドで作成したスイッチのID] \
                         --sakuracloud-private-ip [追加NICのIPアドレス] \
                         --sakuracloud-private-ip-subnet-mask [追加NICのサブネットマスク] \
                         sakura-dev

カーネル3.16以降に対応したことでdocker1.9のネットワーク機能が利用できるようになりました。

今回の手順と構成

kobito.1449061175.615776.png

手順

  1. さくらのクラウド上でスイッチ/ブリッジを作成
  2. クラスタの構成情報を格納するKVS(consul)ノードを作成
  3. swarmマネージャノードを作成
  4. swarmエージェントノードを各リージョンに作成
  5. dockerオーバーレイネットワークの作成
  6. コンテナを作成して動作確認

構成

前回の構成に加えてdockerにてoverlayドライバを利用し、
クラスタ間での通信を管理系として公開系とは別ネットワークに分離してみます。

マシン作成には前回と同じくdocker-machine-sakuracloudを使います。
docker-machine-sakuracloudの使い方についてはこちらを参照してください。

マシン一覧

役割 リージョン サーバ名 公開系IP 管理系IP
KVS(consul) 石狩第1リージョン sakura-is1a-kvs (さくらのクラウドで自動割当) 192.168.11.101/24
swarmマネージャ 石狩第1リージョン sakura-is1a-manager (さくらのクラウドで自動割当) 192.168.11.151/24
swarmエージェント 石狩第1リージョン sakura-is1a-agent (さくらのクラウドで自動割当) 192.168.11.201/24
  石狩第2リージョン sakura-is1b-agent (さくらのクラウドで自動割当) 192.168.11.202/24
  東京第1リージョン sakura-tk1a-agent (さくらのクラウドで自動割当) 192.168.11.203/24

準備

前回と違いクラスタの管理情報をconsulに格納するため、swarm用のディスカバリトークンは必要ありません。

マシンを計5台作成することになるため、入力で楽するために以下環境変数を設定しておきます。
以降の説明では環境変数設定済みという前提で記載していきます。

# コマンド入力補助用の環境変数設定
$ export SAKURACLOUD_ACCESS_TOKEN=[さくらのクラウドのアクセストークン]
$ export SAKURACLOUD_ACCESS_TOKEN_SECRET=[さくらのクラウドのトークンシークレット]

実施

手順1. さくらのクラウド上でスイッチ/ブリッジを作成

各リージョンにスイッチを追加し各マシンへ接続します。
さくらのクラウドの管理コンソール上から作業してください。

スイッチの追加

管理コンソール左ナビのメニュー内の「スイッチ」から追加しておきます。
ここではスイッチ名「switch_is1a」としておきました。

kobito.1448789763.629505.png

後ほどスイッチのIDが必要になるため控えておきます。

スイッチ.png

石狩第2ゾーン、東京第1ゾーンでも同様にスイッチを追加しておきます。

ブリッジの追加とスイッチとの接続

リージョン間のスイッチを接続する「ブリッジ」を追加します。
同じく管理コンソールから作成しましょう。

ブリッジ作成後、ブリッジの詳細画面からスイッチとの接続をお忘れなく。

ブリッジは全リージョン通じて1つだけ作成すればOKです。
他のリージョンではスイッチとの接続のみ同様に作業しておいてください。

手順2. クラスタの構成情報を格納するKVS(consul)ノードを作成

KVS(consul)を稼働させるマシンを作成します。
管理系IPとして192.168.11.101/24を割り当てます。

# 石狩第1リージョンにKVS用のマシン構築
$ docker-machine create -d sakuracloud \
        --sakuracloud-connected-switch [手順1で控えたスイッチのID] \
        --sakuracloud-additional-ip 192.168.11.101 \
        --sakuracloud-additional-subnet-mask 255.255.255.0 \
        sakura-is1a-kvs

作成したらconsulを起動しておきます。
起動時に管理系IPにexposeするようにpオプションをIP付き指定しておきます。


# dockerで作成したマシンを使うように設定
$ eval "$(docker-machine env sakura-is1a-kvs)"

# consul起動
$ docker run -d -p "192.168.11.101:8500:8500" -h "consul" progrium/consul -server -bootstrap

手順3. swarmマネージャノードを作成

続けてswarmマネージャノードを作成します。

swarm管理情報の格納先として、先ほどのconsulのIPアドレス+ポート192.168.11.101:8500を指定しています。

また、--engine-optを指定しdockerデーモンへクラスタ管理情報の扱い方を指示しています。
cluster-storeでクラスタ管理情報の格納先を指定し、
cluster-advertiseでクラスタ管理情報をやり取りするNICとポート番号を指定しています。

$ docker-machine create -d sakuracloud \
        --swarm \
        --swarm-master \
        --swarm-discovery consul://192.168.11.101:8500 \
        --engine-opt="cluster-store=consul://192.168.11.101:8500" \
        --engine-opt="cluster-advertise=eth1:2376" \
        --sakuracloud-connected-switch [手順1で控えたスイッチのID] \
        --sakuracloud-private-ip 192.168.11.151 \
        --sakuracloud-private-ip-subnet-mask 255.255.255.0 \
        sakura-is1a-manager

手順4. swarmエージェントノードを各リージョンに作成

石狩第1、石狩第2、東京リージョン各リージョンにswarmエージェントノードを作成します。
--swarm-masterの指定がないことと、
各リージョンでスイッチのIDが異なることに注意してください。

# 石狩第1リージョン
$ docker-machine create -d sakuracloud \
        --swarm \
        --swarm-discovery consul://192.168.11.101:8500 \
        --engine-opt="cluster-store=consul://192.168.11.101:8500" \
        --engine-opt="cluster-advertise=eth1:2376" \
        --sakuracloud-connected-switch [手順1で控えたスイッチのID] \
        --sakuracloud-private-ip 192.168.11.201 \
        --sakuracloud-private-ip-subnet-mask 255.255.255.0 \
        --sakuracloud-region is1a \
        sakura-is1a-agent


# 石狩第2リージョン
$ docker-machine create -d sakuracloud \
        --swarm \
        --swarm-discovery consul://192.168.11.101:8500 \
        --engine-opt="cluster-store=consul://192.168.11.101:8500" \
        --engine-opt="cluster-advertise=eth1:2376" \
        --sakuracloud-connected-switch [手順1で控えたスイッチのID] \
        --sakuracloud-private-ip 192.168.11.202 \
        --sakuracloud-private-ip-subnet-mask 255.255.255.0 \
        --sakuracloud-region is1b \
        sakura-is1b-agent

# 東京第1リージョン
$ docker-machine create -d sakuracloud \
        --swarm \
        --swarm-discovery consul://192.168.11.101:8500 \
        --engine-opt="cluster-store=consul://192.168.11.101:8500" \
        --engine-opt="cluster-advertise=eth1:2376" \
        --sakuracloud-connected-switch [手順1で控えたスイッチのID] \
        --sakuracloud-private-ip 192.168.11.203 \
        --sakuracloud-private-ip-subnet-mask 255.255.255.0 \
        --sakuracloud-region tk1a \
        sakura-tk1a-agent

ここまでで計5台のマシンができているはずです。
以下コマンドで確認しておきましょう。

$ docker-machine ls

sakura_overlay_—_ubuntu_sakura-dev____—_-bash_—_130×35.png

それぞれのマシンにSSH接続し、管理系IP宛でpingが通ることも確認できます。

$ docker-machine ssh sakura-tk1a-agent
$ ping 192.168.11.201 #東京から石狩へpingが届く

ここまででクラスタを構成するマシンの準備ができました。
次回はいよいよdockerでoverlayネットワークを構築してみましょう。

本日は以上です。

11
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
10