docker的swarm技术

  • docker中swarm技术

    • docker swarm技术是docker社区提供的docker的集群管理调度工具,通过api来管理多个主机上的docker,通过overlay网络来实现不同主机之间容器的通信与访问。实现容器的调度,资源的分配,以及副本。

    • docker swarm中几个重要概念

      • docker swarm提供的两种api接口

        • 标准的api接口

          • 提供对外的访问接口,使之能够访问和管理docker集群。

        • 集群管理api接口

          • 集群之间管理通信的接口

      • overlay(覆盖/叠加网络)

        • 在现有的实例网络之上构建一个逻辑网络,忽略底层的硬件机制。是虚拟化技术网络的重要组成。基于二层,可轻易扩展。

      • 微服务

        • 通常以容器为单位,进行开发,测试,部署,扩展,微服务之间通过api接口进行访问。

        • 提供了一种高度模块化,可扩展,可维护的软件系统,为了快速响应市场的复杂变化。

      • 滚动更新

        • 不停机更新软件版本

      • 副本数

        • swarm会维持用户所期望的副本数量

      • 声明服务模型

        • 隐藏实现过程,只需要指定目标

      • 安全策略

        • 强制执行TLS

          • 传输层安全

    • docker swarm的特性

      • 管理工具与docker engine集成,无需额外安装

      • 去中心化设计:在swarm中任何一个节点都能称为manager,也能降级为worker。可以在任意节点升级权限,然后使用管理命令。

      • 声明式服务模型:定义各种所期望的服务状态

      • 扩缩容,使用docker swarm可以非常容器的实现容器数量的扩容和缩容。

      • 期望值:swarm会让服务运行在一个期望值

      • 多主机网络

      • 服务发现,内置dns服务,会自动分配dns

      • 负载均衡,集群式部署基本功能

      • 默认安全。强制执行TLS

      • 滚动更新:不停机更新

    • docker swarm中关键概念

      • 节点

        • 在swarm集群中每一个docker主机都是一个节点,节点又分为管理节点和工作节点

        • 管理节点功能

          • 调度

          • 编排

          • 集群管理

          • 默认情况下,创建swarm集群的主机就是manager的leader。

      • 服务与任务

        • 服务定义了在工作节点上要执行的任务,是swarm集群中调度的最小单位。

      • 负载均衡

        • swarm使用负载均衡入口来公开对外提供的服务,部署服务时可以指定端口,如果未指定则会随机使用3w~32767之间的端口。外部组件可以访问任意节点,然后节点会将请求转发到正在运行所请求的任务实例的节点上。

    • docker swarm的使用案例

      • 拓扑

          • 以docker26版本为例

      • 基础环境配置

        • 修改主机名,设置hosts文件

          • hostnamectl set-hostname

          • 192.168.10.101 manager 192.168.10.102 worker01 192.168.10.103 worker02

        • 防火墙添加策略

          • tcp/2377

            • 集群管理所使用的端口,包括服务的部署,调度,节点间协调等。

          • tcp-udp/7946

            • 节点间心跳消息与发现服务,节点状态同步

          • tcp-udp/4789

            • 用与overlay网络的数据传输

          • 防火墙命令

            • firewall-cmd --zone=public --add-port=7946/udp --permanent

            • firewall-cmd --reload

      • 部署docker swarm群集

        • docker swarm init --advertise-addr 192.168.10.101

          • advertise:通告,广播 意味着该管理节点将通过该ip宣告自己的存在

          • 之后会生成令牌,其他docker主机需通过该令牌加入到该集群。在其他docker主机复制执行即可。

        • 查看集群信息三种方法

          • docker info

            • 在信息中应该有swarm单元

              • Swarm: active NodeID: x3v12rmfw9c0isq1nppaaoogh Is Manager: true ClusterID: 0mps950k70s2oqphe75jzykqq Managers: 1 Nodes: 3

          • 在管理节点上执行命令

            • docker node ls

              • 带星号表示是leader节点,注意availability的三种状态。
                • active(活跃的)

                  • 该节点可以被指派容器

                • pause(暂停)

                  • 该节点不能被指派新容器,但是已经存在的容器保持运行。

                • drain(排空)

                  • 该节点不能被指派容器,同时已有的容器会被调度到其他可用的节点上。

                • 状态的修改办法以管理节点为例

                  • docker node update --availability drain manager(更新后的状态,那个节点)

          • 查看节点的详细信息

            • docker node inspect 主机名

      • docker swarm群集的使用

        • 为某个节点添加标签,然后创建服务指定该节点

          • 添加标签

            • docker node update --label-add group=g2 worker01

          • 查看标签信息

            • docker node inspect worker01

          • 创建服务生成容器到指定节点

            • docker service create --name mynginx --constraint 'node.labels.group==g2' nginx

          • 查看mynginx所在主机

            • docker service ps mynginx

        • 节点的提权与降权

          • 提权为manager

            • docker node promote worker01 worker02

          • 降权为worker节点

            • docker node demote worker01 worker02

        • 节点的退出

          • 管理节点

            • docker swarm leave

              • 如果管理节点所在群集还有其他节点,则需要加上--force

          • 工作节点

            • docker swarm leave

              • 那个节点要退出,在那个节点上执行该命令

          • 加入

            • 利用管理节点的token重新加入

            • 管理节点退出后再次加入需要重新生成token,再让其他节点加入。

          • 注意事项

            • swarm集群解散后,其管理的service也会被删除掉

        • docker swarm的服务管理

          • 创建服务

            • docker service create -p 80:80 --replicas 2 --name web nginx

              • -p 端口映射

              • --replicas 指定服务副本数,根据服务器性能和需要酌情创建。

              • --name 服务名称

              • nginx 镜像(可在线拉取,可使用本地)

              • 在创建服务时需要从网上拉取镜像,需要校验序列,因此本地拉取镜像不可取

            • 查看服务的日志

              • docker service logs -f web

                • -f 指定服务名称

              • 退出ctrl+c

            • 想要拉取本地镜像的办法

              • 首先确保容器所在节点都有新版本的镜像

              • 然后为镜像打标签

                • docker tag myimage:tag myimage:local

              • 在创建时使用修改后的镜像名称加标签

                • docker service create --name myservice \ --replicas 3 \ myimage:local

            • 创建服务时任务的状态

              • Accepted (accepted)

                • 这是任务初始状态,表示任务已经被接受,但尚未被调度到节点上执行。

              • Pending (pending)

                • 表示任务已被调度到某个节点上,但尚未启动。此状态可能出现在等待资源分配、等待容器启动等情况下。

              • Assigned (assigned)

                • 任务已经被分配到一个具体的节点上,但尚未开始准备。

              • Preparing (preparing)

                • 任务正在被准备中,即 Docker 正在做启动容器前的准备工作,比如拉取镜像、配置网络等。

              • Ready (ready)

                • 任务准备就绪,即将启动。

              • Starting (starting)

                • 容器正在启动过程中。

              • Running (running)

                • 容器已经启动并正在运行。

              • Complete (complete)

                • 任务已完成。对于一次性任务,这意味着任务已经成功完成;对于服务中的任务,则表示任务被终止,但可以被替换。

              • Shutdown (shutdown)

                • 任务已经被停止或关闭。这可能是由于服务更新、故障恢复或其他原因导致的。

              • Failed (failed)

                • 任务失败。这可能是由于容器退出状态非零、健康检查失败等原因造成的。

              • Rejected (rejected)

                • 任务被拒绝。这通常是由于资源不足或节点不可用等原因导致的。

              • Orphaned (orphaned)

                • 任务与服务失去联系,通常发生在服务被删除而任务仍在运行的情况下。

              • Updating (updating)

                • 任务正在进行更新操作,如滚动更新服务。

              • Reverting (reverting)

                • 任务正在回滚到先前的状态,通常是在更新失败后发生的。

          • 查看服务

            • 所有服务

              • docker service ls

            • 指定服务

              • docker service ps 服务名

            • 显示服务详细信息

              • docker service inspect 服务名

                • 以json语言格式显示

              • docker service inspect --pretty 服务名

                • 以人性化的方式显示服务的详细信息

          • 服务的扩缩容

            • docker service scale 服务名=数量

              • 扩容数量调大

              • 缩容数量调小

          • 删除服务

            • docker service rm 服务名

          • 滚动更新

            • 先创建测试服务

              • docker service create --replicas 3 --name redis --update-delay 10s redis:3.0.6

                • 注意版本

                • --update-delay是--update-config的一个参数,常见的参数如下

                  • docker service update \ redis \ --image redis:3.0.7 \ --update-config \ Parallelism=2 \ Delay=10s

                    • parallelism

                      • 同时更新的容器数

            • 执行滚动更新

              • docker service update --image 新版本 服务名

              • 滚动更新拉取本地镜像的办法

                • 在更新时指定本地镜像标签

                  • docker service update --image mynginx:local 服务名称

          • 加入overlay网络

            • 创建overlay网络

              • docker network create --driver overlay 网络名称

            • 创建服务时加入到该网络

              • docker service create --replicas 3 --network 网络名称 --name myweb nginx

            • 如果有其他容器也使用该网络那么就能与同一个网络之中的其他容器通信。

              • docker run --dit --name pc02 --net=服务器名称 ccentos:7

          • 数据卷的创建与应用

            • 创建数据卷

              • docker volume create product-kgc

            • 创建容器来连接数据卷

              • docker service create --mount type=volume,src=product-kgc,dst=/usr/share/nginx/html --replicas 1 --name kgc-web-01 nginx

                • 注意写法 src时宿主机的卷,dst是容器内的卷

                • --mount type=的几种类型

                  • volume,挂载位于/var/lib/docker/volumes中的卷,是通过docker命令创建的卷

                  • bind:挂载宿主机目录到容器,一般用于共享存储

                  • tmps:只存在于内存的临时文件系统,读写速度快,但不会永久保存数据。

              • 需要注意,一个--mount只能选择一个路径,使用多个--mount来挂载多个路径,包括文件的映射。宿主机上的目录挂载到容器内会覆盖同名的目录!!!

                • 因为容器是运行时的程序所在,因此文件的修改大多需要重启容器,或者触发再次加载文件的动作。

                • 多次挂载的命令格式

                  • docker service create \ --name kgc-web-01 \ --replicas 1 \ --mount type=volume,src=product-kgc,dst=/usr/share/nginx/html \ --mount type=volume,src=config-volume,dst=/etc/nginx \ nginx

                • 宿主机挂载到容器内的目录会覆盖原有的同名目录

                • 只读挂载:如果您希望保留容器内的文件,并且只是想读取宿主机目录的内容,可以使用 readonly 参数来挂载为只读模式。

                  • docker run --name some-nginx --mount type=bind,src=/path/to/host/directory,dst=/usr/share/nginx/html,readonly nginx

                • 映射文件的办法

                  • 通过创建符号链接

                    • docker exec -it kgc-web-01 sh -c 'ln -sf /etc/nginx/nginx.conf /etc/nginx/nginx.conf'

                      • 需要使用-sf强制覆盖所有的链接

                      • 确保容器内的用户有权限访问这些文件和目录

                  • 在进行文件挂载的时候要确保文件提前存在

            • 在使用bind时,可以利用nfs,glusterfs来创建共享存储。

              • 然后去创建相关文件进行验证

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/399782.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Keepalived超详解,里面有你最爱看的Keepalived+LVS与Keepalived+HAProxy

