k8s replicaSet,deployment 学习笔记

文章目录

  • replicaSet 和 deployment 两者的关系。
  • 创建
  • 滚动更新
  • 回滚

replicaSet 和 deployment 两者的关系。

在 Kubernetes 中,ReplicaSetDeployment 都是用来确保某种 Pod 的副本数目。但是,ReplicaSetDeployment 是有差别的,二者的关系可以粗略地理解为 DeploymentReplicaSet 的进一步封装。

  1. ReplicaSet 是为了确保任意时刻都有特定数量的 Pod 副本在运行。换句话说,如果有 Pod 出现故障被删除,ReplicaSet 会自动创建新的 Pod 来替代。但 ReplicaSet 本身并不支持滚动更新,如果要更新 Pod,就需要手动删除老的 Pod,然后 ReplicaSet 会自动创建新的 Pod。

  2. 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
在这里插入图片描述

滚动更新

maxSurgemaxUnavailable 是 Kubernetes 的 Deployment 对象中用于控制滚动更新策略的两个参数。
这两个参数的合理配置可以确保滚动更新过程中服务的连续性和资源的高效利用。

  1. maxSurge:这个参数表示滚动更新过程中,新副本 Pod 能超过原始 replicas 数量的最大值。例如,如果 replicas 为3,maxSurge 为1,那么滚动更新过程中最多可以有4个 Pod 同时运行。这个参数可以是绝对数量(例如,1),也可以是相对于 replicas 的百分比(例如,10%)。值得注意的是,当你设置的 maxSurgemaxUnavailable 都为0时,Kubernetes将不会允许这样的配置,因为这样就无法完成滚动更新。

  2. maxUnavailable:这个参数表示滚动更新过程中,可以同时不可用的老副本 Pod 个数的最大值。例如,如果 replicas 为3,maxUnavailable 为1,那么滚动更新过程中,最多可以有1个老的 Pod 不可用。这个参数也可以是绝对数量或者相对于 replicas 的百分比。同样,如果 maxSurgemaxUnavailable 都设为0,Kubernetes 是不会接受的。

滚动更新流程
这个滚动更新的过程确保了服务在更新过程中的不中断,提供了零停机时间的更新体验。同时,通过灵活设置 maxSurgemaxUnavailable 参数,我们可以平衡服务的稳定性和资源的利用率。

  1. 当你更新了 Deployment 的配置(例如,更改了 Pod 的 Docker 镜像)后,Deployment 会创建一个新的 ReplicaSet 并将 maxSurge 参数设定的额外 Pods 数量添加到新的 ReplicaSet 中。这意味着新的 Pod 已经启动并准备接受请求。
  2. 一旦这些新的 Pod 就绪并开始运行,Deployment 会按照你设置的 maxUnavailable 参数的值,停止相应数量的旧的 Pods。这些被停止的 Pods 被新的 Pods 替代。这个终止和启动 Pods 的过程被称为 “滚动更新”。
  3. 如果在更新过程中新的 Pod 出现问题,Deployment 将停止创建新的 Pod 并开始回滚。这意味着,它会停止新的 Pods,并开始回滚到旧的 ReplicaSet。
  4. 如果新的 Pod 正常运行,Deployment 会继续停止更多的旧的 Pods,启动新的 Pods,直至所有的旧的 Pods 都被新的 Pods 替代。此时,更新完成。

注意,Deployment 还记录了所有的旧的 ReplicaSet(即历史版本),以便于在必要时回滚到旧的版本。

  1. kb edit deploy nginx-deploy,修改镜像。
    在这里插入图片描述

  2. kb describe deploy nginx-deploy,查看deploy更新event事件。
    在这里插入图片描述

  3. 查看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。

  1. 查看历史版本。
    在这里插入图片描述

  2. 查看指定版本的信息。
    在这里插入图片描述

  3. 回退之前先看看当前的deploy信息,kb describe deploy nginx-deploy
    在这里插入图片描述

  4. 版本1就是我们需要回退的目标版本,回退到版本1。
    在这里插入图片描述

  5. kb describe deploy nginx-deploy;查看回退之后的deploy信息。
    在这里插入图片描述

  6. 可以看到回退是直接使用之前滚动更新时停用的rs。整个回退过程也是遵循滚动更新的规范,先开一个新的pod再关一个旧的pod,直到pod数量达到要求就完成了回退。

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

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

