Docker Swarm集群管理工具

    xiaoxiao2023-11-23  152

    1.2.1 Docker Swarm概述 Docker Swarm是一个用于创建和管理Docker集群的工具。Docker1.12以及后续版本集成了swarmkit工具,该工具主要用于Docker集群管理和容器编排,因此,开发者可以不用安装额外的软件包,只需使用简单的命令就可以创建并管理Docker swarm集群。 Docker Swarm集群的主要特点如下: (1)方便创建和管理集群 Docker Swarm是Docker源生的集群管理工具,可以直接使用Docker客户端来创建并管理一个Docker Swarm集群,然后在其中部署应用 程序服务,而不需要额外的编配软件来创建或者管理集群。 (2)可扩展 对于集群中的每个服务,都可以声明要运行的副本任务数量,当向上或向下进行扩展时,集群管理器将通过添加或删除副本任务来自动适 应所需的状态。 (3)可实现期望的状态调节 集群管理器节点不断监视集群状态,并协调实际状态和所期望状态之间的任何差异。例如,如果启动一个服务的10个副本任务,当一个Docker节点承载其中两个副本崩溃时,那么管理器将创建两个新的副本来替换崩溃的副本。 (4)集群中多主机网络自动扩展管理 Docker Swarm为集群服务提供了一个覆盖网络,当它初始化或更新应用程序时,集群管理器会自动在工作节点创建或更新网络来管理服务。 (5)提供服务发现功能 集群管理器节点为集群中每个服务分配一个唯一的DNS网络,通过Docker Swarm集群提供的负载均衡功能,可以通过嵌入在集群中的DNS服务器服务器来查询集群中运行的每个容器。 (6)可实现负载均衡 可以将容器中服务的端口暴露给外部负载均衡器,而在内部,集群允许指定如何在节点之间分配服务容器。 (7)安全性强 集群中的每个节点强制使用TLS相互认证和加密,以确保自身和其他节点之间的通信安全。除此之外,集群还支持使用自定义的自签名证书来保证安全。 (8)支持延迟更新和服务回滚 在进行服务更新时,可以将服务更新逐步延伸到每个节点上,集群管理器允许服务部署到不同节点组之间时出现延迟,如果某个节点出现问题,还可以将服务回滚到以前的版本。 1.2.2 Docker Swarm使用 使用Docker Swarm集群的具体步骤如下: 1.环境搭建 (1)准备3台Ubuntu系统主机(即用于搭建集群的3个Docker机器),每台机器上都需要安装Docker并且可以连接网络,同时要求Docker版本都必须是1.12及以上,因为老版本不支持Docker Swarm。 (2)集群管理节点Docker机器的ip地址必须固定,集群中的所有节点都能够访问该管理节点。 (3)集群节点之间必须使用相应的协议并保证其以下端口号可用: *用于集群管理通信的TCP端口2377; *TCP和UDP端口7946,用于节点间的通信; *UDP端口4789,用于覆盖网络流量。 集群有三台,分别为manager1(作为管理节点)、worker1(作为工作节点)和worker2(作为工作节点),其ip地址分别如下: manager1:192.168.197.143 worker1:192.168.197.144 worker2:192.168.197.145 下面小编来演示ip地址的配置过程以manager1的配置为例 点击保存之后,在终端查看ip地址是否添加成功 注意:我在添加网络时提示需要超级用户root的授权通过才可以添加,而我输入创建的具有root用户权限的用户密码后提示认证失败,根本原因是超级用户root没有被创建 解决方法如下: 首先用快捷键crtl+alt+T 打开终端,显示的是用户名@电脑名:~ , 符 号 ,符号 就表示现在处于普通用户权限。 然后输入:sudo passwd root终端会显示Enter new UNIX password: 设置root用户密码,按Enter 终端显示Retype new UNIX password: 再输入一遍 确定之后终端会显示 passwd: password updated successfully 表示root用户成功创建并设置密码 下面我们就可以用刚创建的用户和密码进行认证授权了。 worker1和worker2的网络配置同上。 下面对集群的管理节点和工作节点的主机名进行修改需要修改两个文件分别是etc目录下的hosts文件和hostname文件 2.创建Docker Swarm集群 (1)在名为manager1的Docker机器上创建Docker Swarm集群 #docker swarm init --advertise-addr 192.168.197.143

    查看Docker Swarm集群节点信息 #docker node ls 3.向Docker Swarm集群添加工作节点 (1)启动另外两台Docker机器worker1和worker2,分别打开终端窗口,执行向集群中加入工作节点的指令, #docker swarm join --token SWMTKN-1-3xddnyp8hkw6w54tolaokvehbgsg77rkp827p7nmkisd3zi8tk-8j4bhzfnq1551bvufo5xk0ddg 192.168.197.143:2377 需要特别注意的是,上述指令中的–token参数表示向指定集群中加入工作节点的认证信息。该指令中使用自己在前面创建Docker Swarm集群时返回的向集群中添加工作节点的指令,如果已忘记添加到Docker Swarm集群的指令,可以直接在集群管理节点上执行“docker swarm join-token worker”指令进行查看。 (2)再次在集群管理节点上使用 docker node ls指令查看集群节点信息, 4.向Docker Swarm集群部署服务 在Docker Swarm集群中部署服务时,既可以使用Docker Hub上自带的镜像来启动服务,也可以使用自己通过Dockerfile构建的镜像来启动服务。如果使用自己通过的Dockerfile构建的镜像来启动服务那么必须先将镜像推送到Docker Hub中心仓库。 下面小编将以使用Docker Hub上自带的alpine镜像为例来部署集群服务 #docker service create --replicas 1 --name helloworld alpine ping docker.com —docker service create指令:用于在Swarm集群中创建一个基于alpine镜像的服务。 —replicas参数:指定了该服务只有一个副本实例。 —name参数:指定创建成功后的服务名称为helloworld。 —ping docker.com指令:表示服务启动后执行的命令。 Docker Swarm集群中的服务管理与容器操作基本类似,只不过服务管理指令是以“docker service”开头,而容器管理指令是以“docker container”开头。个别指令除外,如–replicas。 5.查看Docker Swarm集群中的服务 (1)当服务部署完成后,在管理节点上可以通过docker service ls指令查看当前集群中的服务列表信息 #docker service ls (2)可以使用docker service inspect指令,查看部署服务具体详情,具体操作指令如下: #docker service inspect helloworld (3)可以使用docker service ps指令查看指定服务在集群节点上的分配和运行情况。 #docker service ps helloworld 6.更改Docker Swarm集群服务副本数量 在集群中部署的服务,如果只运行一个副本,就无法体现出集群的优势,并且一旦该机器或副本崩溃,该服务将无法访问,所以通常一个服务会启动多个服务副本。 在管理节点manager1上,更改服务副本数量的指令如下: #docker service scale helloworld=5 更改完成后,就可以使用docker service ps指令查看这5个服务副本在3个节点上的具体分布和运行情况。 从上图可以看出,helloworld服务的5个副本实例被随机分配到了manager1、worker1和worker2这三个节点运行,并且他们的状态都是Running,表示服务正常运行。 需要说明的是,在集群的环境下,服务副本是随机均衡分配到不同节点上的,分配结果会各有不同,另外由于有些镜像较大,所以其他工作节点在拉取镜像运行服务实例时可能需要一定的时间,这时该服务副本就会处于Preparing状态。 执行docker service ps helloworld指令查看服务的运行情况后,我们还可以在有服务副本的分配的节点机器上使用docker ps指令查看任务运行情况。 7.删除服务 对于不需要的服务,我们可以进行删除 #docker service rm helloworld 在集群管理节点manager1上执行上述删除服务指令后(需要指定删除服务的名称),该服务就会在集群中彻底删除。 需要说明的是,执行上述指令删除服务后,在集群中有该服务副本运行的节点上,这些服务副本仍需要一定的时间清除,此时我们可以使用docker 查看具体清除情况。 8.访问服务 前面部署的服务都没有直接向外部暴露服务端口,外界也无法正常访问服务。我们通过自定义的overlay驱动网络为例来学习集群下的网络管理与服务访问,具体实现过程如下: (1)在集群管理节点manager1上,执行docker network ls 查看网络列表,效果如下图所示: 从上图可以看出,与非集群环境下的Docker网络对比,Docker Swarm集群网络列表中分别增加了一个以bridge和overlay为驱动的网络。在集群中发布服务时,如果没有指定网络,那么默认的都是使用名为ingress网络连接的,而实际开发中,则会使用自定义的overlay驱动网络进行服务管理。 (2)在集群管理节点manager1上,创建以overlay为驱动的自定义网络, #docker network create --driver overlay my-multi-host-network 上述指令以overlay为驱动创建了一个名为my-multi-host-network的网络 (3)在集群管理节点manager1上,再次部署服务 #docker service create --network my-multi-host-network --name my-web --publish 8080:80 --replicas 2 nginx 上述部署的服务的指令中,–network参数用于指定服务使用自定义的overlay驱动网络my-multi-host-network连接;–name参数用于指定服务启动后的名称;–publish(也可以使用-p)参数用于映射对外服务端口;–replicas参数用于指定该服务的副本数量;nginx表示是基于nginx镜像构建的服务。 (4)在集群管理节点manager1上,使用docker service ps my-web指令查看服务的两个服务副本运行情况 从上图中可以看出两个副本任务被随机分配到了worker1和worker2两台机器上,并已正常运行。 需要特别注意的是:由于是随机分配,实际操作各有不同,也可能分配到其他两台节点机器上,如manager1和worker1或者manager1和worker2 (5)外部访问服务 打开浏览器,使用任意一台的“IP+8080”端口进行服务访问,都可以正常显示, 从上图可以看出,当在任意节点上访问服务时,都可以正常访问部署的服务。这是由于集群负载均衡器将请求路由到一个活动容器,从而实现容器内部服务的正常访问,这也体现出了Docker Swarm负载均衡这一特点。 多学一招: 我们在ubuntu里面进行编辑时按是上下左右键时变成ABCD,很烦有木有,这时我们可以在终端执行以下这条命令。

    最新回复(0)