Docker Swarm 内置的集群编排

news/2025/2/22 6:35:36

在现代容器化应用中,容器编排(Container Orchestration)是至关重要的,它负责自动化容器的部署、扩展、负载均衡和管理。Docker Swarm 是 Docker 提供的原生集群管理和容器编排工具,允许用户通过 Docker CLI 在多个 Docker 主机上创建和管理集群。

本文将深入探讨 Docker Swarm 的内置集群编排功能,包括集群的设置、服务部署、负载均衡、自动扩展、滚动更新等。


1. 什么是 Docker Swarm?

Docker Swarm 是 Docker 的集群管理工具,它将多个 Docker 主机(物理机或虚拟机)组成一个虚拟的 Docker 主机群体,从而实现容器的分布式管理和编排。Swarm 集群提供了以下主要功能:

  • 集群管理:将多个 Docker 节点组织成一个统一的集群进行管理。
  • 服务编排:定义服务,自动化容器的部署、扩展和管理。
  • 负载均衡:Swarm 自动在不同的节点之间平衡服务请求。
  • 高可用性容器故障时,Swarm 会自动在其他节点上重新调度服务实例。

通过 Docker Swarm,你可以在本地环境或者云环境中管理和扩展 Docker 容器应用。


2. Docker Swarm 的集群架构

Docker Swarm 集群由两种类型的节点组成:

  1. 管理节点(Manager Node)

    • 管理和调度 Swarm 集群中的任务。
    • 负责服务部署、容器调度、集群状态监控等工作。
    • 一个 Swarm 集群可以有多个管理节点,以确保高可用性。
  2. 工作节点(Worker Node)

    • 执行实际的容器任务。
    • 通过管理节点接收任务并运行容器
    • 工作节点从管理节点获取任务并进行调度,最终执行容器实例。

管理节点通过 Raft 共识算法保持集群状态的一致性。

2.1 集群的高可用性

Docker Swarm 支持 高可用性(HA) 配置。你可以有多个管理节点,它们通过 Raft 协议 保持数据一致性。一个管理节点故障时,其他节点会接管管理任务,保证服务的连续性。


3. 启动和配置 Docker Swarm 集群

3.1 初始化 Swarm 集群

要在 Docker 中启用 Swarm 模式,可以使用以下命令初始化 Swarm 集群:

docker swarm init --advertise-addr <MANAGER-IP>
  • --advertise-addr:指定集群管理节点的 IP 地址,这个地址将用于其他节点加入集群。
  • 运行此命令后,你将看到一个 token,其他工作节点可以使用该 token 加入 Swarm 集群。

3.2 加入 Swarm 集群

工作节点加入 Swarm 集群的命令如下:

docker swarm join --token <SWARM-TOKEN> <MANAGER-IP>:2377
  • <SWARM-TOKEN>:在管理节点上运行 docker swarm init 时生成的 token。
  • <MANAGER-IP>:Swarm 集群管理节点的 IP 地址。

3.3 查看集群状态

你可以使用以下命令查看当前 Swarm 集群的状态:

docker node ls

这将列出 Swarm 集群中的所有节点(管理节点和工作节点)及其状态。


4. 服务编排与部署

4.1 定义 Swarm 服务

在 Swarm 中,应用是通过 服务(Service)来定义和管理的。一个服务可以包含一个或多个副本,Swarm 会在集群中调度这些副本,保证应用的高可用性。

创建服务

你可以使用 docker service create 命令创建服务,并指定 Docker 镜像、端口映射、副本数等信息。

docker service create --name my-service --replicas 3 -p 8080:80 nginx
  • --name:指定服务的名称。
  • --replicas:指定服务的副本数,这里创建 3 个副本。
  • -p:映射宿主机端口到容器端口,访问宿主机的 8080 端口将被转发到容器的 80 端口。
查看服务状态

使用以下命令查看服务的状态:

docker service ls
查看服务任务

使用以下命令查看服务的任务和容器状态:

docker service ps my-service

5. Docker Swarm 的负载均衡

5.1 内建的负载均衡

Docker Swarm 提供了 自动负载均衡 功能。Swarm 会根据服务的副本数量,在集群中自动分配请求,确保流量在所有副本之间均匀分配。你只需定义服务和端口,Swarm 会处理流量分配和负载均衡。

服务更新时的负载均衡

当你更新服务时,Swarm 会逐步替换服务的容器,并将流量引导到健康的副本,避免在更新过程中中断服务。

5.2 服务发现

Swarm 中的服务可以通过 DNS 名称进行自动发现。例如,在同一个 Swarm 集群中的容器可以通过服务名称访问彼此,无需知道容器的 IP 地址。

例如,如果有一个名为 my-service 的服务,其他容器可以通过 my-service 访问该服务。


6. Swarm 的滚动更新与回滚

6.1 滚动更新

Docker Swarm 提供了 滚动更新(Rolling Updates)机制,允许你无缝地更新服务,而不会造成应用停机。你可以指定更新的策略(如每次更新多少个副本、更新的时间间隔等),确保在更新过程中应用的高可用性。

滚动更新命令
docker service update --image nginx:latest my-service

这将更新 my-service 服务的镜像到 nginx:latest,并进行滚动更新。

