Docker Swarm主机发现

原文地址:https://docs.docker.com/swarm/discovery/

Docker Swarm 节点发现有三种方式:分布式键值存储、节点列表、Docker Hub。

注:以下“主机发现”等价于“节点发现”。

使用分布式键值对存储的主机发现

建议使用libkv项目用作Swarm节点发现,libkv项目是对已存在分布式键值对存储的一个抽象层。
目前支持键值对存储类型(及支持的最低版本)如下:
- Consul 0.5.1
- Etcd 2.0
- ZooKeeper 3.4.5

在创建manager和node时设置节点发现参数,以及查看结点列表:

# Etcd
swarm join --advertise=<node_ip:2375> etcd://<etcd_addr1>,<etcd_addr2>/<optional path prefix>
swarm manage -H tcp://<swarm_ip:swarm_port> etcd://<etcd_addr1>,<etcd_addr2>/<optional path prefix>
swarm list etcd://<etcd_addr1>,<etcd_addr2>/<optional path prefix>

# Consul
swarm join --advertise=<node_ip:2375> consul://<consul_addr>/<optional path prefix>
swarm manage -H tcp://<swarm_ip:swarm_port> consul://<consul_addr>/<optional path prefix>
swarm list consul://<consul_addr>/<optional path prefix>

# ZooKeeper
swarm join --advertise=<node_ip:2375> zk://<zookeeper_addr1>,<zookeeper_addr2>/<optional path prefix>
swarm manage -H tcp://<swarm_ip:swarm_port> zk://<zookeeper_addr1>,<zookeeper_addr2>/<optional path prefix>
swarm list zk://<zookeeper_addr1>,<zookeeper_addr2>/<optional path prefix>

如果在分布式键值的节点发现过程中要使用TLS,只有Etcd、Consul支持。
以swarm join为例设置如下,swarm manager、swarm list也一样。

swarm join \
    --advertise=<node_ip:2375> \
    --discovery-opt kv.cacertfile=/path/to/mycacert.pem \
    --discovery-opt kv.certfile=/path/to/mycert.pem \
    --discovery-opt kv.keyfile=/path/to/mykey.pem \
    consul://<consul_addr>/<optional path prefix>

使用静态文件或节点列表作为主机发现

这种方式不适用于manager的备机。如必须使用manager replica,必须使用主机发现的键值存储方式。

静态文件,必须置于主机可访问的路径下。节点列表及节点列表文件,都支持ip地址范围的写法。

节点列表文件

# 创建文件/tmp/my_cluster,并写入节点列表
$ echo "10.0.0.[11:100]:2375"   >> /tmp/my_cluster
$ echo "192.168.1.2:[2:20]375"  >> /tmp/my_cluster
# 运行swarm manager时指定节点列表文件
swarm manage -H tcp://<swarm_ip:swarm_port> file:///tmp/my_cluster
# 查看节点列表
swarm list file:///tmp/my_cluster
# 查看swarm信息
docker -H tcp://<swarm_ip:swarm_port> info
docker -H tcp://<swarm_ip:swarm_port> ps
docker -H tcp://<swarm_ip:swarm_port> logs

指定节点列表

# 指定节点列表可以用以下三种写法
swarm manage -H <swarm_ip:swarm_port> nodes://<node_ip1:2375>,<node_ip2:2375>
swarm manage -H <swarm_ip:swarm_port> <node_ip1:2375>,<node_ip2:2375>
swarm manage -H <swarm_ip:swarm_port> "nodes://10.0.0.[10:200]:2375,10.0.1.[2:250]:2375"

将Docker Hub用作主机发现服务

注意:不建议在生产环境中使用。它在使用时需要保证外部网络通畅。

Docker Hub的主机发现服务要求swarm集群中每个节点能够访问外网。

# 创建集群,并获取token
swarm create
# 集群中的节点使用token
swarm join --advertise=<node_ip:2375> token://<cluster_id>
# 集群中的manager使用token
swarm manage -H tcp://<swarm_ip:swarm_port> token://<cluster_id>
# 查看集群中的节点
swarm list token://<cluster_id>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值