k8s replicaSet,deployment 学习笔记
文章目录
- replicaSet 和 deployment 两者的关系。
- 创建
- 滚动更新
- 回滚
replicaSet 和 deployment 两者的关系。
在 Kubernetes 中,ReplicaSet 和 Deployment 都是用来确保某种 Pod 的副本数目。但是,ReplicaSet 和 Deployment 是有差别的,二者的关系可以粗略地理解为 Deployment 对 ReplicaSet 的进一步封装。
-
ReplicaSet是为了确保任意时刻都有特定数量的 Pod 副本在运行。换句话说,如果有 Pod 出现故障被删除,ReplicaSet会自动创建新的 Pod 来替代。但ReplicaSet本身并不支持滚动更新,如果要更新 Pod,就需要手动删除老的 Pod,然后ReplicaSet会自动创建新的 Pod。 -
Deployment是一个更高层次的概念,它管理ReplicaSet,并提供了声明式更新的能力。它包含了ReplicaSet所有的功能,并且增加了版本更新的功能。当有新的版本需要部署时,Deployment会自动创建一个新的ReplicaSet,并逐步将老的 Pod 替换为新的 Pod,直到达到预期的 Pod 数量。这个过程是滚动更新。
总结起来,Deployment 是对 ReplicaSet 进一步的封装,提供了滚动更新的能力,使得更新 Pod 变得更加方便。在实际使用中,大部分时候都是直接使用 Deployment,很少直接使用 ReplicaSet。

创建
nginx-deploy.yaml
apiVersion: apps/v1 # deployment api版本
kind: Deployment # 资源类型为deployment
metadata: # 元信息labels: # 标签app: nginx-deployname: nginx-deploy # deployment的名字namespace: default
spec:replicas: 3 #副本数量revisionHistoryLimit: 10 #进行滚动更新后保留的副本数量selector: #选择器,用于找到匹配的rsmatchLabels:app: nginx-deploystrategy: #更新策略rollingUpdate: #滚动更新策略maxSurge: 25% # 后面的滚动更新中会详细介绍maxUnavailable: 25% # 后面的滚动更新中会详细介绍type: RollingUpdatetemplate:metadata:creationTimestamp: nulllabels:app: nginx-deployspec:containers:- image: nginx:1.7.9imagePullPolicy: IfNotPresent #拉取策略name: nginxresources:limits:cpu: 50mmemory: 128Mirequests:cpu: 50mmemory: 128MiterminationMessagePath: /dev/termination-logterminationMessagePolicy: FilerestartPolicy: Always #重启策略terminationGracePeriodSeconds: 30 #删除操作最多宽限多长时间
kb create -f nginx-deploy.yaml
由上图可知,创建了一个deployment,这个deployment管理着一个rs,而这个rs管理这个三个replica。
kb describe deploy nginx-deploy
滚动更新
maxSurge和maxUnavailable是 Kubernetes 的Deployment对象中用于控制滚动更新策略的两个参数。
这两个参数的合理配置可以确保滚动更新过程中服务的连续性和资源的高效利用。
-
maxSurge:这个参数表示滚动更新过程中,新副本 Pod 能超过原始
replicas数量的最大值。例如,如果replicas为3,maxSurge为1,那么滚动更新过程中最多可以有4个 Pod 同时运行。这个参数可以是绝对数量(例如,1),也可以是相对于replicas的百分比(例如,10%)。值得注意的是,当你设置的maxSurge和maxUnavailable都为0时,Kubernetes将不会允许这样的配置,因为这样就无法完成滚动更新。 -
maxUnavailable:这个参数表示滚动更新过程中,可以同时不可用的老副本 Pod 个数的最大值。例如,如果
replicas为3,maxUnavailable为1,那么滚动更新过程中,最多可以有1个老的 Pod 不可用。这个参数也可以是绝对数量或者相对于replicas的百分比。同样,如果maxSurge和maxUnavailable都设为0,Kubernetes 是不会接受的。
滚动更新流程
这个滚动更新的过程确保了服务在更新过程中的不中断,提供了零停机时间的更新体验。同时,通过灵活设置maxSurge和maxUnavailable参数,我们可以平衡服务的稳定性和资源的利用率。
- 当你更新了
Deployment的配置(例如,更改了 Pod 的 Docker 镜像)后,Deployment会创建一个新的 ReplicaSet 并将maxSurge参数设定的额外 Pods 数量添加到新的 ReplicaSet 中。这意味着新的 Pod 已经启动并准备接受请求。 - 一旦这些新的 Pod 就绪并开始运行,
Deployment会按照你设置的maxUnavailable参数的值,停止相应数量的旧的 Pods。这些被停止的 Pods 被新的 Pods 替代。这个终止和启动 Pods 的过程被称为 “滚动更新”。 - 如果在更新过程中新的 Pod 出现问题,
Deployment将停止创建新的 Pod 并开始回滚。这意味着,它会停止新的 Pods,并开始回滚到旧的 ReplicaSet。 - 如果新的 Pod 正常运行,
Deployment会继续停止更多的旧的 Pods,启动新的 Pods,直至所有的旧的 Pods 都被新的 Pods 替代。此时,更新完成。
注意,Deployment还记录了所有的旧的 ReplicaSet(即历史版本),以便于在必要时回滚到旧的版本。
-
kb edit deploy nginx-deploy,修改镜像。

