LoginSignup
10
11

More than 5 years have passed since last update.

Docker Machine CloudStack Driverを使ってDockerホスト・Swarmクラスタを構築する

Last updated at Posted at 2015-12-03

以前の記事でVagrantDocker MachineのGeneric Driverを組み合わせCloudStack上にDockerホストやSwarmクラスタを構築してみました。

Vagrant+Docker Machine Generic Driverを使ってDockerホスト・Swarmクラスタを構築する

CloudStackドライバを作成したので、これを使ってDockerホストやSwarmクラスタを構築してみます。

背景

以前からDocker Machineは様々な仮想環境・クラウドのドライバをビルトインで持っていました。しかし、新たな環境にDocker Machineを対応させるためには開発したドライバのコードを本体にマージしてもらう必要がありました。

2015/11にリリースされたv0.5.0からドライバを本体とは別のバイナリで追加できるようになりました。これによりドライバを追加する際に本体へのマージが不要になり、誰でも好きな環境のドライバを開発・追加できるようになりました。

Release v0.5.0 · docker/machine

現在ビルトインとなっているドライバについても主要なものだけ残して、残りは別のリポジトリに分けていく予定のようです。

現在公開されているドライバのリストは下記にあります。(あとでCloudStackドライバも記載してもらうようにしたいと思います。)

machine/AVAILABLE_DRIVER_PLUGINS.md at master · docker/machine

CloudStackドライバはもともとビルトインのドライバとして開発が進められていましたが、ドライバの仕組みの変更にともないプラグインとして動くよう修正し別のリポジトリで公開しました。

特長

Advanced・Basicゾーンへの対応やスタティックNAT・セキュリティグループへの対応などあらゆるCloudStack環境で動作することを目標としています。

インストール

  1. Docker Machine 0.5.1+ をインストール
  2. CloudStackドライバのインストール

    CloudStackドライバは下記リンクからお使いの環境にあったファイルをダウンロードしてください。
       ダウンロードしたファイルを/usr/local/bin/docker-machine-driver-cloudstack に設置し実行権限をつけてください。
    https://github.com/atsaki/docker-machine-driver-cloudstack/releases/latest

    OSXユーザーはHomebrewを使ってインストールすることもできます。

    brew tap atsaki/docker-machine-driver-cloudstack
    brew install docker-machine-driver-cloudstack
    

使い方

オプションを使ってゾーンやテンプレートなどを指定できます。
APIの認証情報などは環境変数でわたすこともできます。

export CLOUDSTACK_API_URL=<エンドポイント>
export CLOUDSTACK_API_KEY=<APIキー>
export CLOUDSTACK_SECRET_KEY=<シークレットキー>

docker-machine create -d cloudstack
  --cloudstack-template "Ubuntu Server 14.04“
  --cloudstack-zone “jp-east“
  --cloudstack-service-offering “Small“
  --cloudstack-expunge
  docker-machine

Advancedゾーンの場合

Advancedゾーンの例としてIDCFクラウドにDockerホストを構築してみます。
Advancedゾーンであれば他の環境でも同様の方法でDockerホストを構築することができます。

IDCFクラウドではdeployVirtualMachinePOST で実行できないため、--cloudstack-http-get-only オプションをつけるか環境変数CLOUDSTACK_HTTP_GET_ONLY=1 として全てのAPIをGET で実行するようにしてください。

また、仮想マシン削除後にDestroyed状態で残りホストの再構築が失敗してしまうのを防ぐため--cloudstack-expunge オプションをつけておくのがおすすめです。

export CLOUDSTACK_API_URL=<エンドポイント>
export CLOUDSTACK_API_KEY=<APIキー>
export CLOUDSTACK_SECRET_KEY=<シークレットキー>
export CLOUDSTACK_HTTP_GET_ONLY=1

docker-machine create -d cloudstack \
  --cloudstack-template "Ubuntu Server 14.04" \
  --cloudstack-zone "augusta" \
  --cloudstack-service-offering "light.S1" \
  --cloudstack-expunge \
  docker-machine

Advancedゾーンでは、デフォルトで新規にパブリックIPアドレスを取得し、スタティックNATで仮想マシンに接続します。
オプションにより取得済みのIPの使用(--cloudstack-public-ip )や、ポートフォワーディングの使用(--cloudstack-use-port-forward )も可能です。

Swarm関連のオプションをつければSwarmクラスタを構築することもできます。

SWARM_DISCOVERY_TOKEN=$(curl -s -X POST https://discovery.hub.docker.com/v1/clusters)

docker-machine create -d cloudstack \
    --cloudstack-template "Ubuntu Server 14.04 LTS 64-bit" \
    --cloudstack-zone "augusta" \
    --cloudstack-service-offering "light.S1" \
    --cloudstack-expunge \
    --swarm \
    --swarm-master \
    --swarm-discovery "token://${SWARM_DISCOVERY_TOKEN}" \
    swarm-master

for i in $(seq 3); do
  docker-machine create -d cloudstack \
      --cloudstack-template "Ubuntu Server 14.04 LTS 64-bit" \
      --cloudstack-zone "augusta" \
      --cloudstack-service-offering "light.S1" \
      --cloudstack-expunge \
      --swarm \
      --swarm-discovery "token://${SWARM_DISCOVERY_TOKEN}" \
      swarm-agent${i}
done

おわりに

今回はAdvancedゾーンの簡単な例しか示すことができませんでしたが、Basicゾーンで動かすことも可能です。
ぜひ使っていただいてご意見・PRいただければありがたいです。

10
11
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
10
11