【docker】容器编排之docker swarm

embedded/2024/12/22 22:29:32/

Docker Swarm容器编排详细讲解

Docker Swarm是Docker的原生容器编排工具,它通过将多个Docker引擎组合成一个集群来实现高效的容器部署和管理。
Swarm提供了服务发现、负载均衡、扩展、自动恢复等功能,能够让开发者和运维人员以更简便的方式管理容器化应用。

Docker Swarm的核心概念

  1. Swarm集群:由多个Docker主机组成,通过Swarm集群管理工具进行统一管理。
  2. 节点(Node):Swarm集群中的每一台机器,分为两种类型:
    • Manager Node:负责管理集群,调度任务,保持集群的状态。
    • Worker Node:执行容器任务的节点,由Manager Node指派任务。
  3. 服务(Service):Swarm中部署的应用程序,是由多个容器实例组成的。
  4. 任务(Task):Swarm中执行的一个容器实例,每个任务都对应一个服务。
  5. 容器(Container):在Swarm集群中运行的最小单元,实际承载应用的地方。
  6. 堆栈(Stack):一组相关的服务,可以作为一个整体进行管理和部署。

Docker Swarm的主要功能

功能描述
集群管理通过docker swarm命令,可以初始化和管理Docker集群。
服务发现Swarm为每个服务自动分配一个DNS名称,容器之间可以通过服务名称相互访问。
负载均衡Swarm自动将请求负载均衡到各个容器实例上,确保每个容器实例得到均衡的流量。
容器自动扩展Swarm支持根据需求自动增加或减少服务实例,确保应用根据流量负载进行扩展。
滚动更新Swarm可以逐步更新服务版本,不会导致服务中断,确保高可用性。
高可用性与故障恢复在节点故障时,Swarm会自动迁移任务到其他健康节点,确保应用不中断。
安全Swarm使用TLS加密节点间的通信,并使用证书进行身份验证,保证集群的安全性。

如何创建并管理Docker Swarm集群

1. 初始化Swarm集群

docker swarm init --advertise-addr <Manager节点IP>

这条命令会初始化一个Swarm集群,并将当前机器作为Manager节点--advertise-addr指定的是对外公开的IP地址。

获取Worker节点加入命令

docker swarm join --token <Manager节点IP>:2377

执行此命令的机器将作为Worker节点加入集群。

2. 查看集群状态

查看集群中节点的状态:

docker node ls

输出示例:

IDHOSTNAMESTATUSAVAILABILITYMANAGER STATUS
1abc123manager1ReadyActiveLeader
2xyz456worker1ReadyActive
3lmn789worker2ReadyActive
  • STATUS:表示节点的状态(Ready, Down, Unreachable等)。
  • AVAILABILITY:表示节点的可用性(Active, Pause, Drain等)。
  • MANAGER STATUS:如果是管理节点,则显示LeaderReachable

3. 创建服务

服务是Swarm中的应用程序,它由多个容器实例组成。每个服务都有一个定义,包括镜像、端口映射、副本数等。

docker service create --name web-service --replicas 3 -p 80:80 nginx

  • --name:服务的名称。
  • --replicas:服务实例的数量。
  • -p:将容器的端口映射到主机的端口。
  • nginx:指定服务的容器镜像。

查看服务

docker service ls

输出示例:

IDNAMEMODEREPLICASIMAGE
8yht45dweb-servicereplicated3/3nginx:latest

REPLICAS列显示了服务的副本数及其运行状态,3/3表示有3个副本运行。

4. 扩展服务副本

Swarm支持在运行时动态调整服务的副本数,以应对不同的流量负载。

docker service scale web-service=5

这条命令将web-service服务的副本数扩展至5个。

查看更新后的服务

docker service ls

你将看到web-service服务的副本数已更新为5。

5. 更新服务

Docker Swarm支持滚动更新,即逐个容器实例地更新服务,确保服务始终保持高可用性。

假设你需要将web-service服务从nginx:1.19更新到nginx:latest

docker service update --image nginx:latest web-service

  • --image:指定新的镜像版本。
  • web-service:要更新的服务名称。

查看服务更新状态

docker service ps web-service

这个命令会显示服务的任务列表,并显示每个任务的状态。如果更新顺利,所有任务都会显示为Running状态。

6. 服务发现与负载均衡

Swarm提供自动的服务发现和负载均衡。当多个容器实例运行时,Swarm会自动分配流量到各个容器实例。

假设你在web-service中有3个副本,你可以通过服务名称访问它们:

curl http://web-service

Swarm会自动将请求路由到集群中某个健康的web-service容器

7. 健康检查与故障恢复

Swarm会自动监控容器的健康状况。当某个容器出现故障时,Swarm会自动将其从服务中移除,并在其他节点上重新调度任务,确保服务的高可用性。

健康检查配置

你可以在服务的Dockerfile或docker-compose.yml中定义健康检查。Docker Swarm会定期检查容器的健康状态。

