我在我的preprod服务器(3个管理节点和7个工作节点)中设置了Docker Swarm集群;但我想在生产服务器中复制相同的内容,而不是使用我更喜欢使用脚本的命令。
目前我正在使用“docker swarm init”初始化swarm,然后使用生成的密钥添加worker和manager。
我将拥有30台服务器并计划7个经理和23个工作节点。 我在网上搜索过;但找不到任何可以使用所有服务器中的脚本自动初始化docker swarm的脚本。
任何帮助都会非常感激。
答案 0 :(得分:0)
没有像内置实用程序那样可以使用如下命令:
您可以像这样创建自定义脚本:
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模块。 谢谢!
答案 1 :(得分:0)
我解决此问题的方法是为所有节点使用通用的构建脚本,并使用Consul与集群的其余部分共享docker swarm manager令牌。
第一个节点(位于10.0.0.51
处调用docker swarm init
并将令牌放置在键值存储中,其余节点(位于10.0.0.52
之后)则读回令牌并使用它呼叫docker swarm join
。
重击看起来像这样-
# 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
,就可以正常工作。