文章目录 VRRPVRRP相关术语VRRP相关技术 keepalived介绍keepalived环境准备keepalived配置说明全局配置虚拟路由器配置开启通信功能启用keepalived日志实现独立子配置文件 keepalived企业应用实例抢占模式和非抢占模式非抢占模式延迟抢占模式 VIP单播模式keepalived通知脚本配置…

JVM知识总结(CMS收集器)

文章收录在网站:http://hardyfish.top/ 文章收录在网站:http://hardyfish.top/ 文章收录在网站:http://hardyfish.top/ 文章收录在网站:http://hardyfish.top/ CMS收集器 CMS(Concurrent Mark Sweep)收集…

14.3 Matplotlib与Seaborn数据可视化

欢迎来到我的博客,很高兴能够在这里和您见面!欢迎订阅相关专栏: 工💗重💗hao💗:野老杂谈 ⭐️ 全网最全IT互联网公司面试宝典:收集整理全网各大IT互联网公司技术、项目、HR面试真题.…

tiktok 搜索接口请求与翻页

这几天有小伙伴问tk的搜索接口的问题, 一个是搜索热门接口请求返回 {“status_code”: 0},这个使用curl_cffi的requests库改一下指纹请求就行了。 再一个就是翻页问题 细心一些比对一下翻页参数都能做到的(小伙伴以为只改个offset就完事了) 要不然你只能得到这样的结果:…

