Docker容器swarm集群

一、Docker Swarm集群概述;

概述:

当有多台物理机的时候,就要考虑使用集群的模式了,那么docker如何来使用集群来进行管理呢?在这里主要使用的是docker自带的swarm mode,也就是docker集群的管理和编排。所谓的编排就是指多台集群的管理,主机的配置,容器的调度等;

Docker swarm 是docker官方的三大项目之一,提供docker容器集群服务,是docker官方对容器云生态支持的核心方案,Docker Swarm项目开始于2014年,是Docker公司推出的第一个容器集群项目。使用docker swarm可以将多个docker主机封装为一个大型的虚拟docker主机,swarm集群提供给用户管理集群内所有容器的操作接口与使用一台docker主机几乎相同,从而可以快速打造一套容器云服务;

Docker Swarmkit项目开始于2016年,是Docker公司推出的第二个容器集群项目,于Docker1.12版本正式发布。虽然也叫Swarm,但是与第一个项目完全不同。该项目直接在Docker Engine上内嵌了集群管理功能,并新增了集群管理的用户接口;

 

项目特点:

两个容器集群项目可能实现了相同的功能,但其上层接口还是有很大的不同,Docker公司推荐用户使用更适合自己的项目,如果都没有使用过,推荐使用后者。另外,Docker Swarm项目并没有被Docker公司列为不推荐的项目,仍然会继续支持新的Docker Engine的功能;

swarm v1是典型的mater-slave结构,需要通过发现服务来选举出manager,而manager是中心管理节点,而各个节点通过运行agent接受manager的统一管理;

swarm v2中,swarm集群会自动通过Raft协议分布式选举出manager节点,因此无需配置额外的发现服务,从而避免了单点瓶颈;且swarm v2内置了DNS负载均衡和对外部负载均衡机制的支持;

 

二、Docker Swarm核心架构;

Docker Cluster:Docker Cluster由多个Docker Node组成,而负责给Swarm发送请求的是Docker Client;

Swarm deamon:只是一个调度器(Scheduler)加路由器(route),Swarm自己不运行容器,它只是接受docker客户端发送过来的请求,调度适合的节点来运行容器,这意味着,即使Swarm由于某些原因挂掉了,集群中的节点也会照常运行,当Swarm重新恢复运行之后,它会收集重建集群信息;

 

总结:Swarm守护进程本身相当于是一个调度器和一个路由器。它实际上并没有运行容器,也就是说,如果Swarm服务停止了,它在终端Docker主机上已分配好的容器仍然是开启的。另外,由于它不处理任何网络路由(网络连接需要被直接发送到后端的Docker主机上),即使Swarm守护进程意外终止,运行的容器仍然可用。当Swarm从这样的崩溃中恢复,它依然能够查询终端以重建其元数据的列表;

Swarm模式概述

  • 集群管理与Docker Engine集成:使用Docker Engine CLI创建一大堆Docker引擎,您可以在其中部署应用程序服务。您无需其他编排软件即可创建或管理群组。

  • 分散式设计: Docker Engine不是在部署时处理节点角色之间的区别,而是在运行时处理任何特化。您可以使用Docker Engine部署两种节点,管理器和工作器。这意味着您可以从单个磁盘映像构建整个swarm。

  • 声明性服务模型: Docker Engine使用声明性方法来定义应用程序堆栈中各种服务的所需状态。例如,您可以描述由具有消息队列服务的Web前端服务和数据库后端组成的应用程序。

  • 缩放:对于每个服务,您可以声明要运行的任务数。当您向上或向下扩展时,群集管理器会通过添加或删除任务来自动调整以维持所需的状态。

  • 期望的状态协调:群集管理器节点持续监视群集状态,并协调实际状态与表达的所需状态之间的任何差异。例如,如果设置服务以运行容器的10个副本,并且托管其中两个副本的工作计算机崩溃,则管理器将创建两个新副本以替换崩溃的副本。群集管理器将新副本分配给正在运行且可用的工作线程。

  • 多主机网络:您可以为服务指定覆盖网络。群集管理器在初始化或更新应用程序时自动为覆盖网络上的容器分配地址。

  • 服务发现: Swarm管理器节点为swarm中的每个服务分配一个唯一的DNS名称,并负载平衡正在运行的容器。您可以通过嵌入在swarm中的DNS服务器查询swarm中运行的每个容器。

  • 负载平衡:您可以将服务端口公开给外部负载平衡器。在内部,swarm允许您指定如何在节点之间分发服务容器。

  • 默认安全: swarm中的每个节点都强制执行TLS相互身份验证和加密,以保护自身与所有其他节点之间的通信。您可以选择使用自签名根证书或自定义根CA的证书。

  • 滚动更新:在启动时,您可以逐步将服务更新应用于节点。通过swarm管理器,您可以控制服务部署到不同节点集之间的延迟。如果出现任何问题,您可以将任务回滚到以前版本的服务。

猜你喜欢

转载自blog.csdn.net/Richardlygo/article/details/82792115