docker-machine + Portainerのクラスタ環境に新しいマシンを追加してクラスタに参加させる

docker-machine + Portainerで構築したdockerクラスタ環境に、新しいdocker-machineを追加してクラスタに参加させる方法をまとめました。

開発マシン環境

  • Surface Book (Core i7 / 8GB / 256GB)
  • Windows 10 Pro
  • Hyper-V

すでに、master-01というdocker-machineをマスターノードとして立ち上げて、そこでPortainerが走っている前提とします。

docker-machineを追加する

まずはdocker-machineを追加します。外部仮想スイッチ「Main-External」、マシン名は「worker-01」とします。

docker-machine create -d hyperv --hyperv-virtual-switch "Main-External" worker-01

これだけで自動で作成してくれます。便利ですね。

docker machineをクラスタに参加させる

既存のクラスタ環境に参加するための設定をします。

workerノードとして参加する

マスターノード(master-01)のdocker-machineにsshでログインして、swarmに参加するためのコードを取得します。

マスターノードのマシンにログインします。

docker-machine ssh master-01

コードを取得します。

sudo docker swarm join-token worker

swarmに参加するコードが出てくるのでコピーしておきます。

To add a manager to this swarm, run the following command:

    docker swarm join --token SWMTKN-1-207eoowppd5y68ehm647qxyihu6j28c01cytx5hgflp4z6ht31-74b2ekwgpbjh3dod2ibe2xh5y 192.168.100.133:2377

マスターノードのswarmに参加する

今度は、worker-01マシンにsshでログインします。

docker-machine ssh worker-01

先程コピーしておいたswarm参加コマンドを実行します。sudoが必要なので追加します。

sudo docker swarm join --token SWMTKN-1-207eoowppd5y68ehm647qxyihu6j28c01cytx5hgflp4z6ht31-4e4ft4ku6ych2ajfsgbf2z0xl 192.168.100.133:2377

Portainer Agentをインストールする

次に、Portainerで管理できるように、Portainer Agentをインストールして、portainer agentコンテナをstackとして作成します。

文章にすると難解な気がしますが、コマンドを実行するだけです。

wget https://downloads.portainer.io/agent-stack.yml
sudo docker stack deploy --compose-file=agent-stack.yml portainer-agent

これで、Portainerで管理できる準備が揃いました。

(おまけ)ローカルレジストリとの通信を許可する

ここは必要な場合のみで必須ではありません。

毎回Docker Hubからdocker pullをすると時間がかかるので、ローカルレジストリから各コンテナにpullさせたいという場合、ローカル開発環境ではHTTPS証明書を用意するのが結構面倒です。

そこで、ローカルレジストリだけは、httpでも通信できるように設定します。これは、ローカルレジストリにアクセスするすべてのdocker-machine(masterも含む)で必要です。

sudo vi /etc/docker/daemon.json

下記の内容を追記します。

{
  "insecure-registries" : ["myregistrydomain.com:5000"]
}

設定を反映するために、dockerを再起動します。

sudo /etc/init.d/docker restartSA

Portainerで管理できるように設定する

Portainerのエンドポイントに登録する

今度はPortainerの管理画面から、エンドポイントを追加します。

Endpoints > Add Endpointから追加画面を出します。

Environment type -> Agent
Name -> ご自由に
Endpoint URL -> ワーカーマシンのIPアドレス:9001

でOKです。Endpoint URLが間違っていると追加できません。

エラー画面がでなければ追加できています。

Swarm画面から確認する

念のために、追加したノードがSwarmに参加できているかも確認しましょう。

Portainer管理画面のSwarmメニューから確認します。

追加したworkerノードが追加されていればOKです。


docker-machine + Portainerのクラスタ環境に新しいマシンを追加してクラスタに参加させる方法を見てきました。

結構作業はあるんですが、Portainerですべての仮想マシン(ノード)を管理して、クラスタ管理、コンテナ管理、イメージ管理ができるのはとても便利なので、後々の手間を無くすと考えると重要な作業ですね。