Docker Swarm集群设置的单个脚本

时间:2018-05-04 04:54:28

标签: docker initialization cluster-computing swarm

我在我的preprod服务器(3个管理节点和7个工作节点)中设置了Docker Swarm集群;但我想在生产服务器中复制相同的内容,而不是使用我更喜欢使用脚本的命令。

目前我正在使用“docker swarm init”初始化swarm,然后使用生成的密钥添加worker和manager。

我将拥有30台服务器并计划7个经理和23个工作节点。 我在网上搜索过;但找不到任何可以使用所有服务器中的脚本自动初始化docker swarm的脚本。

任何帮助都会非常感激。

2 个答案:

答案 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,就可以正常工作。