• 35648

    文章

  • 23

    评论

  • 20

    友链

  • 最近新加了很多技术文章,大家多来逛逛吧~~~~
  • 喜欢这个网站的朋友可以加一下QQ群,我们一起交流技术。

八、Docker Swarm 原

欢迎来到阿八个人博客网站。本 阿八个人博客 网站提供最新的站长新闻,各种互联网资讯。 喜欢本站的朋友可以收藏本站,或者加QQ:我们大家一起来交流技术! URL链接:https://www.abboke.com/jsh/2019/0625/3922.html

>>>

Docker Swarm有两件事:一个企业级的Docker主机安全集群,另一个是用于协调微服务应用程序的引擎。

在集群方面,它将一个或多个Docker节点组合在一起,并允许你将他们作为一个集群来管理。开箱即用就可以得到加密的分布式集群存储,加密的网络、互助的TLS、安全的集群加入令牌以及使轻松管理和旋转证书比较容易的PKI。也可以无中断地添加和删除节点。

在协调方面,Swarm公开了一个丰富的API,允许您轻松的部署和管理复杂的微服务应用程序。你可以在声明性的manifest文件中定义你的应用程序,并使用本机Docker命令部署它们。你甚至可以执行滚动更新、回滚和缩放操作。

一、Swarm 入门

在集群方面,swarm由一个或多个Docker节点组成。这些节点可以是物理服务器、VMs、Raspberry Pi’s或云实例。唯一的要求就是所有的节点可以再可靠的网络上通信。节点可被配置为管理者(manager)或者工作者(worker)。管理者照看集群的控制平面,意味着可以查看集群的状态,分配任务给工作者。工作者从管理者接收任务并执行他们。

swarm的配置和状态保存在分布式的etcd数据库,它位于所有的管理者节点上。它保存在内存中并且是最新的。但最好的事情是它需要0配置。起 作为swarm安装的一部分。Swarm使用TLS加密通信,认证 节点,授权角色,还有自动的秘钥轮换。
在应用协调方面,在swarm上调度的原子单元是服务。在API中,这是一个新对象,伴随着swarm引入的。它是一个高层次的结构,将一些高级功能环绕在容器周围。当一个容器被包括在一个服务中时,我们称之为task或replica。并且服务构造添加了诸如缩放、滚动更新和简单回滚等内容。



 


二、构建一个安全的swarm集群

在本小节,将使用3个管理节点和3个工作节点来构建一个安全的swarm集群。当然你也可使用具有不同数量的管理节点和工作节点,这些节点可以有不同的名称和IPs。

每一个节点上都需要安装Docker,并且需要和swarm中的其他节点通信。如果配置了名称解析会更好,因为有助于解决问题。

在 网络方面,需要在路由器和路由器上开启以下端口:

  • 2377/tcp: 为安全的client-to-swarm通信
  • 7946/tcp and 7946/udp: control plane gossip
  • 4789/udp: 基于VXLAN的overlay 网络

一旦满足了先决条件,就可以构建一个swarm。构建swarm的过程有时也叫做初始化swarm。这个高级过程是初始化第一个管理者节点->加入其它的管理者节点->加入工作者节点->完成。

(1)初始化一个全新的swarm

在单引擎模式中,Docker节点并不是swarm的一部分,一旦他们加入swarm,就切换到swarm模式。

在单引擎模式的Docker主机上运行“docker swarm init”,将会切换到swarm模式,创建全新的swarm,并使得此节点作为swarm的第一个管理者。其他节点可以作为管理者或工作者加入。下面的步骤将mgr1放入swarm模式并初始化全新的swarm。然后加入wrk1, wrk2和wrk3作为工作者-自动将他们放入swarm模式。最后,加入mgr2 和mgr3,作为其他的管理者并将他们切换到swarm模式。最后,所有的6个节点将在swarm模式,并作为同一个swarm的一部分来运行。

本例子将会使用上图中显示的IP地址和DNS名称,也可以使用不同的。

第一步,登录mgr1,输入docker swarm init --advertise-addr 192.168.0.13:2377 --listen-addr 192.168.0.13:2377(由于是网络模拟环境,IP必须使用分配的,不能更改),如下图所示:

根据提示,在此输入docker swarm join-token manager,然后在Docker主机上执行 “docker swarm join --token SWMTKN-1-2estpkdxh6io84lcsc7e0z5m6iwsgljn2xi85mi6dys0vybifi-4j64us5rpdxh6tv3uww638exk 192.168.0.13:2377”,可以将相关主机添加为worker,执行docker swarm join --token SWMTKN-1-2estpkdxh6io84lcsc7e0z5m6iwsgljn2xi85mi6dys0vybifi-bukw34c8glin7q034dgo3vb6v 192.168.0.13:2377,可以将相关主机添加为manager(注:--token后面的字符串会有所不同),如下所示:

执行完毕后,有3个manager节点和2个worker节点 。

  • docker swarm init :告诉Docker初始化一个全新swarm,并使得此节点成为第一个管理者,并使得此节点变为swarm模式;
  • --advertise-addr:其他节点连接到此管理者的IP和端口,是一个可选标志;
  • --listen-addr:指定哪个IP和端口用来监听swarm流量,通常与 --advertise-addr匹配。

swarm运行的缺省端口是2377,也是可以定制化的,使用2377/tcp为安全的 (HTTPS) client-to-swarm连接是一个惯例。

在任何一个管理者节点上输入:docker node ls,显示出刚才创建的5个节点,3个管理者,2个工作者。如下所示:

如上所示,在manager status栏里显示Leader或者Reachable的为管理者,其他的为工作者。ID后面带*号,表明docker node ls是从node1节点的主机执行的。

(2)swarm管理者的高可用性(HA)

swarm天生支持高可用性,如果一个或多个失败,存活的管理者节点仍可以保持swarm运行。

从技术上讲,Swarm实现了一种主动-被动的多管理器的形式。这意味着尽管你可能也应该有多个管理者,但只有一个被认为是活跃的。我们称这个活跃的管理者为“Leader”,而“Leader”是唯一一个能对集群发出实时命令的。所以只有“Leader”才能改变配置,或者向工作者发布任务。如果被动(非主动)管理者接收集群命令,并代理它们转发到“Leader”节点上。如下图所示:

如上图所示,managers或者是leaders或者是followers。这是Raft术语,因为swarm使用了Raft一致性算法的一个实现来驱动manager的HA。在HA的话题上,应用两个最佳实践:

  1. 部署奇数个managers
  2. 不要部署太多的managers(推荐3-5个)

 

 

三、Deploy一些swarm服务
四、Troubleshooting

相关文章

暂住......别动,不想说点什么吗?
  • 全部评论(0
    还没有评论,快来抢沙发吧!