欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  科技

docker swarm的核心概念介绍

程序员文章站 2022-05-09 20:33:51
本节介绍了docker1.12中集群管理和编排特性的特有概念。 什么是swarm docker引擎内置的集群管理和编排特性是由swarmkit构建的。swarmkit是独立的项目,它实现了...

本节介绍了docker1.12中集群管理和编排特性的特有概念。

什么是swarm

docker引擎内置的集群管理和编排特性是由swarmkit构建的。swarmkit是独立的项目,它实现了docker的编排层(orchestration layer)并由docker直接使用。

swarm由运行在swarm模式下的docker宿主机组成,这些宿主机分别作为管理者(managers,管理成员关系和处理请求)和工作者(workers,运行swarm服务)。一个给定的docker宿主机可以作为管理者,工作者或两者都是。当你创建服务时,你要定义它的理想状态(副本数,可用的网络和存储资源,暴露给外界的端口和其他的)。docker会维持你期望的状态。比如,如果一个工作者不可用了,docker会把它上面的任务调度到其他节点上。任务是指一个运行中的容器,和独立的容器不同的是,它是一个集群服务的一部分并由集群管理者管理。

和独立的容器相比,集群服务的一个核心优势是,你可以修改服务的配置,包括它可以使用的网络和数据卷,而不需手动重启该服务。docker会更新配置,停掉使用过时配置的任务,并创建新的使用新配置的任务。

当docker运行在swarm模式时,你仍可以在集群中的任一docker宿主机上运行独立的容器。独立的容器和集群服务的一个核心区别是,只有集群管理者可以管理集群,而独立的容器可以由任意docker守护进程启动。docker守护进程可以作为管理者,工作者或两者都是的身份加入一个集群。

和你用Docker Compose来定义和运行容器一样,你也可以定义并运行swarm service stacks。

继续阅读来了解docker集群服务的核心概念,包括节点,服务,任务和负载均衡。

节点(nodes)

节点是swarm中的一个docker引擎实例。你也可以把它想成是一个docker节点。你可以在一个物理机或云服务器上运行多个节点,但生产环境中的swarm部署通常包括分布在多个物理机和云平台上的docker节点。

要把你的应用发布到集群,你要向管理者节点提交一个服务定义。管理者会把叫做task的工作单元分配给工作节点(worker nodes)。

管理者节点还作为维持集群的期望状态所需的编排者和集群管理者的角色。管理节点(多个)会选举一个领导者(leader)来进行任务编排。

工作节点接收并执行管理节点分配的任务。默认的,管理节点也是工作节点,也会运行服务,但你可以配置他们只运行管理任务,并且只作为管理节点。每个工作节点上都有一个代理,它会监视分配到它这的任务。工作节点会通知管理节点它所负责的任务的当前状态,管理器由此可以维持每个工作者的期望状态。

服务和任务

服务(service)是运行在管理或工作节点上的任务的描述。它是swarm系统的核心结构并且是用户和swarm交互的主要基础。

当你创建服务时,你要指定使用的容器镜像和容器内部要运行的命令。

在副本服务模式(replicated services model),集群管理器会基于你在期望状态中设置的规格把指定数量的副本任务分发到多个节点。

对于全局服务(global services),集群会在集群中所以可用节点上运行一个任务。

任务(task)包含一个docker容器和运行在该容器中的命令。它是swarm调度的基本单位。管理节点根据服务描述中设置的副本数把任务分配该工作节点。一旦一个任务被分配给了一个节点,它就不能被移到其他节点了。它只能运行在指定节点上或失败。

负载均衡

集群管理器用内部的负载均衡器来暴露你想在集群外部访问的服务。集群管理器能自动给服务分配一个公开的端口,你也可以给服务配置一个公开端口。你可以指定任意没被占用的端口。如果你没指定端口,管理器会给服务分配一个30000-32767范围内的端口。

外部组件,比如云负载均衡器,可以在集群中的任意节点上用公开的端口访问服务,不管该节点有没有运行服务所需的任务。集群中的所以节点会把连接路由到运行着所需任务的实例上。

swarm模式有一个内置的DNS组件,可以自动给集群中的每个服务分配一个DNS实例。集群管理器会根据服务的DNS名,用内置的负载均衡器来分发请求。