Docker Swarm 初步认识 及 集群搭建

简介: 本文是博主学习Docker swarm的记录,希望对大家有所帮助。

Docker Swarm介绍

Docker Swarm用来管理docker集群的平台,Client(compose,docker-py等)均可以直接与Swarm通信,甚至Docker本身都可以很容易的与Swarm集成,这大大方便了用户将原本基于单节点的系统移植到Swarm上,同时Swarm内置了对Docker网络插件的支持,用户也很容易的部署跨主机的容器集群服务。

Docker Swarm 和 Docker Compose 一样,都是 Docker 官方容器编排项目,但不同的是,Docker Compose 是一个在单个服务器或主机上创建多个容器的工具,而 Docker Swarm 则可以在多个服务器或主机上创建容器集群服务,对于微服务的部署,显然 Docker Swarm 会更加适合。

在这里插入图片描述

Swarm的几个概念

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

要将应用程序部署到swarm,请将服务定义提交给 manager节点。manager节点将称为任务的工作单元分派 给worker节点。

manager节点还执行维护所需群集状态所需的编排和集群管理功能。manager节点选择单个领导者来执行编排任务。

worker节点接收并执行从manager节点分派的任务。默认情况下,manager节点还将服务作为worker节点运行,但可以将它们配置为仅运行编排和集群管理任务并且仅是manager节点。代理程序在每个worker节点上运行,并报告分配给它的任务。worker节点向manager节点通知其分配的任务的当前状态,以便manager节点可以维持每个工作者的期望状态。

Service:一个服务是任务的定义,manager节点或worker节点上执行。它是群体系统的中心结构,是用户与群体交互的主要根源。创建服务时,你需要指定要使用的容器镜像。

Task:任务是在docekr容器中执行的命令,manager节点根据指定数量的任务副本分配任务给worker节点

使用方法

docker swarm:集群管理,子命令有init, join, leave, update。(docker swarm --help查看帮助)
docker service:服务创建,子命令有create, inspect, update, remove, tasks。(docker service--help查看帮助)
docker node:节点管理,子命令有accept, promote, demote, inspect, update, tasks, ls, rm。(docker node --help查看帮助)

node是加入到swarm集群中的一个docker引擎实体,可以在一台物理机上运行多个node,node分为:
manager nodes,也就是管理节点
worker nodes,也就是工作节点

  1. manager node 管理节点:执行集群的管理功能,维护集群的状态,选举一个leader节点去执行调度任务。
  2. worker node 工作节点:接收和执行任务。参与容器集群负载调度,仅用于承载task。
  3. service 服务:一个服务是工作节点上执行任务的定义。创建一个服务,指定了容器所使用的镜像和容器运行的命令。
    service是运行在worker nodes上的task的描述,service的描述包括使用哪个docker 镜像,以及在使用该镜像的容器中执行什么命令。
  4. task任务:一个任务包含了一个容器及其运行的命令。task是service的执行实体,task启动docker容器并在容器中执行任务。

集群搭建

首先准备四台服务器,并且提前安装Docker环境以及Docker-Compose
官方文档 https://docs.docker.com/engine/swarm/

搭建前提

集群节点之间保证TCP 2377 (集群管理),TCP/UDP 7946 (容器网络发现)和UDP 4789 (Overlay网络)端口通信。
防火墙开放这些端口,或者学着玩的同学干脆直接关闭防火墙

管理节点

命令初始化一个docker swarm 管理节点,这里用berbai01机器作为管理节点【注意图片中主机名,下文不在赘述】。

docker swarm init —advertise-addr 本机ip地址

# 仅供参考
docker swarm init —advertise-addr 192.168.227.3

提示的指令就是供从机加入管理节点使用的。
在这里插入图片描述

加入节点

生成加入节点指令

# 创建其加入管理节点token命令
docker swarm join-token manager    
# 创建其加入工作节点token命令
docker swarm join-token worker     

docker swarm join 加入一个节点,在从机中输入加入work节点指令

# 仅供参考
docker swarm join --token SWMTKN-1-3fw6zjc9k84qpf04hls6rjslhk3ukse8n8av97dx9ip1g0r0oe-8qrzoo6sziqe3qydc84f17042 192.168.227.3:2377

在这里插入图片描述

额外提示

如果加入节点提示错误
Error response from daemon: rpc error: code = Unavailable desc = connection error: desc = "transport: Error while dialing dial tcp 192.168.227.3:2377: connect: no route to host"
可以参考这篇文章https://blog.csdn.net/Ber_Bai/article/details/120026242

查看节点状态

docker node ls

在这里插入图片描述

再尝试加入一个manager节点和一个work节点

加入work节点

生成加入指令

docker swarm join-token worker  

在这里插入图片描述
机器加入

docker swarm join --token SWMTKN-1-3fw6zjc9k84qpf04hls6rjslhk3ukse8n8av97dx9ip1g0r0oe-8qrzoo6sziqe3qydc84f17042 192.168.227.3:2377

在这里插入图片描述

加入manager节点

docker swarm join-token manager

在这里插入图片描述
机器加入