音视频概要

YUV原理的讲解 YUV是一种常见的视频像素格式,经常用在视频编解码上面,YUV分别由Y分量和U、V分量(红色投影Cr)组成。Y分量指的是亮度分量,也就是我们经常说的灰阶值,相当于一副灰色的图像。而U分量和V分量表示的是色度分量&#x…

ThinkPHP5.0.15漏洞解析及SQL注入

第一步: 通过查看5.0.15和5.0.16版本的对比,可以看到16版本对在Builder.php里面对数据库的增减做了修正,所以可以15版本的漏洞就存在在这里。这里的代码用的拼接的方式,就可以尝试使用报错注入来实现。 第二步: 我们…

Selenium + Python 自动化测试09(多窗口切换)

我们的目标是:按照这一套资料学习下来,大家可以独立完成自动化测试的任务。 上一篇我们讨论了截图的操作方法,本篇文章我们讲述一下多窗口切换的操作方法。 在实际的测试项目组中我们可能会遇到多窗口的情况,有时候需要在不同窗口…

代理服务器在HTTP请求中的应用:Ruby实例

摘要 在现代互联网架构中,代理服务器是不可或缺的组件,它提供了访问控制、数据加密、缓存和匿名访问等多种功能。本文将介绍代理服务器的基本概念,并以Ruby编程语言为例,展示如何在HTTP请求中使用代理服务器,包括设置…