更新策略

你可以配置 Swarm 服务的更新策略,设置并行更新的副本数、更新间隔等。例如,限制每次更新不超过 1 个副本:

docker service update --update-parallelism 1 my-service

6.2 回滚操作

如果更新导致问题,Swarm 支持 回滚 到之前的版本。你可以使用以下命令回滚服务:

docker service rollback my-service

这将把 my-service 服务恢复到上一个版本。


7. Docker Swarm 的高可用性和自愈能力

7.1 高可用性

Docker Swarm 通过 副本管理故障自动恢复 来保证高可用性。如果某个容器副本不可用或崩溃,Swarm 会自动在其他健康节点上调度新的副本。

例如,如果 my-service 的某个副本崩溃,Swarm 会自动在集群中重新调度该副本,保持副本数量为预定的数量。

7.2 自愈能力

Swarm 通过 健康检查 来确保服务的稳定性。如果某个容器出现故障,Swarm 会自动重新调度容器以保持服务的可用性。

启用健康检查

你可以通过 docker run 配置健康检查,Swarm 会基于该检查决定是否需要重新调度容器

docker service create --name my-service --health-cmd="curl -f http://localhost/health || exit 1" --replicas 3 nginx

8. 总结

Docker Swarm 是 Docker 提供的强大集群编排工具,它简化了容器的部署、管理和扩展,提供了以下关键功能:

  • 集群管理:将多个 Docker 主机组织成一个虚拟的集群,便于集中管理和调度容器
  • 服务编排:定义和管理服务,自动调度容器副本,确保高可用性。
  • 负载均衡:自动平衡流量,确保服务的稳定运行。
  • 滚动更新与回滚:提供无缝的服务更新和版本回滚机制。
  • 高可用性与自愈能力:自动恢复崩溃的容器,保证服务的持续可用性。

通过 Docker Swarm,开发者可以轻松管理多个容器应用,确保它们的高可用性、可扩展性和自动恢复能力。对于中小型项目和团队,Docker Swarm 提供了一种高效的容器编排解决方案。 🚀


http://www.niftyadmin.cn/n/5861812.html

相关文章

rk3588/3576板端编译程序无法运行视频推理

图片推理可以&#xff0c;但是视频不行&#xff0c;运行视频推理报错&#xff1a;segment fault. 我遇到的问题原因是ffmpeg安装有问题&#xff0c;可以先在板端运行&#xff1a;ffmpeg -version ffmpeg version 4.2.4-1ubuntu1.0firefly6 Copyright (c) 2000-2020 the FFmpe…

出行项目案例

spark和kafka主要通过Scala实现&#xff0c;Hadoop和HBase主要基于java实现。 通过该项目&#xff0c;主要达到以下目的&#xff1a; &#xff08;1&#xff09;通用的数据处理流程&#xff0c;入门大数据领域 &#xff08;2&#xff09;真实体验大数据开发工程师的工作 &a…

matlab 专家pid和普通pid控制对比

1、内容简介 matlab149-专家pid和普通pid控制对比 可以交流、咨询、答疑 2、内容说明 略 3、仿真分析 略 4、参考论文 略

一个Flutter跨4端开发的案例

哈喽&#xff0c;我是老刘 老刘做Flutter开发6年多了&#xff0c;在手机端的案例见到很多&#xff0c;PC端的确实比较少。 Flutter也的确不是PC端开发的首选。 不过前段时间无意见发现一个Flutter跨Windows、Mac、Android和iOS四个端的典型例子&#xff0c;百度输入法。 事情是…

Grok 3.0 Beta 版大语言模型评测

2025年2月17日至18日&#xff0c;全球首富埃隆马斯克&#xff08;Elon Musk&#xff09;携手其人工智能公司xAI&#xff0c;在美国重磅发布了Grok 3.0 Beta版。这款被誉为“迄今为止世界上最智能的语言模型”的AI&#xff0c;不仅集成了先进的“DeepSearch”搜索功能&#xff0…

微信小程序模仿快播标签云滚动特效

说到快播&#xff0c;故事肯定就不少。用过的人都知道快播首页有个标签云的特效效果&#xff0c;就是渐隐渐显外加上下滚动&#xff0c;其实还挺好看的。至于其他故事嘛&#xff0c;因为没有酒&#xff0c;所以&#xff0c;还是来说说代码吧~ 一开始不是做这个特效需求&#xf…

Java 中 HTTP 协议版本使用情况剖析

Java 中 HTTP 协议版本使用情况剖析 一、HTTP/1.1 与 HTTP/2 概述 (一)HTTP/1.1 HTTP/1.1 是广泛应用且成熟的 HTTP 协议版本,它在互联网发展历程中扮演了重要角色。其特点主要包括: 连接方式:默认采用短连接,即每次请求都要建立新的 TCP 连接,请求完成后断开。不过也…

Selenium实战案例1:论文pdf自动下载

在上一篇文章中&#xff0c;我们介绍了Selenium的基础用法和一些常见技巧。今天&#xff0c;我们将通过中国科学&#xff1a;信息科学网站内当前目录论文下载这一实战案例来进一步展示Selenium的web自动化流程。 目录 中国科学&#xff1a;信息科学当期目录论文下载 1.网页内…