# 健康检查示例
healthcheck:test: ["CMD", "curl", "-f", "http://localhost:80"]interval: 30sretries: 3

当Swarm发现某个容器无法通过健康检查时,会自动进行故障恢复操作。

8. 节点管理与资源分配

Swarm支持对集群节点进行管理,包括标记节点为“暂停”、“排空”或“不可用”。

暂停节点

docker node update --availability pause <节点ID>

暂停后的节点不会再接受新的任务。

排空节点

docker node update --availability drain <节点ID>

排空后的节点将停止所有正在运行的任务并将其迁移到其他健康节点。

总结:Docker Swarm的优势与使用场景

优点

  • 易于设置和使用:相比于Kubernetes,Docker Swarm更容易上手和配置。
  • 内置负载均衡与服务发现:Swarm会自动管理服务的负载均衡和服务发现,不需要额外配置。
  • 高可用性与自动恢复:Swarm能够确保服务始终处于健康状态,并在节点故障时自动恢复。
  • 无缝的容器扩展:可以根据需求动态扩展容器副本,自动适应流量变化。

适用场景

  • 小型和中型应用:对于一些不需要复杂功能的应用,Docker Swarm提供了一个简单而有效的解决方案。
  • 快速原型开发:当需要快速创建一个容器集群并运行微服务时,Docker Swarm是一个理想选择。
  • 不需要复杂的编排和监控:如果业务不需要Kubernetes那样复杂的监控

http://www.ppmy.cn/embedded/147919.html

相关文章

VMWare 的克隆操作

零、碎碎念 VMWare 的这个克隆操作很简单&#xff0c;单拎出来成贴的目的是方便后续使用。 一、操作步骤 1.1、在“源”服务器上点右键&#xff0c;选择“管理--克隆” 1.2、选择“虚拟机的当前状态”为基础制作克隆&#xff0c;如下图所示&#xff0c;然后点击“下一页” 1.3、…

亚矩阵云手机:跨境直播的超强助力

在跨境直播的蓬勃浪潮中&#xff0c;网络卡顿、延迟以及诸多技术难题犹如重重迷雾&#xff0c;困扰着众多从业者&#xff0c;阻碍着业务的拓展与流量的获取。而亚矩阵云手机的出现&#xff0c;恰似一盏明灯&#xff0c;为跨境直播照亮了前行的道路&#xff0c;凭借其卓越的特性…

瑞吉外卖项目学习笔记(二)Swagger、logback、表单校验和参数打印功能的实现

瑞吉外卖项目学习笔记(一)准备工作、员工登录功能实现 文章目录 3 项目组件优化3.1 实现Swagger文档输出3.2 实现logback日志打印3.3 实现表单校验功能3.4 实现请求参数和响应参数的打印 3 项目组件优化 3.1 实现Swagger文档输出 1&#xff09;在application.yml中增加knife4…

Flink调优----反压处理

目录 概述 1.1 反压的理解 1.2 反压的危害 定位反压节点 2.1 利用 Flink Web UI 定位 通过 WebUI 看到 Map 算子处于反压&#xff1a;​编辑 分析瓶颈算子 2.2 利用 Metrics 定位 根据指标分析反压 可以进一步分析数据传输 反压的原因及处理 3.1 查看是否数据倾斜 …

Android settings命令详解

文章目录 Android 中的 settings 命令详细介绍基本语法使用示例1. 查看设置值2. 修改设置值3. 删除设置项 命令选项1. get 子命令2. put 子命令3. delete 子命令 命名空间详解1. system2. secure3. global 常见设置项全局设置&#xff08;global&#xff09;安全设置&#xff0…

热更新解决方案4——xLua热补丁

概述 运行时不在执行C#中的代码&#xff0c;而是执行Lua中的代码&#xff0c;相当于是打了个补丁。 1.第一个热补丁 2.多函数替换 3.协程函数替换 在原HotfixMain脚本中只加个协程函数即可&#xff08;和在Start中启动协程函数&#xff09; 4.索引器和属性替换 在HotfixMain中…

常用的消息中间件(ActiveMQ、RabbitMQ、RocketMQ、Kafka)面试精华

目录 主要作用&#xff1a; 四种消息中间件&#xff1a; 主要作用&#xff1a; 解耦 多个系统调用主系统可选择是否订阅 异步 主系统可提高响应时间 削峰 通过消息队列减轻消息访问对服务器的压力 四种消息中间件&#xff1a; ActiveMQ 万级吞吐量 RabbitMQ(中小型…

游戏AI实现-寻路算法(Dijkstra)

戴克斯特拉算法&#xff08;英语&#xff1a;Dijkstras algorithm&#xff09;&#xff0c;又称迪杰斯特拉算法、Dijkstra算法&#xff0c;是由荷兰计算机科学家艾兹赫尔戴克斯特拉在1956年发现的算法。 算法过程&#xff1a; 1.首先设置开始节点的成本值为0&#xff0c;并将…