【docker】容器编排之docker swarm

news2024/12/18 13:19:20

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: 30s
  retries: 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.coloradmin.cn/o/2261609.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ChatGPT客户端安装教程(附下载链接)

用惯了各类AI的我们发现每天打开网页还挺不习惯和麻烦&#xff0c;突然发现客户端上架了&#xff0c;懂摸鱼的人都知道这里面的道行有多深&#xff0c;话不多说&#xff0c;开整&#xff01; 以下是ChatGPT客户端的详细安装教程&#xff0c;适用于Windows和Mac系统&#xff1a…

GRE over IPSec 如何应用?如何在ensp上配置GRE over IPSec 实验?

GRE over IPSec应用场景 IPSec VPN本端设备无法感知对端有几个设备 &#xff0c;本端共用一个IPSec SA 。报文封装中没有对端设备的下一跳 &#xff0c;所以无法传输组播、广播和非IP报文 &#xff0c;比如OSPF协议 &#xff0c;导致分支与总部的内部网络之间无法使用OSPF路由…

概率论得学习和整理29: 用EXCEL 描述二项分布

目录 1 关于二项分布的基本内容 2 二项分布的概率 2.1 核心要素 2.2 成功K次的概率&#xff0c;二项分布公式 2.3 期望和方差 2.4 具体试验 2.5 概率质量函数pmf 和cdf 3 二项分布的pmf图的改进 3.1 改进折线图 3.2 如何生成这种竖线图呢 4 不同的二项分布 4.1 p0.…

leetcode 面试经典 150 题:三数之和

链接三数之和题序号11类型数组解题方法排序双指针法难度中等 题目 给你一个整数数组 nums &#xff0c;判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i ! j、i ! k 且 j ! k &#xff0c; 同时还满足 nums[i] nums[j] nums[k] 0 。请你返回所有和为 0 且不重复的三…

【Linux】Nginx一个域名https一个地址配置多个项目【项目实战】

&#x1f468;‍&#x1f393;博主简介 &#x1f3c5;CSDN博客专家   &#x1f3c5;云计算领域优质创作者   &#x1f3c5;华为云开发者社区专家博主   &#x1f3c5;阿里云开发者社区专家博主 &#x1f48a;交流社区&#xff1a;运维交流社区 欢迎大家的加入&#xff01…

【线性代数】理解矩阵乘法的意义(点乘)

刚接触线性代数时&#xff0c;很不理解矩阵乘法的计算规则&#xff0c;为什么规则定义的看起来那么有规律却又莫名其妙&#xff0c;现在参考了一些资料&#xff0c;回过头重新总结下个人对矩阵乘法的理解&#xff08;严格来说是点乘&#xff09;。 理解矩阵和矩阵的乘法&#x…

HTML、CSS表格的斜表头样式设置title 画对角线

我里面有用到layui框架的影响&#xff0c;实际根据你自己的框架来小调下就可以 效果如下 上代码 <!DOCTYPE html> <html lang"zh"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-wi…

29. Three.js案例-自定义平面图形

29. Three.js案例-自定义平面图形 实现效果 知识点 WebGLRenderer WebGLRenderer 是 Three.js 中用于渲染 3D 场景的核心类。它利用 WebGL 技术在浏览器中渲染 3D 图形。 构造器 THREE.WebGLRenderer(parameters : object) 参数类型描述parametersobject可选参数对象&…

一条线上的点

给你一个数组 points &#xff0c;其中 points[i] [xi, yi] 表示 X-Y 平面上的一个点。求最多有多少个点在同一条直线上。 提示&#xff1a; 1 < points.length < 300points[i].length 2-104 < xi, yi < 104points 中的所有点 互不相同 解析&#xff1a;使用斜…

WebRTC服务质量(05)- 重传机制(02) NACK判断丢包

WebRTC服务质量&#xff08;01&#xff09;- Qos概述 WebRTC服务质量&#xff08;02&#xff09;- RTP协议 WebRTC服务质量&#xff08;03&#xff09;- RTCP协议 WebRTC服务质量&#xff08;04&#xff09;- 重传机制&#xff08;01) RTX NACK概述 WebRTC服务质量&#xff08;…

八股—Java基础(二)

