Swarm服务发现

  • Post author:
  • Post category:IT
  • Post comments:0评论

声明:

本博客欢迎转发,但请保留原作者信息!

新浪微博:@practistar

团队博客地址:http://www.51gocloud.com/

Swarm使用的发现服务是一种维护Docker集群状态的机制,它可以与各种后端服务协同工作。发现服务基本的工作流程都是一致的,都涉及到的概下面的概念:

* 后端服务维护着Docker结点的列表,这些服务应该是集群的一部分。

* 通过节点的列表,Swarm 会检查每一个结点的健康状况并且跟踪进出集群的节点。

目前Swarm提供了6种discovery机制:Token(默认)、Node、File、Consul、Etcd、Zookeeper。其中有两种方式的节点需要对配置文件或者其他相关内容进行维护,其他服务发现仅需要通过join命令行来完成。这两种方式分别是Node和File discovery,下面先介绍它两的使用方式。

注意:

1. 为了能够让swarm manage能够访问到结点,下面的所有node_ip均是私有ip。

2. 每一个节点上都要启动swarm agent。

3. swarm manage可以启动在任何一个结点上,或者有单独的机器充当。

4. 所有的Docker CLI有统一的使用格式:docker -H tcp://<swarm_ip:swarm_port> [CLI]。

1. Node Discovery

Swarm守护进程使用节点发现的启动命令:

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>

2. File Discovery

文件发现利用放置在文件系统中 (例如:/etc/swarm/my_cluster)的配置文件,使用<IP>:<Port>的格式来列出集群中的Docker主机。

基于文件发现的启动命令和配置文件:

swarm manage -H tcp://<swarm_ip:swarm_port> file:///etc/swarm/my_cluster

# cat /etc/swarm/my_cluster
dockerhost01:2375
dockerhost02:2375
dockerhost03:2375

除了上面两种不能通过join命令来完成外,其他的发现服务都是相同的工作流程,后面给出统一的使用格式。

3.使用join命令完成发现服务用法流程

  首先,在每一个节点(Node)上安装Swarm,执行join命令,完成在Swarm结点处的注册,以便Swarm manage执行相应的发现服务而发现该node。所以,swarm join命令执行后,Docker Node添加至Swarm管理的Docker集群中。

  然后再在任何一个结点启动swarm manage,最后可以通过swarm list查看集群结点。执行docker CLI命令,用token做用法展示,后面的都相同。

token

swarm create
swarm join --addr=<node_ip:2375> token://<cluster_id>
swarm manage token://<cluster_id>
swarm list token://<cluster_id>

//执行docker CLI命令:
docker -H tcp:// info
docker -H tcp:// run ...
docker -H tcp:// ps
docker -H tcp:// logs ...
...

etcd

swarm join --addr= etcd://<etcd_ip>/<path>
swarm manage etcd://<etcd_ip>/<path>

consul

swarm join --addr= consul://<consul_ip>/<path>
swarm manage consul://<consul_ip>/<path>

zookeeper

swarm join --addr= zk://<zk_ip1>,<zk_ip2>/<path>
swarm manage zk://<zk_ip1>,<zk_ip2>/<path>

4.swarm服务发现接口

swarm可以支持更多的发现服务,接口设计让贡献者更容易实现新的发现后端。

type Discovery interface {
     Initialize(string, int) error
     Fetch() ([]string, error)
     Watch(WatchCallback)
     Register(string) error
}

Initialize
:参数初始化,结点发现。

Fetch
:返回所有发现结点的列表。

Watch
:触发更新。可能是Token使用的定时器方式,或者Etcd的后端特点。

Register
:为发现服务注册添加新节点。

发表评论