-
kb describe deploy nginx-deploy,查看deploy更新event事件。

-
查看deploy,rs,pod

总结:deploy滚动更新并不是直接删除rs然后创建新rs;它是保持已有的rs不变,创建一个新的rs,然后根据yaml里设置的maxSurge和maxUnavailable;例如,我这里都是设置为1,所以在event里可以看到deploy每次在新的rs里创建一个pod,然后在旧的rs里关闭一个pod,如此这般操作直到旧的rs里的pod数量为0完全关闭,新的rs里的pod数量为3,至此滚动更新成功。
回滚
假设我们更新的nigin1.9.1版本是有问题的,那么我们就需要回退到之前的1.7.9。
-
查看历史版本。

-
查看指定版本的信息。

-
回退之前先看看当前的deploy信息,kb describe deploy nginx-deploy

-
版本1就是我们需要回退的目标版本,回退到版本1。

-
kb describe deploy nginx-deploy;查看回退之后的deploy信息。

-
可以看到回退是直接使用之前滚动更新时停用的rs。整个回退过程也是遵循滚动更新的规范,先开一个新的pod再关一个旧的pod,直到pod数量达到要求就完成了回退。
相关文章:
k8s replicaSet,deployment 学习笔记
文章目录 replicaSet 和 deployment 两者的关系。创建滚动更新回滚 replicaSet 和 deployment 两者的关系。 在 Kubernetes 中,ReplicaSet 和 Deployment 都是用来确保某种 Pod 的副本数目。但是,ReplicaSet 和 Deployment 是有差别的,二者的…...
Zabbix监控原理 安装
一、监控介绍 1、监控目的 监控是需要站在公司的业务角度去考虑,而不是针对某个监控技术的使用 对系统不间断时实监控 实际上是对系统不间断的时实监控 实时反馈系统当前状态 我们监控某个硬件、或者系统,都是需要能时实看到当前系统的状态&#x…...
我和“云栖大会”的双向奔赴
目录 引言初次参加云栖大会云栖大会带来的技术风向标本届大会最强技术有哪些?云栖大会对我职业生涯的影响个人对未来云栖大会的期待和建议结语 引言 想必大家对“云栖大会”并不陌生,“云栖大会”作为国内最具规模和影响力的云计算盛会,每年…...
HarmonyOS UI 开发
引言 HarmonyOS 提供了强大的 UI 开发工具和组件,使开发者能够创建吸引人的用户界面。本章将详细介绍在 HarmonyOS 中应用 JS、CSS、HTML,HarmonyOS 的 UI 组件以及如何自定义 UI 组件。 目录 JS、CSS、HTML 在 HarmonyOS 中的应用HarmonyOS 的 UI 组…...
中国移动发布《新型智慧城市白皮书》(2023版)
加gzh“大数据食铁兽”,回“20231101”,获取材料完整版 导读 通过本系列白皮书,我们系统的阐述了中国移动对中国智慧城市发展趋势,并对中国移动服务智慧城市建设六大核心能力进行了介绍,详细说明了中国移动智慧城市…...
windows和docker环境下springboot整合gdal3.x
链接: gdal官网地址 gdal gdal的一个用c语言编写的库,用于处理地理信息相关的数据包括转换,识别数据,格式化数据以及解析 同时提供第三方语言的SDK包括python,java上述需要编译后使用 java是需要使用jni接口调用实现方法在wind…...
大数据与健康:技术助力医疗卫生事业腾飞
大数据与健康:技术助力医疗卫生事业腾飞 随着科技的飞速发展,大数据技术已经渗透到我们生活的方方面面,包括医疗卫生领域。本文将对大数据在健康医疗领域的应用进行分析,并通过数据图表展示其发展趋势和前景。 一、背景介绍 近…...
《巴渝小将》少儿电视综艺走进江小白金色黄庄拍摄圆满成功!
巴渝小将,乘风破浪! 张扬巴渝魅力,展示少年风采,本期拍摄我们来到了位于江津的江小白金色黄庄。 江小白金色黄庄位于永兴镇黄庄村,是一座充满诗意又不乏童趣的农文旅综合体,基于当地良好的酿酒高粱产业基础…...
【uniapp】顶部和底部导航栏无法正常显示
关于顶部导航栏不显示的问题: 顶部导航栏在配置了 navigationBarTitleText 还是无法显示,如果是使用他人的项目结构,需要检查是否已经被配置了自定义导航栏: "navigationStyle": "custom" "globalStyle&…...
【ArcGIS模型构建器】06:ArcGIS中DOM批量分幅教程
ArcGIS中利用模型构建器实现DOM批量分幅裁剪。 文章目录 1. 加载数据2. 批量分幅1. 加载数据 批量分幅通常是基于数字正射影像来实现。 数字正射影像(DOM.tif)CASS标准图幅(shp) 2. 批量分幅 单个图幅可以通过裁剪或者按掩膜提取工具来进行,批量分幅采用模型构建器进行。…...
uniapp 设置 editor 默认值
dom 元素长这样 <editor id"editor" value12323 class"ql-container container" placeholder"开始输入..." ready"onEditorReady" blur"submit"></editor> 注意赋值必须要用 data 里面变量数据 不要let 定义…...
动态规划:计数类DP
整数划分: 二维做法: #include <iostream>using namespace std;const int N 1e3 7, mod 1e9 7;int f[N][N];int main() {int n;scanf("%d",&n);//总数为0时,前i个数字全不选也是一种方案,但某个数字不…...
Arcmap制图绘制显著性区域
类似于下图这种,为分析结果添加显著性区域,该如何实现呢? 实现方式多种多样,比如: 1、代码。Python、R、Matlab都有实现方式,但是绘制一幅优美的地图,用代码绘制,需要添加很多控制语…...
你一般会什么时候使用CHATGPT?
在当今数字时代,人们对于人工智能(AI)的依赖程度日益增加,而ChatGPT作为一种强大的自然语言处理工具,吸引了人们的广泛关注和应用。那么,人一般在什么时候会想要使用ChatGPT呢?这个问题涵盖了多…...
单例模式下双重校验锁 DCL 的灵魂三问
文章目录 前言如何实现一个双重校验锁 DCL定义一个单例变量定义一个获取单例的方法性能优化性能优化带来的一点点问题什么是指令重排? 总结如何理解文章开篇理解的三个问题1、为什么需要使用两个 if 语句?2、为什么使用了 synchronized 关键字还需要使用…...
oracle中关于connect by的语法及实现(前序遍历树)
语法 connect by是是结构化查询中用到的,其基本语法是: 1 select … from tablename 2 start with 条件1 3 connect by 条件2 4 where 条件3; 使用示例 例: create table tree(id int,parentid int); insert into tree values(120,184); …...
学习笔记二十七:K8S控制器Statefulset入门到企业实战应用
这里写目录标题 Statefulset控制器:概念、原理解读Statefulset资源清单文件编写技巧查看定义Statefulset资源需要的字段查看statefulset.spec字段如何定义?查看statefulset的spec.template字段如何定义 Statefulset使用案例:部署web站点State…...
JavaScript 的 闭包
在 JavaScript 中,闭包是一种强大的特性,它允许函数在结束执行后,仍能访问并控制其外部的局部变量。这种特性在许多高级 JavaScript 编程场景中都发挥着关键作用,如创建函数工厂、实现数据隐藏和封装等。 1、闭包的原理 JavaScri…...
二蛋赠书六期:《Linux管理入门经典(第8版)》
前言 大家好!我是二蛋,一个热爱技术、乐于分享的工程师。在过去的几年里,我一直通过各种渠道与大家分享技术知识和经验。我深知,每一位技术人员都对自己的技能提升和职业发展有着热切的期待。因此,我非常感激大家一直…...
19.10 Boost Asio 同步文件传输
在原生套接字编程中我们介绍了利用文件长度来控制文件传输的方法,本节我们将采用另一种传输方式,我们通过判断字符串是否包含goodbye lyshark关键词来验证文件是否传输结束了,当然了这种传输方式明显没有根据长度传输严谨,但使用这…...
Golang dig框架与GraphQL的完美结合
将 Go 的 Dig 依赖注入框架与 GraphQL 结合使用,可以显著提升应用程序的可维护性、可测试性以及灵活性。 Dig 是一个强大的依赖注入容器,能够帮助开发者更好地管理复杂的依赖关系,而 GraphQL 则是一种用于 API 的查询语言,能够提…...
全球首个30米分辨率湿地数据集(2000—2022)
数据简介 今天我们分享的数据是全球30米分辨率湿地数据集,包含8种湿地亚类,该数据以0.5X0.5的瓦片存储,我们整理了所有属于中国的瓦片名称与其对应省份,方便大家研究使用。 该数据集作为全球首个30米分辨率、覆盖2000–2022年时间…...
多模态商品数据接口:融合图像、语音与文字的下一代商品详情体验
一、多模态商品数据接口的技术架构 (一)多模态数据融合引擎 跨模态语义对齐 通过Transformer架构实现图像、语音、文字的语义关联。例如,当用户上传一张“蓝色连衣裙”的图片时,接口可自动提取图像中的颜色(RGB值&…...
DBAPI如何优雅的获取单条数据
API如何优雅的获取单条数据 案例一 对于查询类API,查询的是单条数据,比如根据主键ID查询用户信息,sql如下: select id, name, age from user where id #{id}API默认返回的数据格式是多条的,如下: {&qu…...
三体问题详解
从物理学角度,三体问题之所以不稳定,是因为三个天体在万有引力作用下相互作用,形成一个非线性耦合系统。我们可以从牛顿经典力学出发,列出具体的运动方程,并说明为何这个系统本质上是混沌的,无法得到一般解…...
Rapidio门铃消息FIFO溢出机制
关于RapidIO门铃消息FIFO的溢出机制及其与中断抖动的关系,以下是深入解析: 门铃FIFO溢出的本质 在RapidIO系统中,门铃消息FIFO是硬件控制器内部的缓冲区,用于临时存储接收到的门铃消息(Doorbell Message)。…...
在Ubuntu24上采用Wine打开SourceInsight
1. 安装wine sudo apt install wine 2. 安装32位库支持,SourceInsight是32位程序 sudo dpkg --add-architecture i386 sudo apt update sudo apt install wine32:i386 3. 验证安装 wine --version 4. 安装必要的字体和库(解决显示问题) sudo apt install fonts-wqy…...
嵌入式学习笔记DAY33(网络编程——TCP)
一、网络架构 C/S (client/server 客户端/服务器):由客户端和服务器端两个部分组成。客户端通常是用户使用的应用程序,负责提供用户界面和交互逻辑 ,接收用户输入,向服务器发送请求,并展示服务…...
【Go语言基础【12】】指针:声明、取地址、解引用
文章目录 零、概述:指针 vs. 引用(类比其他语言)一、指针基础概念二、指针声明与初始化三、指针操作符1. &:取地址(拿到内存地址)2. *:解引用(拿到值) 四、空指针&am…...
Ubuntu Cursor升级成v1.0
0. 当前版本低 使用当前 Cursor v0.50时 GitHub Copilot Chat 打不开,快捷键也不好用,当看到 Cursor 升级后,还是蛮高兴的 1. 下载 Cursor 下载地址:https://www.cursor.com/cn/downloads 点击下载 Linux (x64) ,…...


