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-deploy
  name: nginx-deploy    # deployment的名字
  namespace: default
spec:
  replicas: 3  #副本数量
  revisionHistoryLimit: 10  #进行滚动更新后保留的副本数量
  selector: #选择器,用于找到匹配的rs
    matchLabels:
      app: nginx-deploy
  strategy: #更新策略
    rollingUpdate:  #滚动更新策略
      maxSurge: 25%		# 后面的滚动更新中会详细介绍
      maxUnavailable: 25%	# 后面的滚动更新中会详细介绍
    type: RollingUpdate
  template:
    metadata:
      creationTimestamp: null
      labels:
        app: nginx-deploy
    spec:
      containers:
      - image: nginx:1.7.9
        imagePullPolicy: IfNotPresent #拉取策略
        name: nginx
        resources:
          limits:
            cpu: 50m
            memory: 128Mi
          requests:
            cpu: 50m
            memory: 128Mi
        terminationMessagePath: /dev/termination-log
        terminationMessagePolicy: File
      restartPolicy: 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数量达到要求就完成了回退。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Docker Harbor概述及构建

Docker Harbor概述及构建 一、Docker Harbor 概述1.1、harbor 简介1.2、Harbor的优势1.3、Harbor 的核心组件1.4、Docker私有仓库 架构 二、Harbor构建Docker私有仓库2.1 环境配置2.2、部署Harbor服务2.2.1、上传dock-compose,并设置权限2.2.2、安装harbor-offline-…

数据结构—线性表(下)

文章目录 6.线性表(下)(4).栈与队列的定义和ADT#1.ADT#2.栈的基本实现#3.队列的形式#4.队列的几种实现 (5).栈与队列的应用#1.栈的应用i.后缀表达式求值ii.中缀表达式转后缀表达式 #2.队列的应用 (6).线性表的其他存储方式#1.索引存储#2.哈希存储i.什么是哈希存储ii.碰撞了怎么…

创新领航 | 竹云参编《基于区块链的数据资产评估实施指南》正式发布!