目录 一. 面向对象 1. 面向对象和面向过程的区别&#xff1f; 2. 面向对象三大特性 3. Java语言是如何实现多态的&#xff1f; 4. 重载&#xff08;Overload&#xff09;和重写&#xff08;Override&#xff09;的区别是什么&#xff1f; 5. 重载的方法能否根据返回值类…

linux ibus rime 中文输入法,快速设置为:默认简体 (****)

本文环境&#xff1a; ubuntu 22.04 直接 apt install ibus-rime 输入法的安全性&#xff0c;人们应该关注吧&#xff01;&#xff01;&#xff1f;&#xff1f; 云输入法&#xff1f;将用户的输入信息传输到云端吗&#xff1f;恐怕很多人的银行账户和密码&#xff0c;早就上…

uniapp使用百度地图配置了key,但是显示Map key not configured

搞了我两天的一个问题。 hbuilderx版本&#xff1a;4.36 问题介绍&#xff1a; 我的项目是公司的项目&#xff0c;需要在H5端使用百度地图&#xff0c;使用vue-cli创建的uniapp&#xff0c;就是uni代码在src里的目录结构。就是使用这种方式才会遇到这个问题。 问题原因&#xf…

ensp 静态路由配置

A公司有广州总部、重庆分部和深圳分部3个办公地点&#xff0c;各分部与总部之间使用路由器互联。广州、重庆、深圳的路由器分别为R1、R2、R3&#xff0c;为路由器配置静态路由&#xff0c;使所有计算机能够互相访问&#xff0c;实训拓扑图如图所示 绘制拓扑图 给pc机配置ip地址…

3分钟读懂数据分析的流程是什么

数据分析是基于商业目的&#xff0c;有目的地进行收集、整理、加工和分析数据&#xff0c;提炼出有价值的 信息的一个过程。整个过程大致可分为五个阶段&#xff0c;具体如下图所示。 1.明确目的和思路 在开展数据分析之前&#xff0c;我们必须要搞清楚几个问题&#xff0c;比…

Python-基于Pygame的小游戏(坦克大战-1.0(世界))(一)

前言:创作背景-《坦克大战》是一款经典的平面射击游戏&#xff0c;最初由日本游戏公司南梦宫于1985年在任天堂FC平台上推出。游戏的主题围绕坦克战斗&#xff0c;玩家的任务是保卫自己的基地&#xff0c;同时摧毁所有敌人的坦克。游戏中有多种地形和敌人类型&#xff0c;玩家可…

认识漏洞-GIT泄露漏洞、APP敏感信息本地存储漏洞

为方便您的阅读&#xff0c;可点击下方蓝色字体&#xff0c;进行跳转↓↓↓ 01 [GIT泄露漏洞&#xff0c;你检查了吗&#xff1f;](https://mp.weixin.qq.com/s/I69Jsu8GfX9FJIhMVFe_fA)02 [APP客户端评估- 敏感信息本地存储]( https://mp.weixin.qq.com/s/IrTLZp_lslvGaD4Xhlk…

《Kali 系统中 Docker 镜像加速器安装指南:加速容器镜像拉取》

在 Kali 中配置 Docker 镜像加速器可以显著提高拉取 Docker 镜像的速度&#xff0c;以下是具体步骤&#xff1a; 一、获取镜像加速器地址 国内有许多云服务提供商提供镜像加速器服务&#xff0c;例如阿里云、腾讯云、网易云等。以阿里云为例&#xff0c;你需要先在阿里云容器镜…

allure报告环境搭建

1、allure下载新版.zip文件&#xff0c;解压 https://repo.maven.apache.org/maven2/io/qameta/allure/allure-commandline/ 2、解压后放到d盘文件里&#xff1a;、 3、环境变量配置bin文件和jre文件 4、虚拟环境里安装allure-pytest&#xff0c;cmd执行activate.bat,进入对应…

MVC基础——市场管理系统(四)

文章目录 项目地址六、EF CORE6.1 配置ef core环境6.2 code first6.2.1 创建Database context1. 添加navigation property2. 添加MarketContext上下文七、Authentication7.1 添加Identity7.2 Run DB migration for Identity7.3 使用Identity7.3.1 设置认证中间件7.3.2 设置权限…