vExperts Advent Calendar 2015の13日目の記事です。
#やったこと
DevBoxのPhoton Controller環境として構築できるswarmクラスターは、docker 1.8.1/swarm 0.4.0と少し古い。DevBoxのDeployerコンテナとswarm用ベースイメージを修正して、最新のdocker 1.9.1/swarm 1.0.0で、マルチホストネットワーキングに対応するswarmクラスターを構成できるようにしてみた。
「VMware Photon Controllerの使い方」はここ。
#クラスター作成時のdeployerの役割
「photon cluster create」で実行されるクラスターの作成はPhoton Controllerのdeployerが担当している。deployerはクラスタの作成要求に応じて、必要な仮想マシン(etcd,master,slave)を生成し、それぞれの役割に最適化する。
##cloud-initによるカスタマイズ
deployerはimagesとして登録したベースイメージを利用して仮想マシンをリンククローンとして作成し、起動時にcloud-initを利用して仮想マシンのカスタマイズを実行している。cloud-initが参照するmeta-data、user-dataはISOイメージにより仮想マシンに対して提供されるため、クラスターを構成する仮想マシンにはISOイメージが接続されている。
ide0:0.deviceType = "cdrom-image"
ide0:0.fileName = "esx-create-vm-iso-config-file-64f2b514-242f-4414-8ee0-726b74d67420.iso"
ide0:0.present = "TRUE"
##user-data テンプレートファイル
cloud-initで利用されるuser-detaは、deployerが以下のテンプレートを利用して各仮想マシン向けに動的に生成する。
作成された仮想マシンが参照したuser-dataは/var/lib/cloud/instance/user-data.txt
に保存されている。
##swarmベースイメージ
配布されているswarm用ベースイメージはdocker 1.8.1がインストールしてあり、swarm 0.4.0のdockerイメージが格納されている。
root@master-c7b0d516-06f1-4b97-8eed-e4bc30543dad [ ~ ]# export DOCKER_HOST="tcp://192.168.209.135:2375"
root@master-c7b0d516-06f1-4b97-8eed-e4bc30543dad [ ~ ]# docker version
Client:
Version: 1.8.1
API version: 1.20
Go version: go1.4.2
Git commit: d12ea79
Built: Thu Aug 13 02:49:29 UTC 2015
OS/Arch: linux/amd64
Server:
Version: 1.8.1
API version: 1.20
Go version: go1.4.2
Git commit: d12ea79
Built: Thu Aug 13 02:49:29 UTC 2015
OS/Arch: linux/amd64
root@master-c7b0d516-06f1-4b97-8eed-e4bc30543dad [ ~ ]# docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
swarm 0.4.0 207e8b983242 3 months ago 10.2 MB
quay.io/coreos/etcd v2.0.8 3b3ecf8306ba 8 months ago 12.79 MB
#docker 1.9.1/swarm 1.0.0への対応方法
2つの対応が必要。
- ベースイメージを更新してクラスターを構成するVMのdockerのバージョンを1.9.1に変更する。
- deployerが持つuser-data.templateファイルを修正し、swarm 1.0.0とマルチホストネットワーキングに対応するためにdockerの起動オプションを追加する。
##ベースイメージの更新
###ベースイメージのdockerバイナリの変更
swarm用ベースイメージをダウンロードして、仮想マシンとして起動する。起動した仮想マシンにログイン(ユーザー名 : root/パスワード : vmware)してIPアドレスを設定し、docker-1.9.1をダウンロードしてプリインストールされているdockerと差し替える。
# ip link set en16780032 up
# ip address add 192.168.209.41/24 dev eno16780032
# ip route add default via 192.168.209.2
# curl -o /usr/bin/docker-1.9.1 https://get.docker.com/builds/Linux/x86_64/docker-1.9.1
# chmod 755 /usr/bin/docker-1.9.1
# rm /usr/bin/docker
# ln -s /usr/bin/docker-1.9.1 /usr/bin/docker
# ls -l /usr/bin/docker*
lrwxrwxrwx 1 root root 21 Dec 1 02:37 /usr/bin/docker -> /usr/bin/docker-1.9.1
-rwxr-xr-x 1 root root 19582488 Aug 20 19:00 /usr/bin/docker-1.8.1
-rwxr-xr-x 1 root root 30222575 Dec 1 02:36 /usr/bin/docker-1.9.1
# shutdown -h now
###ベースイメージのエクスポート
vSphere Clientで仮想マシンをエクスポートして、vmdkファイルを取り出す。
###既存ベースイメージの削除
Photon Controllerにswarm用のベースイメージが登録されている場合は、ベースイメージを一度削除する。
PS C:\> photon image list
Using target 'https://192.168.209.29:443'
PS C:\> photon image list
Using target 'https://192.168.209.29:443'
ID Name State Size(Byte) Replication_type
6c78c7df-994d-45d7-9a50-d5f5720868eb photon-swarm-vm.vmdk READY 85899345968 EAGER
Total: 1
PS C:\> photon image delete 6c78c7df-994d-45d7-9a50-d5f5720868eb
Are you sure [y/n]? y
Using target 'https://192.168.209.29:443'
Deleted image 6c78c7df-994d-45d7-9a50-d5f5720868eb
###新規ベースイメージの登録
エクスポートした仮想マシンのvmdkファイルをベースイメージとしてアップロードする。
PS C:\> photon image create C:\Users\Administrator\Desktop\newvm\newvm-disk1.vmdk -n photon-swarm-vm.vmdk -i EAGER
Using target 'https://192.168.209.29:443'
Created image 'photon-swarm-vm.vmdk' ID: 8e463b88-bb21-4f84-a13d-2bf7c3ee97ed
#swarm 1.0.0への対応とdocker起動オプションの修正
deployerコンテナ内のuser-data.templateファイルを修正する。ファイルの修正だけなので、修正したファイルを用意して、docker buildを使って既存のdeployerコンテナイメージのテンプレートファイルだけを差し替える。
##deployerコンテナイメージの更新
deployerコンテナ内のcloud-initのテンプレートファイルを修正する。
-
swarmImage=swarm:0.4.0
をswarmImage=swarm:1.0.0
に変更し、swarmのバージョンを1.0.0に変更する。 -
マルチホストネットワーキングに対応するためにdockerの起動オプションを変更する。
cloud-initはswarmクラスターのmaster/slave VMに
/tmp/start-swarm-master.sh
、/tmp/start-swarm-slave.sh
を作成して実行する。
このスクリプトは/etc/systemd/system/multi-user.target.wants/docker.services
を書き換えて、systemdで起動されるdockerの起動オプションを修正している。「ExecStart」行に対する変更内容にマルチホストネットワーキング構成時に必要なetcdの指定(--cluster-store=etcd://xxx.xxx.xxx.xxx:2379)と、swarmクラスター参加時にアドバタイズする自身のIP(--cluster-advertise)を追加する。
deployerは$ETCD_QUORUMとして、etcdのアドレスを持っているがポート番号が付加されているため、ETCD_IP=`echo $ETCD_QUORUM | sed 's/\:2379//g'
としてアドレスだけを取り出している。(sedの正規表現として渡すため「:」にエスケープを付与する必要があり、$ETCD_QUORUMをそのまま利用することができない)
####swarm-master-user-data.template
--- swarm-master-user-data.template 2015-12-01 21:53:15.037778099 +0900
+++ swarm-master-user-data.template.new 2015-12-01 18:34:48.000000000 +0900
@@ -32,13 +32,14 @@
- content: |
eno_name=$(ip addr | grep eno | sed 's/.*\(eno.*\):.*/\1/' | head -n 1)
ipAddress=`ifconfig ${eno_name} | sed -n '/dr:/{;s/.*dr://;s/ .*//;p;}'`
- swarmImage=swarm:0.4.0
+ swarmImage=swarm:1.0.0
echo "Configuring docker daemon"
systemctl stop docker
rm /etc/docker/key.json
unitFile=`systemctl cat docker | grep "#" | cut -d" " -f2`
- sed -i "s:^ExecStart.*:ExecStart=/bin/docker -d -H tcp\://0.0.0.0\:2375:g" ${unitFile}
+ ETCD_IP=`echo $ETCD_QUORUM | sed 's/\:2379//g'`
+ sed -i "s:^ExecStart.*:ExecStart=/bin/docker -d -H tcp\://0.0.0.0\:2375 --cluster-store=etcd\://${ETCD_IP}\:2379 --cluster-advertise=$ipAddress\:2375:g" ${unitFile}
systemctl daemon-reload
systemctl start docker
sleep 5
####swarm-slave-user-data.template
--- swarm-slave-user-data.template 2015-12-01 21:53:42.333777123 +0900
+++ swarm-slave-user-data.template.new 2015-12-01 18:49:27.526172473 +0900
@@ -32,13 +32,14 @@
- content: |
eno_name=$(ip addr | grep eno | sed 's/.*\(eno.*\):.*/\1/' | head -n 1)
ipAddress=`ifconfig ${eno_name} | sed -n '/dr:/{;s/.*dr://;s/ .*//;p;}'`
- swarmImage=swarm:0.4.0
+ swarmImage=swarm:1.0.0
echo "Configuring docker daemon"
systemctl stop docker
rm /etc/docker/key.json
unitFile=`systemctl cat docker | grep "#" | cut -d" " -f2`
- sed -i "s:^ExecStart.*:ExecStart=/bin/docker -d -H tcp\://0.0.0.0\:2375:g" ${unitFile}
+ ETCD_IP=`echo $ETCD_QUORUM | sed 's/\:2379//g'`
+ sed -i "s:^ExecStart.*:ExecStart=/bin/docker -d -H tcp\://0.0.0.0\:2375 --cluster-store=etcd\://${ETCD_IP}\:2379 --cluster-advertise=$ipAddress\:2375:g" ${unitFile}
systemctl daemon-reload
systemctl start docker
sleep 5
##deployer Dockerイメージの作成
devbox内で起動しているコンテナイメージのdevbox/deployerをベースにして、swarm-master-user-data.template
とswarm-slave-user-data.template
ファイル上書きして、新しいdeployerイメージを作成する。
###Dockerfileの作成
deployerイメージを作成するためのDockerfileを作成する。
FROM devbox/deployer
COPY swarm-master-user-data.template /usr/lib/esxcloud/deployer/scripts/swarm-master-user-data.template.new
COPY swarm-slave-user-data.template /usr/lib/esxcloud/deployer/scripts/swarm-slave-user-data.template.new
###docker build
Dockerfileを新しいuser-data.templateと同じフォルダに置いて、docker buildコマンドでdeployerイメージを作成する。
root@devbox-discus [ ~/deployer ]# ls -l
total 12
-rw-r--r-- 1 root root 236 Dec 1 13:10 Dockerfile
-rw-r--r-- 1 root root 2096 Dec 1 09:34 swarm-master-user-data.template.new
-rw-r--r-- 1 root root 1964 Dec 1 09:49 swarm-slave-user-data.template.new
root@devbox-discus [ ~/deployer ]# docker build -t deployer .
Sending build context to Docker daemon 7.68 kB
Step 0 : FROM devbox/deployer
---> e92d8e6b330f
Step 1 : COPY swarm-master-user-data.template.new /usr/lib/esxcloud/deployer/scripts/swarm-master-user-data.template
---> 941953dc13ab
Removing intermediate container b2f42e29b77d
Step 2 : COPY swarm-slave-user-data.template.new /usr/lib/esxcloud/deployer/scripts/swarm-slave-user-data.template
---> cfaf70b953f1
Removing intermediate container ced78dd20121
Successfully built cfaf70b953f1
root@devbox-discus [ ~/deployer ]# docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
deployer latest cfaf70b953f1 43 seconds ago 475.2 MB
devbox/cloud_store latest f62bb249a94c 2 weeks ago 440.1 MB
devbox/deployer latest e92d8e6b330f 2 weeks ago 475.2 MB
devbox/housekeeper latest 93fb83074572 2 weeks ago 448.3 MB
devbox/root_scheduler latest 6f6c7fe46286 2 weeks ago 426.9 MB
devbox/chairman latest 4910ed61a142 2 weeks ago 447.6 MB
devbox/management_api latest 35e3d8afe046 2 weeks ago 501.9 MB
devbox/agent latest 08bf3267b8b1 2 weeks ago 1.919 GB
devbox/compileservices latest ac8c364a94d5 4 weeks ago 1.911 GB
devbox/servicebase latest 4d1ce055e2d7 4 weeks ago 386.3 MB
devbox/haproxy latest 5ee94d2f1f42 4 weeks ago 318.9 MB
devbox/zookeeper latest 0b933cc83feb 4 weeks ago 407 MB
centos 6.7 3fba1048142f 6 weeks ago 190.6 MB
###既存deployerコンテナの停止
新しいdeployerを起動するため、DevBoxで起動しているdevbox/deployerコンテナを停止する。
root@devbox-discus [ ~/deployer ]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
0b02ef6ad4d1 devbox/cloud_store "/bin/bash /etc/esxcl" 2 weeks ago Up About an hour devbox_cloud_store_container
2bf7660ffc5e devbox/deployer "/bin/bash /etc/esxcl" 2 weeks ago Up About an hour devbox_deployer_container
6658d8091455 devbox/housekeeper "/bin/bash /etc/esxcl" 2 weeks ago Up About an hour devbox_housekeeper_container
ebb816a04449 devbox/root_scheduler "/bin/bash /etc/esxcl" 2 weeks ago Up About an hour devbox_root_scheduler_container
c729a6596f24 devbox/chairman "/bin/bash /etc/esxcl" 2 weeks ago Up About an hour devbox_chairman_container
88a664a7851e devbox/management_api "/bin/bash /etc/esxcl" 2 weeks ago Up About an hour devbox_management_api_container
56f5000b3f7a devbox/haproxy "/bin/bash /etc/hapro" 2 weeks ago Up About an hour devbox_haproxy_container
de24c74c9ca6 devbox/zookeeper "/bin/bash /usr/lib/z" 2 weeks ago Up About an hour devbox_zookeeper_container
root@devbox-discus [ ~/deployer ]# docker stop devbox_deployer_container
devbox_deployer_container
###新しいdeployerコンテナの起動
deployerコンテナは以下のオプションで実行する。オプションはdokcer inspect devbox_deployer_container
で確認した。
- ホストネットワーキングを利用 (--net=host)
- DevBoxの再起動後も自動的にコンテナが起動するようにする (--restart=always)
- 必要なボリュームのマウント
- /var/esxcloud:/var/esxcloud
- /devbox_data/tmp:/devbox_data/tmp
- /esxcloud/java/distributions/configurations/configuration-deployer:/etc/esxcloud
- /vagrant/log/deployer:/vagrant/log
- /vagrant/log/deployer/script_logs:/vagrant/log/script_logs
- /tmp/devbox_datastore:/tmp
- エントリーポイントとして「/etc/esxcloud/run.sh」を実行
root@devbox-discus [ ~/deployer ]# docker run -d -v /var/esxcloud:/var/esxcloud -v /devbox_data/tmp:/devbox_data/tmp -v /esxcloud/java/distributions/configurations/configuration
-deployer:/etc/esxcloud -v /vagrant/log/deployer:/vagrant/log -v /vagrant/log/deployer/script_logs:/vagrant/log/script_logs -v /tmp/devbox_datastore:/tmp --restart=always --name deployer --net=host deployer /etc/esxcloud/run.sh
143e6fb3e323ca9c881c5a45479a471b829b688e79265373f68a7350d8614595
root@devbox-discus [ ~/deployer ]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
143e6fb3e323 deployer "/bin/bash /etc/esxcl" 3 seconds ago Up 3 seconds deployer
0b02ef6ad4d1 devbox/cloud_store "/bin/bash /etc/esxcl" 2 weeks ago Up 2 hours devbox_cloud_store_container
6658d8091455 devbox/housekeeper "/bin/bash /etc/esxcl" 2 weeks ago Up 2 hours devbox_housekeeper_container
ebb816a04449 devbox/root_scheduler "/bin/bash /etc/esxcl" 2 weeks ago Up 2 hours devbox_root_scheduler_container
c729a6596f24 devbox/chairman "/bin/bash /etc/esxcl" 2 weeks ago Up 2 hours devbox_chairman_container
88a664a7851e devbox/management_api "/bin/bash /etc/esxcl" 2 weeks ago Up 2 hours devbox_management_api_container
56f5000b3f7a devbox/haproxy "/bin/bash /etc/hapro" 2 weeks ago Up 2 hours devbox_haproxy_container
de24c74c9ca6 devbox/zookeeper "/bin/bash /usr/lib/z" 2 weeks ago Up 2 hours devbox_zookeeper_container
#新しいswarmクラスターの作成
新しいベースイメージとdeployerを使ってswarmクラスターを作成する。
PS C:\> photon cluster create -n MySwarm1 -k SWARM -s 2 --dns 192.168.209.2 --gateway 192.168.209.2 --netmask 255.255.
55.0 --etcd1 192.168.209.50
Using target 'https://192.168.209.29:443'
etcd server 2 static IP address (leave blank for none):
Creating cluster: MySwarm1 (SWARM)
Slave count: 2
Are you sure [y/n]? y
Cluster created: ID = 132499cf-c440-43ef-acad-35556ea24a95
Note: the cluster has been created with minimal resources. You can use the cluster now.
A background task is running to gradually expand the cluster to its target capacity.
You can run 'cluster show 132499cf-c440-43ef-acad-35556ea24a95' to see the state of the cluster.
クラスター作成の確認
PS C:\> photon cluster list
Using target 'https://192.168.209.29:443'
ID Name Type State Slave Count
132499cf-c440-43ef-acad-35556ea24a95 MySwarm1 SWARM READY 2
Total: 1
READY: 1
swarmクラスターのmaster VMのIPアドレスの確認
PS C:\> photon cluster show 132499cf-c440-43ef-acad-35556ea24a95
Using target 'https://192.168.209.29:443'
Cluster ID: 132499cf-c440-43ef-acad-35556ea24a95
Name: MySwarm1
State: READY
Type: SWARM
Slave count: 2
VM ID VM Name VM IP
6722791e-46e4-455e-a440-d36867315f26 master-90751931-b8ce-4329-9c28-210bcdb1f4d1 192.168.209.139
2fd8e15d-dbb9-4c9b-9767-27f5d42ca3b9 etcd-3f8bd757-bfdc-45a9-8b23-4e2f4e5d44e1 192.168.209.50
#Docker/Swarmの動作確認
##コンテナ向けオーバーレイネットワークの作成
DOCKER_HOSTとしてmasterのIPアドレスを指定して、オーバーレイネットワークを作成してみる。
PS C:\> $env:DOCKER_HOST="tcp://192.168.209.139:8333"
PS C:\> docker network ls
NETWORK ID NAME DRIVER
cabba076a0b6 master-90751931-b8ce-4329-9c28-210bcdb1f4d1/host host
85d6584a36c7 slave-a73d4f62-787e-4a68-9c1f-67b2d79f3a0f/none null
458578c641a1 slave-5d5770f5-d5cf-4c7f-a485-660a6ff76159/bridge bridge
e3fd749cf50a slave-5d5770f5-d5cf-4c7f-a485-660a6ff76159/none null
012a4899d4da slave-5d5770f5-d5cf-4c7f-a485-660a6ff76159/host host
e35227f783b3 master-90751931-b8ce-4329-9c28-210bcdb1f4d1/none null
71ed853880d1 slave-a73d4f62-787e-4a68-9c1f-67b2d79f3a0f/host host
cdc524e05788 slave-a73d4f62-787e-4a68-9c1f-67b2d79f3a0f/bridge bridge
af76d311d84d master-90751931-b8ce-4329-9c28-210bcdb1f4d1/bridge bridge
PS C:\> docker network create mynet
d9e89601445d0cb94dd9c153e5792a48b0b1ae343036fd089542a1fa6a832432
PS C:\> docker network ls
NETWORK ID NAME DRIVER
af76d311d84d master-90751931-b8ce-4329-9c28-210bcdb1f4d1/bridge bridge
85d6584a36c7 slave-a73d4f62-787e-4a68-9c1f-67b2d79f3a0f/none null
458578c641a1 slave-5d5770f5-d5cf-4c7f-a485-660a6ff76159/bridge bridge
012a4899d4da slave-5d5770f5-d5cf-4c7f-a485-660a6ff76159/host host
71ed853880d1 slave-a73d4f62-787e-4a68-9c1f-67b2d79f3a0f/host host
e3fd749cf50a slave-5d5770f5-d5cf-4c7f-a485-660a6ff76159/none null
d9e89601445d mynet overlay
e35227f783b3 master-90751931-b8ce-4329-9c28-210bcdb1f4d1/none null
cabba076a0b6 master-90751931-b8ce-4329-9c28-210bcdb1f4d1/host host
cdc524e05788 slave-a73d4f62-787e-4a68-9c1f-67b2d79f3a0f/bridge bridge
##オーバーレイネットワークを利用してコンテナを起動してみる
nginxとubuntuコンテナを作成したmynetに接続して起動する。
PS C:\> docker run -d --name web --net mynet nginx
a2816954e7638f5bf7f6299d30f3214f34e3fd9eccbe3f1975196b666629386f
PS C:\> docker run -itd --name ubuntu --net mynet ubuntu bash
e5da53a681487a167f96d31c58f4695b229aca08d5f38d6328d9b4608f84307c
web(nginx)はslave-a73d4f62-787e-4a68-9c1f-67b2d79f3a0f/web
、ubuntuはslave-5d5770f5-d5cf-4c7f-a485-660a6ff76159/ubuntu
で起動している。(異なるdockerホストで起動している)
PS C:\> docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
e5da53a68148 ubuntu "bash" 46 seconds ago Up 20 seconds slave-5d5770f5-d5cf-4c7f-a485-660a6ff76159/ubuntu
a2816954e763 nginx "nginx -g 'daemon off" 2 minutes ago Up About a minute 80/tcp, 443/tcp slave-a73d4f62-787e-4a68-9c1f-67b2d79f3a0f/web
7542cbcd4884 swarm:1.0.0 "/swarm join --addr=1" 30 minutes ago Up 30 minutes 2375/tcp slave-5d5770f5-d5cf-4c7f-a485-660a6ff76159/fervent_blackwell
87ad8a6a45bb swarm:1.0.0 "/swarm join --addr=1" 31 minutes ago Up 31 minutes 2375/tcp slave-a73d4f62-787e-4a68-9c1f-67b2d79f3a0f/focused_brahmagupta
32c11d4d942e swarm:1.0.0 "/swarm manage etcd:/" 32 minutes ago Up 32 minutes 192.168.209.139:8333->2375/tcp master-90751931-b8ce-4329-9c28-210bcdb1f4d1/romantic_engelbart
2db4e7250801 swarm:1.0.0 "/swarm join --addr=1" 32 minutes ago Up 32 minutes 2375/tcp master-90751931-b8ce-4329-9c28-210bcdb1f4d1/condescending_blackwell
ubuntuコンテナにアタッチして、curlをインストールしてwebコンテナに接続を確認。
コンテナ名を利用して、ホスト間のコンテナ同士がオーバーレイネットワークにより通信できている。
PS C:\> docker attach ubuntu
root@e5da53a68148:/#
root@e5da53a68148:/# apt-get -y install curl
root@e5da53a68148:/# curl web.mynet
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
body {
width: 35em;
margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif;
}
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>
<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>
<p><em>Thank you for using nginx.</em></p>
</body>
</html>
ubuntuのhostsファイルには、同じネットワークに接続されているwebコンテナのエントリが追加されている。
root@e5da53a68148:/# cat /etc/hosts
127.0.0.localhost ip6-localhost ip6-loopback
fe00::0 ip6-mcastprefix
ff02::1 ip6-allrouters
10.0.0.2 web.mynet
###既存deployerコンテナの削除
既存のdeployerコンテナを削除して、DevBox再起動時にdevbox/deployerが起動しないようにする。
root@devbox-discus [ ~/deployer ]# docker rm -f devbox_deployer_container
devbox_deployer_container
#その他
deployer作成のために利用したDockerfile
、swarm-master-user-data.template.new
、swarm-slave-user-data.template.new
はここに置いた。