10月25日,由深圳数宝数据服务股份有限公司和深圳职业技术大学提出,中国科学院深圳先进技术研究院、中国电子技术标准化研究院、中国(天津)自由贸易试验区政策与产业创新发展局、网络空间治理与数字经济法治(长三角&…

前端 : 用HTML ,CSS ,JS 做一个点名器

1.HTML&#xff1a; <body><div id "content"><div id"top"><div id "name">XAiot2302班点名器</div></div><div id "center"><div id "word">你准备好了吗?</di…

前端Vue框架系列—— 学习笔记总结Day03

❤ 作者主页&#xff1a;欢迎来到我的技术博客&#x1f60e; ❀ 个人介绍&#xff1a;大家好&#xff0c;本人热衷于Java后端开发&#xff0c;欢迎来交流学习哦&#xff01;(&#xffe3;▽&#xffe3;)~* &#x1f34a; 如果文章对您有帮助&#xff0c;记得关注、点赞、收藏、…

基于android的 rk3399 同时支持多个USB摄像头

基于android的 rk3399 同时支持多个USB摄像头 一、前文二、CameraHal_Module.h三、CameraHal_Module.cpp四、编译&烧录Image五、App验证 一、前文 Android系统默认支持2个摄像头&#xff0c;一个前置摄像头&#xff0c;一个后置摄像头 需要支持数量更多的摄像头&#xff0…

【计算机网络】什么是HTTPS?HTTPS为什么是安全的?

【面试经典题】 前言&#xff1a; HTTP最初的设计就是用于数据的共享和传输&#xff0c;并没有考虑到数据的安全性&#xff0c;如窃听风险&#xff0c;篡改风险和冒充风险。HTTPS是在 HTTP 的基础上引入了一个加密层。HTTPS通过数据加密&#xff0c;数据完整性检验和身份认证…

“破解我!“---160个CrackMe练习001-Acid buen.exe

文章目录 前言题目分析破解过程Serial/Name验证方式爆破注册机 追码 Serial验证 前言 想开个系列&#xff0c;160个Crackme的练习&#xff0c;这个在52pojie上有个精华帖总结&#xff0c;写的特别好&#xff0c;推荐&#xff01;写这个系列主要还是记录一下自己的学习记录&…

26 行为型模式-命令模式

1 命令模式介绍 2 命令模式原理 3 命令模式实现 模拟酒店后厨的出餐流程,来对命令模式进行一个演示,命令模式角色的角色与案例中角色的对应关系如下: 服务员: 即调用者角色,由她来发起命令. 厨师: 接收者,真正执行命令的对象. 订单: 命令中包含订单 /*** 订单类**/ public cl…

✔ ★【备战实习(面经+项目+算法)】 10.29学习

✔ ★【备战实习&#xff08;面经项目算法&#xff09;】 坚持完成每天必做如何找到好工作1. 科学的学习方法&#xff08;专注&#xff01;效率&#xff01;记忆&#xff01;心流&#xff01;&#xff09;2. 每天认真完成必做项&#xff0c;踏实学习技术 认真完成每天必做&…

Android [SPI,AutoSerivce,ServiceLoader]

记录一下在Android中使用SPI的过程。 1.项目gralde文件。 plugins {id kotlin-kapt } dependencies {implementation com.google.auto.service:auto-service:1.0-rc7 kapt "com.google.auto.service:auto-service:1.0-rc7" } 这个AutoServ…

Visual Studio 2019部署桌面exe(笔记)

一、使用Visual Studio自带的Publish功能 上述两张图片一般会自动加载&#xff0c;只需要查看一下即可。 签名问题&#xff1a; 生成exe执行文件 双击setup.exe 桌面生成&#xff08;默认图标&#xff09; 换图标&#xff1a; 对应桌面生成的exe

网络安全(黑客)—小白自学

1.网络安全是什么 网络安全可以基于攻击和防御视角来分类&#xff0c;我们经常听到的 “红队”、“渗透测试” 等就是研究攻击技术&#xff0c;而“蓝队”、“安全运营”、“安全运维”则研究防御技术。 2.网络安全市场 一、是市场需求量高&#xff1b; 二、则是发展相对成熟…

ES性能优化最佳实践- 检索性能提升30倍!

Elasticsearch是被广泛使用的搜索引擎技术&#xff0c;它的应用领域远不止搜索引擎&#xff0c;还包括日志分析、实时数据监控、内容推荐、电子商务平台、企业级搜索解决方案以及许多其他领域。其强大的全文搜索、实时索引、分布式性能和丰富的插件生态系统使其成为了许多不同行…

RTE(Runtime Environment)

RTE&#xff08;Runtime Environment&#xff09;是一个运行时环境&#xff0c;在这个环境里&#xff0c;你可以实现的功能是&#xff1a; 作为一个缓冲buffer给应用层和BSW层的接口&#xff08;例如COM&#xff09;用来存储数据&#xff0c;也就是说定义一个全局变量供上层和下…

SAP业务从ECC升级到SAP S/4HANA有哪些变化?有哪些功能得到增强?

SAP在2015年推出了新一代商务套件SAP S/4 HANA。 SAP S/4 HANA (全称SAP Business suite 4 SAP HANA),这款新产品完全构建于目前先进的内存平台SAP HANA 之上&#xff0c;同时采用现代设计理念&#xff0c;通过SAP Fiori 提供精彩的用户体验 (UX)。提供比ECC更强大的功能。S/4h…

[SpringCloud] Nacos 简介

目录 一、Nacos&#xff0c;启动&#xff01; 1、安装 Nacos 2、运行 Nacos 3、Nacos 服务注册 二、Nacos 服务多级存储模型 1、服务跨集群分配 2、NacosRule 负载均衡&#xff08;优先本地&#xff09; 3、服务实例的权重设置 4、环境隔离 三、Nacos 注册中心细节分…

[毕设记录]@开题调研:一些产品

我感觉产品能代表落地的一些实际应用&#xff0c;会和研究的角度有些差别&#xff0c;但是需求和兴趣往往是从现实中来的&#xff0c;在上一篇blog里面看外国blog的时候顺着搜搜到了很多国外的智慧校园chatbot解决方案 文章目录 Comm100streebomodern campusUniBuddy Comm100 …

私有云:【9】Connection配置

私有云&#xff1a;【9】Connection配置 1、关闭IE增强配置2、Connection配置2.1、登录connection管理台配置许可证2.2、添加VCenter主机2.3、配置Composer 1、关闭IE增强配置 关闭此项 全部关闭 2、Connection配置 2.1、登录connection管理台配置许可证 上一章connection…

Lua脚本语言

1. 概念 Lua&#xff08;发音为"loo-ah"&#xff0c;葡萄牙语中的"lua"意为月亮&#xff09;是一种轻量级的、高效的、可嵌入的脚本编程语言。官网Lua最初由巴西计算机科学家Roberto Ierusalimschy、Waldemar Celes和Luiz Henrique de Figueiredo于1993年开…