相关文章

C++标准模板(STL)- 类型支持 (类型特性,is_pointer,is_lvalue_reference,is_rvalue_reference)

类型特性 类型特性定义一个编译时基于模板的结构&#xff0c;以查询或修改类型的属性。 试图特化定义于 <type_traits> 头文件的模板导致未定义行为&#xff0c;除了 std::common_type 可依照其所描述特化。 定义于<type_traits>头文件的模板可以用不完整类型实…

【JVM】类的声明周期(加载、连接、初始化)

&#x1f40c;个人主页&#xff1a; &#x1f40c; 叶落闲庭 &#x1f4a8;我的专栏&#xff1a;&#x1f4a8; c语言 数据结构 javaEE 操作系统 Redis 石可破也&#xff0c;而不可夺坚&#xff1b;丹可磨也&#xff0c;而不可夺赤。 JVM 一、类的声明周期&#xff08;加载阶段…

HTML5+CSS3+Vue小实例:路飞出海的动画特效

实例:路飞出海的动画特效 技术栈:HTML+CSS+Vue 效果: 源码: 【HTML】 <!DOCTYPE html> <html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"><meta name="viewport" content=&…

第N个斐波那契数列

第N个斐波那契数列 力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 class Solution { public:int tribonacci(int n) {int a[4]{0,1,1,2};if(n<4) return a[n];int kn-3;for(int i0; i<k;i){int tmpa[3];a[3]a[1]a[2]a[3];//不是【0】开始&…

Python对象(Object)与类型(Type)的关系

Object与Type 1、Object与Type概述2、Object与Type的关系 1、Object与Type概述 对象&#xff08;Object&#xff09;和类型&#xff08;Type&#xff09;是Python中两个最最基本的概念&#xff0c;它们是构筑Python语言大厦的基石 所有的数据类型&#xff0c;值&#xff0c;变…

代码随想录Day40-单调栈:力扣第496e、503m、42h、84h题

496e. 下一个更大元素 I 题目链接 代码随想录文章讲解链接 方法一&#xff1a;单调栈哈希表 用时&#xff1a;13m52s 思路 维护一个栈底到栈顶是单调递减的栈&#xff0c;从后往前遍历数组nums2&#xff0c;更新栈。nums2当前元素nums2[i]的下一个更大元素就是栈顶元素&am…

【网络安全 --- 文件上传靶场练习】文件上传靶场安装以及1-5关闯关思路及技巧,源码分析

一&#xff0c;前期准备环境和工具 1&#xff0c;vmware 16.0安装 若已安装&#xff0c;请忽略 【网络安全 --- 工具安装】VMware 16.0 详细安装过程&#xff08;提供资源&#xff09;-CSDN博客文章浏览阅读186次&#xff0c;点赞9次&#xff0c;收藏2次。【网络安全 --- 工…

Kubernetes - Ingress HTTP 升级 HTTPS 配置解决方案(新版本v1.21+)

之前我们讲解过 Kubernetes - Ingress HTTP 搭建解决方案&#xff0c;并分别提供了旧版本和新版本。如果连 HTTP 都没搞明白的可以先去过一下这两篇 Kubernetes - Ingress HTTP 负载搭建部署解决方案_放羊的牧码的博客-CSDN博客Kubernetes - Ingress HTTP 负载搭建部署解决方案…

【Go入门】GO流程与函数介绍(代码运行逻辑控制)

流程和函数 这小节我们要介绍Go里面的流程控制以及函数操作。 流程控制 流程控制在编程语言中是最伟大的发明了&#xff0c;因为有了它&#xff0c;你可以通过很简单的流程描述来表达很复杂的逻辑。Go中流程控制分三大类&#xff1a;条件判断&#xff0c;循环控制和无条件跳…

Mac/Linux类虚拟机_CrossOver虚拟机CrossOver 23.6正式发布2024全新功能解析

CodeWeivers 公司于今年 10 月发布了 CrossOver 23.6 测试版&#xff0c;重点添加了对 DirectX 12 支持&#xff0c;从而在 Mac 上更好地模拟运行 Windows 游戏。 该公司今天发布新闻稿&#xff0c;表示正式发布 CrossOver 23 稳定版&#xff0c;在诸多新增功能中&#xff0c;最…

Mybatis-Plus通用枚举功能 [MyBatis-Plus系列] - 第493篇

历史文章&#xff08;文章累计490&#xff09; 《国内最全的Spring Boot系列之一》 《国内最全的Spring Boot系列之二》 《国内最全的Spring Boot系列之三》 《国内最全的Spring Boot系列之四》 《国内最全的Spring Boot系列之五》 《国内最全的Spring Boot系列之六》 S…

GB/T 24718-2023 防眩板检测

防眩板是为解决对向车灯眩光&#xff0c;生产制造的安装在高速公路中央分隔带上的一种交通安全产品&#xff0c;多设置于高速公路中央分隔带护栏上或护栏中间&#xff0c;也有一些设置在中央开口活动护栏上&#xff0c;从材质上分钢制防眩板、塑料防眩板、玻璃钢防眩板。 GB/T…

NOIP2023模拟6联测27 点餐

题目大意 有 n n n样菜品&#xff0c;每样菜品都有两个权值 a i a_i ai​和 b i b_i bi​&#xff0c;如果你选择了 k k k个菜品&#xff0c;分别为 p 1 , … , p k p_1,\dots,p_k p1​,…,pk​&#xff0c;则你的花费为 ∑ i 1 k a p i max ⁡ i 1 k b p i \sum\limits_{i…

3D LUT 滤镜 shader 源码分析

最近在做滤镜相关的渲染学习&#xff0c;目前大部分 LUT 滤镜代码实现都是参考由 GPUImage 提供的 LookupFilter 的逻辑&#xff0c;整个代码实现不多。参考网上的博文也有各种解释&#xff0c;参考了大量博文之后终于理解了&#xff0c;所以自己重新整理了一份&#xff0c;方便…

【无标题】Linux VMware安装centos之后设置静态IP

查看本地IP&#xff1a;ip addr;修改启动协议BOOTPROTOstatic&#xff1b;手动配置IP地址&#xff1b;vi /etc/sysconfig/network-scripts/ifcfg-ens33在最下面增加如下配置 # IP地址 &#xff08;根据自己的环境修改&#xff09; IPADDR192.168.8.101 # 子网掩码 NETMASK255.…

JMeter的使用——傻瓜式学习【中】

目录 前言 1、JMeter参数化 1.1、什么是参数化 1.2、用户定义的变量 1.2.1、什么时候使用用户定义的变量 1.2.2、使用“用户定义的变量”进行参数化的步骤&#xff1a; 1.2.3、案例 1.3、用户参数 1.3.1、什么时候使用用户参数&#xff1f; 1.3.2、使用“用户参数”进…

C现代方法(第15章)笔记——编写大型程序

文章目录 第15章 编写大型程序15.1 源文件15.2 头文件15.2.1 #include指令15.2.2 共享宏定义和类型定义15.2.3 共享函数原型15.2.4 共享变量声明15.2.5 嵌套包含15.2.6 保护头文件15.2.7 头文件中的#error指令 15.3 把程序划分成多个文件15.4 构建多文件程序15.4.1 makefile15.…

10、设置视图组件的Head页面头部标签信息

export default {name: "IndexPage",head() {return {title: "中华小英雄电影第二部",bodyAttrs: {style: "background-color: red;",},meta: [// hid覆盖同名的meta信息{ hid: "description", name: "这是一个关于上学励志教育故…

JSON和Protobuf序列化

文章目录 一、粘包和拆包1、半包问题2、半包现象原理 二、JSON协议通信1、通用类库2、JSON传输的编码器和解码器 三、Protobuf协议通信1、一个简单的proto文件的实践案例2、生成POJO和Builder3、消息POJO和Builder的使用案例1&#xff09;构造POJO消息对象2&#xff09;序列化和…

LeetCode 面试题 16.06. 最小差

文章目录 一、题目二、C# 题解 一、题目 给定两个整数数组 a 和 b&#xff0c;计算具有最小差绝对值的一对数值&#xff08;每个数组中取一个值&#xff09;&#xff0c;并返回该对数值的差 示例&#xff1a; 输入&#xff1a;{1, 3, 15, 11, 2}, {23, 127, 235, 19, 8} 输出&…