Docker学习—Swarm

摘要:
给定的Docker主机可以是管理员、工作人员,也可以同时是两者。Docker致力于维护所需的状态。Docker将更新配置,停止使用过期配置的服务任务,并创建与所需配置匹配的新任务。Docker守护进程可以以管理员、员工或两者的形式参与。Swarm相关概念:节点:节点是参与Swarm的Docker引擎的实例。它也可以被视为Docker节点。工作者节点将其分配任务的当前状态通知管理器节点,以便管理器可以维护每个工作者所需的状态。

前言:

  前一篇《Docker学习—Machine》中对Machine 进行了学习,本篇继续学习Swarm,那么Swarm是什么呢,有什么用呢?接下来一步步了解。

一、什么是Docker-Swarm?

 Swarm是使用swarmkit项目构建的嵌入在Docker 引擎中的集群管理和编排功能的工具包,可以直接在docker中使用

 一个集群由多个Docker主机组成,这些Docker主机以集群模式运行,并充当管理器(用于管理成员资格和委派)和工作器(运行 集群服务)。给定的Docker主机可以是管理员,工作人员或同时担任这两个角色。创建服务时,请定义其最佳状态(可用副本数,网络和存储资源,将服务公开给外界的端口等)。Docker致力于维持所需状态。例如,如果工作节点不可用,则Docker会在其他节点上调度该节点的任务。一个任务 是运行的容器是一个群服务的一部分,并通过群经理管理,而不是一个独立的容器。

 与独立容器相比,群集服务的主要优势之一是,您可以修改服务的配置,包括它所连接的网络和卷,而无需手动重新启动服务。Docker将更新配置,使用过期的配置停止服务任务,并创建与所需配置匹配的新任务。

 当Docker以群体模式运行时,您仍然可以在参与群体的任何Docker主机以及群体服务上运行独立容器。独立容器和群集服务之间的主要区别在于,只有群集管理节点可以管理群集,而独立容器可以在任何守护程序上启动。Docker守护程序可以以管理人员,工作人员或两者兼有的形式参与。

 正如您可以使用Docker Compose来定义和运行容器一样,您可以定义和运行Swarm服务堆栈。

 Swarm相关概念:

  • 节点:

 节点是Docker引擎参与swarm的一个实例。也可以将其视为Docker节点。您可以在单个物理计算机或云服务器上运行一个或多个节点,但生产集群部署通常包括分布在多个物理和云计算机上的Docker节点。

 通常分为管理节点和工作节点

 管理节点:要将应用程序部署到swarm,需要向管理节点提交一个服务定义。管理节点将称为任务的工作单元分派给工作节点。执行所需的编排和群集管理功能,以保持群的所需状态。管理节点选择一个领导者来执行编排任务。

 工作节点:接收并执行从管理节点调度的任务。默认情况下,管理节点也将服务作为工作节点运行,但您可以将它们配置为以独占方式运行管理任务并仅作为管理节点。代理在每个工作节点上运行,并报告分配给它的任务。worker节点将其分配任务的当前状态通知给manager节点,以便manager可以保持每个worker的所需状态。

  • 服务和任务

   服务:是要在管理或工作节点上执行的任务的定义。它是swarm系统的中心结构,是用户与swarm交互的主要根源。创建时,指定要在运行的容器中使用的容器映像和要执行的命令;在复制服务模型中,swarm manager根据您在所需状态下设置的规模在节点之间分配特定数量的任务,对于全局服务,swarm在集群中的每个可用节点上为服务运行一个任务。

   任务:是携带一个Docker容器和在容器内运行的命令。它是swarm的原子调度单元。管理节点根据服务规模中设置的副本数将任务分配给工作节点。任务一旦分配给节点,就不能移动到另一个节点。它只能在指定的节点上运行或失败。

  • 负载均衡:

   swarm manager使用入口负载平衡来公开你希望向swarm提供的外部服务。swarm manager可以自动为服务分配发布端口,也可以为服务配置发布端口。您可以指定任何未使用的端口。如果不指定端口,swarm manager会为服务分配30000-32767范围内的端口。

   外部组件(如云负载平衡器)可以访问群集中任何节点的发布端口上的服务,无论该节点当前是否正在运行该服务的任务。swarm路由中的所有节点都进入到正在运行的任务实例的连接。

   Swarm模式有一个内部DNS组件,它自动为Swarm中的每个服务分配一个DNS条目。swarm manager使用内部负载平衡根据服务的DNS名称在群集中的服务之间分配请求。