TS基础记录

ts配置文件的配置项有很多下面是一些常见的配置: { //这个ts的json可以写注释,用来指令哪些ts文件需要编译,/*任意文件,/**任意目录,./是当前目录 , // ../是父级目录,/是根目录(表示一下子回到最顶端的那个文件夹下) "include": […

Android 实现多进程通讯(如何实现多进程开发,Binder、AIDL)

目录 1)为什么App需要多进程 2)什么是多进程开发? 3)如何实现多进程开发? 4)跨进程间通讯(案例) 5)多进程需要注意什么问题? 6)多进程的底层原理是什么?【待写】 …

【Ajax使用说明】Ajax、Axios以及跨域

目录 一、原生Ajax 1.1 Ajax简介 1.2 XML简介 1.3 AJAX 的特点 1.3.1 AJAX的优点 1.3.2 AJAX 的缺点 1.4 AJAX 的使用 1.4.1AJAX的基本操作 1.4.2AJAX的传参 1.4.3 AJAX的post请求及设置请求体 1.4.4 AJAX响应json数据 1.4.5 AJAX请求超时与网络异常处理 1.4.5 AJ…

Ubuntu基础使用-适合新手的讲解

目录 一、基础操作 1. 终端重要热键 2. 基础命令 3. 通配符 二、文件与目录 1. 2.等价 3.帮助指令 4.当前路径 更改路径 5.创建与删除文件夹 6.创建与删除文件 7.重定向(写入,追加写入) 8.查看文件内容 9.wc指令 10.复制&…

Broken: Gallery靶机复现

靶机设置 靶机设置为NAT模式 靶机IP发现 nmap 192.168.112.0/24 靶机IP为192.168.112.142 目录扫描 dirsearch 192.168.112.142 访问浏览器 发现文件页面 查看后发现都没什么用 getshell hydra -L rockyou.txt -P rockyou.txt 192.168.112.142 ssh 尝试爆破ssh账号密码…

Agile Modbus移植教程--基于GD32F103C8T6+RT-Thread+mdk5

主机移植 0.下载源码 开源地址:GitHub - loogg/agile_modbus 1.复制源码 1.2、目录结构 名称说明doc文档examples例子参考示例figures素材inc头文件移植需要src源代码移植需要util提供简单实用的组件移植需要 本次移植需要的有 参考demo 头文件 源码 从机辅助文件 2.添…

基于lambda简化设计模式

写在文章开头 本文将演示基于函数式编程的理念,优化设计模式中繁琐的模板化编码开发,以保证用尽可能少的代码做尽可能多的事,希望对你有帮助。 Hi,我是 sharkChili ,是个不断在硬核技术上作死的 java coder &#xff…

数据结构+二叉遍历算法的应用

一、问题描述 编写一个程序,先用二叉树表示一个简单算术表达式,树的每一个 结点包括一个运算符或运算数。在简单算术表达式中只包含、-、 *、/和一位正整数且格式正确(不包含括号),并且要按照先乘除后 加减的原则构造二叉树。如图 7.35 所示…

聚合平台项目优化(门面模式,适配器模式,注册器模式)

前言: 这篇文章的思路就是抛出问题,再思考解决方案,最后利用设计模式解决问题 项目背景: 聚合搜索平台的主要功能就是一个有强大搜索能力的一个项目 用户输入一个词,同时可以搜索出用户,文章和图片这种…

AI绘画: ComfyUI奥运高光时刻海报工作流,工作流拆解~

前言 点关注不迷路! 这两天,阿里云的PAI ArtLab的ComfyUI新增了一个奥运高光时刻海报的工作流,小编测试下来,效果真的不错。不愧是大厂出品,必属精品。那么这次小编就简单梳理一下这个工作流的的各个部分&#xff0c…

基于vue框架的CKD电子病历系统nfa2e(程序+源码+数据库+调试部署+开发环境)系统界面在最后面。

系统程序文件列表 项目功能:患者,医生,药品信息,电子病历,临时医嘱,长期医嘱,健康科普 开题报告内容 基于Vue框架的CKD电子病历系统 开题报告 一、选题背景 随着信息技术的飞速发展和医疗信息化的深入推进,电子病历系统(Electronic Medic…

分布式文件系统FastDFS入门

文章目录 一.分布式文件系统简介:二.FastDFS简介三.FastDFS组成Tracker ServerStorage Serverclient上传流程下载流程文件ID 四.FastDFS配置1.tracker.conf2.stroage 配置文件3.client配置文件 五.FastDFS使用六.代码实现通过execl调用客户端程序进行上传下载使用AP…