docker swarm join --token SWMTKN-1-3fw6zjc9k84qpf04hls6rjslhk3ukse8n8av97dx9ip1g0r0oe-coptwyoqxq3lckfdyhoz46hd0 192.168.227.3:2377

在这里插入图片描述

额外提示

如果加入节点提示错误
Error response from daemon: manager stopped: can't initialize raft node: rpc error: code = Unknown desc = could not connect to prospective new cluster member using its advertised address: rpc error: code = Unavailable desc = connection error: desc = "transport: Error while dialing dial tcp 192.168.227.6:2377: connect: no route to host"

可以参考这篇文章https://blog.csdn.net/Ber_Bai/article/details/120026242

再次查看节点状态

管理节点才有权限查看节点状态,

docker node ls

在这里插入图片描述
到此,docker swarm集群搭建成功了。

Raft 协议

具体算法逻辑可以看一下这篇文章:Raft算法详解

Docker Raft算法只要保证n/2+1节点正常就能够提供服务,所以要保证docker swarm高可用,至少保证三台manager节点。

如果有不对的地点,麻烦大家评论指正。

目录
相关文章
|
23天前
|
Kubernetes Docker Python
《Docker 简易速速上手小册》第10章 朝着 Docker Swarm 和 Kubernetes 迈进(2024 最新版)
《Docker 简易速速上手小册》第10章 朝着 Docker Swarm 和 Kubernetes 迈进(2024 最新版)
43 0
|
23天前
|
存储 Kubernetes C++
【专栏】Kubernetes VS Docker Swarm了解两者特点,助力选取合适容器编排工具
【4月更文挑战第27天】对比Kubernetes和Docker Swarm:K8s在可扩展性和自动化方面出色,有强大社区支持;Swarm以简易用著称,适合初学者。选择取决于项目需求、团队技能和预期收益。高度复杂项目推荐Kubernetes,快速上手小项目则选Docker Swarm。了解两者特点,助力选取合适容器编排工具。
|
8天前
|
Java 大数据 流计算
使用Docker快速部署Flink分布式集群
使用Docker快速部署Flink分布式集群
34 0
|
9天前
|
运维 监控 持续交付
构建高效自动化运维系统:基于Docker Swarm的策略与实践
【5月更文挑战第29天】 在现代企业IT基础架构管理中,自动化运维已成为提升效率、确保稳定性的关键因素。本文通过探讨基于Docker Swarm的集群管理和自动化部署策略,旨在为读者提供一个构建和维护高效自动化运维系统的全面视角。文章不仅涵盖了Docker Swarm的基础概念和关键特性,还深入分析了如何结合持续集成/持续部署(CI/CD)流程,实现无人工干预的服务部署和横向扩展。此外,文中也讨论了监控、日志和故障恢复等运维实践,以期帮助读者构建一个既可靠又灵活的自动化运维平台。
|
21天前
|
Docker 容器
docker部署omni_usdt 0.8.0版本私有链集群环境
docker部署omni_usdt 0.8.0版本私有链集群环境
|
23天前
|
监控 Docker 容器
【Docker 专栏】Docker Swarm 集群的扩展与缩容策略
【5月更文挑战第8天】本文探讨了Docker Swarm集群的扩展与缩容策略。集群扩展可提高性能、增强可用性和适应业务发展,可通过手动或自动方式实现。缩容则需考虑业务需求、资源利用率和节点状态,可手动或按策略执行。关键步骤包括添加/移除节点及任务迁移。注意数据同步、监控评估和测试验证。案例分析和总结强调了灵活管理对保持集群最佳状态的重要性。
【Docker 专栏】Docker Swarm 集群的扩展与缩容策略
|
23天前
|
Kubernetes 负载均衡 调度
【Docker 专栏】Docker Swarm 与 Kubernetes 的选型指南
【5月更文挑战第8天】Docker Swarm 和 Kubernetes 是两大容器编排工具,各有优势。Docker Swarm 简单易用,适合小到中型规模,与 Docker 生态系统集成紧密;而 Kubernetes 功能强大,扩展性好,适用于大规模、复杂场景。选择时需考虑团队技术能力、应用需求及现有技术栈。Kubernetes 学习曲线较陡,Docker Swarm 则较平缓。
【Docker 专栏】Docker Swarm 与 Kubernetes 的选型指南
|
23天前
|
负载均衡 安全 数据安全/隐私保护
【Docker专栏】Docker Swarm集群管理详解
【5月更文挑战第7天】Docker Swarm是Docker的原生集群管理工具,用于将多个Docker主机整合为虚拟主机。其主要特点是服务发现、负载均衡、自动恢复和扩展性。Swarm由Manager(负责管理与控制)和Worker(运行服务)节点组成。创建Swarm集群涉及初始化、添加Worker节点及查看集群状态。服务部署包括创建、更新、扩展和缩减。Swarm还支持滚动更新、健康检查、网络管理和安全加密。本文概述了Swarm的基本功能,鼓励读者进一步探索其高级特性。
【Docker专栏】Docker Swarm集群管理详解
|
23天前
|
算法 Nacos Docker
docker部署nacos集群
docker部署nacos集群
43 0
|
23天前
|
NoSQL Redis Docker
使用Docker搭建Redis主从集群
使用Docker搭建Redis主从集群
37 1