二、Swarm的功能亮点

Docker Engine集成集群管理:使用Docker Engine CLI创建一个Docker引擎群,您可以在其中部署应用程序服务。你不需要额外的编排软件来创建或管理蜂群。
分散式设计:Docker引擎在运行时处理任何专门化,而不是在部署时处理节点角色之间的差异。您可以使用Docker引擎部署两种类型的节点,管理器和工作者。这意味着您可以从一个磁盘映像构建一个完整的群。
声明性服务模型:Docker引擎使用声明性方法来定义应用程序堆栈中各种服务的所需状态。例如,您可以描述一个由web前端服务、消息队列服务和数据库后端组成的应用程序。
扩容缩放:对于每个服务,您可以声明要运行的任务数。当您放大或缩小时,swarm manager会通过添加或删除任务来自动进行调整,以保持所需的状态。
理想状态协调:swarm manager节点不断监视群集状态,并协调实际状态与所表达的期望状态之间的任何差异。
多主机网络:可以为您的服务指定overlay网络。swarm管理器在初始化或更新应用程序时自动为覆盖网络上的容器分配地址。
服务发现:Swarm管理器节点为群中的每个服务分配一个唯一的DNS名称和运行容器的负载平衡。您可以通过swarm中嵌入的DNS服务器查询swarm中运行的每个容器。
负载平衡:可以将服务的端口公开给外部负载平衡器。在内部,swarm允许您指定如何在节点之间分发服务容器。
默认安全:Swarm中的每个节点都强制TLS相互身份验证和加密,以确保自身和所有其他节点之间的通信安全。您可以选择使用自签名根证书或来自自定义根CA的证书。
滚动更新:升级时,可以逐步更新服务到节点。swarm manager允许您控制服务部署到不同节点集之间的延迟。如果出现任何问题,您可以回滚到该服务的以前版本。

三、Swarm如何工作?

 服务、任务和容器之间关系如下:

  Docker学习—Swarm第1张

  下图显示了群集模式如何接受服务创建请求以及如何将任务调度到工作者节点

 Docker学习—Swarm第2张

四、集群示例:

 1、使用Machine创建集群中docker环境,以下环境  

节点角色名称IP地址
managermanager192.168.0.110
workerworker1192.168.0.107
workerworker2192.168.0.108


  进入GitBash命令创建:

docker-machine create -d hyperv --hyperv-virtual-switch docker_Virtual_Switch manager
docker-machine create -d hyperv --hyperv-virtual-switch docker_Virtual_Switch worker1
docker-machine create -d hyperv --hyperv-virtual-switch docker_Virtual_Switch worker2

  Docker学习—Swarm第3张

 2、开启集群模式

#进入manager节点:
docker-machine ssh manager #初始化swarm
docker swarm init
--advertise-addr 192.168.0.110
#用于添加工作节点命令
docker swarm join --token SWMTKN-1-2ixlcvkjnv4tzh3i8qq14v0bfit7876pr0qputxmeu6w14m0p6-586ta6x7nf0y0ewh513qt8dwu 192.168.0.110:2377
 

  Docker学习—Swarm第4张

 3、加入工作节点到集群模式

#进入worker1节点:
docker-machine ssh worker1
#工作节点加入集群
docker swarm join --token SWMTKN-1-2ixlcvkjnv4tzh3i8qq14v0bfit7876pr0qputxmeu6w14m0p6-586ta6x7nf0y0ewh513qt8dwu 192.168.0.110:2377 

