【问题标题】:Single script for Docker Swarm cluster setupDocker Swarm 集群设置的单一脚本
【发布时间】:2018-05-04 04:54:27
【问题描述】:
我在我的 preprod 服务器(3 个管理节点和 7 个工作节点)中设置了 Docker Swarm 集群;但是我想在生产服务器中复制相同的内容,而不是使用我更喜欢使用脚本的命令。
目前我正在使用“docker swarm init”来初始化swarm,然后使用生成的密钥添加workers和managers。
我将拥有 30 台服务器,并为 7 个管理节点和 23 个工作节点进行规划。
我已经在网上搜索过;但在所有服务器中找不到任何可以使用脚本自动初始化 docker swarm 的脚本。
任何帮助将不胜感激。
【问题讨论】:
标签:
docker
initialization
cluster-computing
swarm
【解决方案1】:
我解决这个问题的方法是为所有节点创建一个通用构建脚本,并使用Consul 与集群的其余部分共享 docker swarm 管理器令牌。
第一个节点(10.0.0.51)调用docker swarm init并将令牌放入键值存储中,其余节点(10.0.0.52 向前)读回令牌并使用它调用docker swarm join。
bash 看起来像这样 -
# Get the node id of this machine from the local IP address
privateNetworkIP=`hostname -I | grep -o 10.0.0.5.`
nodeId=`(echo $privateNetworkIP | tail -c 2)`
if [ $nodeId -eq 1 ]; then
sudo docker swarm init
MANAGER_KEY_IN=`sudo docker swarm join-token manager -q`
curl --request PUT --data $MANAGER_KEY_IN http://10.0.0.51:8500/v1/kv/docker-manager-key
else
MANAGER_KEY_OUT=`curl -s http://10.0.0.51:8500/v1/kv/docker-manager-key?raw`
sudo docker swarm join --token $MANAGER_KEY_OUT 10.0.0.51:2377
fi
...只要先构建node 1,就可以正常工作。
【解决方案2】:
没有什么比内置实用程序更好的了,您可以使用这样的命令:
您可以像这样创建自定义脚本:
for i in `cat app_server.txt` ; do echo $i ; ssh -i /path/to/your_key.pem $i "sudo docker swarm join --token your-token-here ip-address-of-manager:port" ; done
这里app_server.txt 是您要添加到集群中的工作节点的 IP 地址。
--token : 经理在docker swarm init 上生成的令牌
希望这会有所帮助。
你也可以使用 ansible 来做同样的事情,但需要在所有工作节点上安装 ansible docker 模块。
谢谢!