转载

Swarm服务发现

声明:

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

新浪微博:@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://&lt;swarm_ip:swarm_port&gt; file:///etc/swarm/my_cluster

Default

# 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

Default

swarm create swarm join --addr=    token://   swarm manage token://    swarm list token://   //执行docker CLI命令: docker -H tcp:// info docker -H tcp:// run ... docker -H tcp:// ps docker -H tcp:// logs ... ...         

etcd

Default

swarm join --addr= etcd://   /      swarm manage etcd://       /          

consul

Default

swarm join --addr= consul://   /      swarm manage consul://       /          

zookeeper

Default

swarm join --addr= zk://   ,     /        swarm manage zk://         ,           /                     

4.swarm服务发现接口

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

Default

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

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

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

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

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

正文到此结束
Loading...