#进入worker2节点:
docker-machine ssh worker2
#工作节点加入集群
docker swarm join --token SWMTKN-1-2ixlcvkjnv4tzh3i8qq14v0bfit7876pr0qputxmeu6w14m0p6-586ta6x7nf0y0ewh513qt8dwu 192.168.0.110:2377 

  Docker学习—Swarm第5张

 4、部署服务到集群中  

docker service create --replicas 1 --name helloworld alpine ping docker.com
  • docker service create命令创建服务。
  • --name标志为服务命名helloworld
  • --replicas标志指定1个运行实例的所需状态。
  • 参数alpine ping docker.com将服务定义为执行命令的Alpine Linux容器ping docker.com

  Docker学习—Swarm第6张

  5、服务管理

#扩展服务语法
docker service scale <SERVICE-ID>=<NUMBER-OF-TASKS>
#示例:
docker service scale helloworld=5

#查看服务语法
docker service ps <SERVICE-ID>
#示例
docker service ps helloworld

#删除服务语法、
docker service rm <SERVICE-ID>
#示例
docker service rm helloworld

其他常用命令使用docker service -h 查看

执行结果如下

 Docker学习—Swarm第7张Docker学习—Swarm第8张

五、节点操作:

  • 显示节点列表:docker node ls
  • 修改节点:docker node update 参数
  • 退出集群:doker swarm leave
  • 节点升级:docker node promote 节点名
  • 节点降级:docker node demote 节点名

后续:

 通过Swarm基本了解后,接下来使用实际案例部署到swarm验证,加深理解及操作。

参考:

   https://docs.docker.com/engine/swarm/

免责声明:文章转载自《Docker学习—Swarm》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇SVN更新、清理乱码解决PyQt5-按钮关闭窗体-4下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Docker开发环境预览

目录 1.1 开发环境预览 1.1.1 启动单个容器开发 1.1.2 从特定的分支或标签创建一个开发环境 2.1 分享你的开发环境 3.1 优缺点 docker在我们印象中完成的是开发完阶段的部署与协作共享功能,最近Docker推出了适合开发阶段的Docker环境容器开发。 1.1 开发环境预览 开发环境允许您与团队成员共享正在进行的代码,从...

daocke镜像批量导出脚本

脚本作用 1.批量导出Docker Images;2.部分导出,通过指定Docker Images ID 到脚本“LIST”变量;3.支持相同ID,不同REPOSITORY名称备份; 例如: docker images kry1702/coredns 1.3.1 eb516548c1...

用一个实际例子理解Docker volume工作原理

要了解Docker Volume,首先我们需要理解Docker文件系统的工作原理。Docker镜像是由多个文件系统的只读层叠加而成。当一个容器通过命令docker run启动时,Docker会加载只读镜像层并在镜像栈顶部添加一个读写层。如果运行中的容器修改了现有的一个已经存在的文件,那该文件将会从读写层下面的只读层复制到读写层,但是该文件的只读版本依然存在...

Docker学习—DockerFile

前言:  上一篇文章简单使用了docker 拉取镜像、启动容器、编译镜像;其中编译镜像时,使用到了Dockerfile,那么接下来我们就详细的来说说Dockerfile DockerFile是什么:   Dockerfile 是一个用来构建镜像的文本文件,Dockerfile内容中包含了一条条构建镜像所需的指令和说明。最终采用docker build 命令...

kafka 基础知识梳理-kafka是一种高吞吐量的分布式发布订阅消息系统

一、kafka 简介 今社会各种应用系统诸如商业、社交、搜索、浏览等像信息工厂一样不断的生产出各种信息,在大数据时代,我们面临如下几个挑战: 如何收集这些巨大的信息 如何分析它 如何及时做到如上两点 以上几个挑战形成了一个业务需求模型,即生产者生产(produce)各种信息,消费者消费(consume)(处理分析)这些信息,而在生产者与消费者之间,需要...

nginx 反向代理

nginx 反向代理 docker部署apache服务 docker部署nginx服务 修改nginx 监听及转发配置 测试 docker部署apache服务 创建Dockerfile,写入以下内容,执行docker build -t v4/apache . 创建v4/apache 镜像。 FROM ubuntu:18.04 MAINTAINER ca...