k8s replicaSet,deployment 学习笔记

news2024/12/23 18:05:17

文章目录

  • 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数量达到要求就完成了回退。

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

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

相关文章

【送书福利-第二十二期】《Vue.js 3企业级项目开发实战(微课视频版)》

😎 作者介绍:我是程序员洲洲,一个热爱写作的非著名程序员。CSDN全栈优质领域创作者、华为云博客社区云享专家、阿里云博客社区专家博主、前后端开发、人工智能研究生。公粽号:程序员洲洲。 🎈 本文专栏:本文…

电路器件认识与KV STUDIO的实践(二)

当当当当,下班了,下面来记录一下小编学习到的电气知识与plc的应用吧!!! 目录 电路元器件的认识 断路器(作用是过载保护、短路保护、地线故障保护和手动控制) 漏电断路器(当漏电电…

H5游戏源码分享-考眼力游戏猜猜金币在哪

H5游戏源码分享-考眼力游戏猜猜金币在哪 <!DOCTYPE html> <html> <head><meta http-equiv"Content-Type" content"text/html; charsetUTF-8"><meta charset"UTF-8"><meta name"apple-mobile-web-app-capa…

vue3后台管理系统之跨域代理

vite.config.js中 server: {port: 5002,host: true, //0.0.0.0open: false,strictPort: true,proxy: {// 请求前缀/api&#xff0c;只有加了/api前缀的请求才会走代理(前端自定义)/api: {target: http://127.0.0.1:8000,// 获取服务器地址的设置changeOrigin: true,// 路径重写…

LeetCode热题100 240.搜索二维矩阵||

题目描述&#xff1a; 编写一个高效的算法来搜索 m*n 矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性&#xff1a; 每行的元素从左到右升序排列。每列的元素从上到下升序排列。 示例1&#xff1a; 输入&#xff1a;matrix [[1,4,7,11,15],[2,5,8,12,19],[3,6,9,16,2…

java项目之时间管理系统(ssm框架)

项目简介 时间管理系统实现了以下功能&#xff1a; 管理员&#xff1a;个人中心、用户管理、分类列表管理、在线学习管理、励志视频管理、活动项目管理、活动报名管理、目标制定管理、论坛管理、系统管理。用户&#xff1a;注册、个人中心、活动报名管理、目标制定管理、我的…

SonarLint安装与简介

简介&#xff1a; SonarLint 是SonarQube官方推出的可以在idea 静态扫描插件&#xff0c;可以同步sonarqube的规则&#xff0c;在开发编译的时候发现问题&#xff0c;可以有效减少在流水线扫描返工的次数 安装 idea 选择setttings &#xff0c;搜索sonarlint插件&#xff0c…

“第五十四天” 溢出判断,标志位 ,有问题

之前说过在运算的时候可能发生溢出&#xff0c;这种情况只会出现在 正正相加 &#xff0c;负负相加 的时候才会出现前者是上溢&#xff0c;正正加得负&#xff0c;后者是下溢&#xff0c;负负加得正。&#xff08;减法变成加法&#xff0c;再看&#xff09; 加减运算&溢出…

【Luckfox pico入门记录(二)】ubuntu22.04系统烧录

写在前面 最近在看智能手表的选型&#xff0c;但是作为一个小白的我&#xff0c;发现要么核心板太大了&#xff0c;不适合作为手表(大多数核心板的面积都在4*4以上&#xff0c;而且很少带有WIFI芯片&#xff0c;即使带有WIFI芯片也不是PCB天线而是那种立着的天线。而Luckfox因为…

考点之数据结构

概论 时间复杂度和空间复杂度是计算机科学中用来评估算法性能的重要指标。 时间复杂度&#xff1a; 时间复杂度衡量的是算法运行所需的时间。它表示算法执行所需的基本操作数量随着输入大小的增长而变化的趋势。 求法&#xff1a; 通常通过分析算法中基本操作执行的次数来…

简单方法搭建个人网站

随着互联网的发展&#xff0c;越来越多的人希望拥有一个属于自己的网站&#xff0c;用来展示自己的个人才华、推广自己的产品或服务。但是&#xff0c;很多人都因为没有编程知识而望而却步。现在&#xff0c;有一个简单的方法可以帮助你轻松搭建网站&#xff0c;无需编程知识。…

并发编程

什么是并发编程&#xff1f; 并行&#xff1a;在同一个时间节点上&#xff0c;多个线程同时执行(是真正意义上的同时执行) 并发&#xff1a;一个时间段内&#xff0c;多个线程依次执行。 并发编程&#xff1a;在例如买票、抢购、秒杀等等场景下&#xff0c;有大量的请求访问…

「常识」浮点数和定点数

浮点数和定点数 本篇文章旨在简短的介绍浮点数、定点数的定义&#xff0c;以及一些常见的数制、补码。 一、常识 如果缺少以下常识的话&#xff0c;将很难理解浮点数和定点数的概念。 1、数 自然数整数/分数小数&#xff1a;有限小数、无限循环小数、无限不循环小数实数&a…

独创改进 | RT-DETR 引入 Asymptotic Hybrid Encoder | 渐进混合特征解码结构

本专栏内容均为博主独家全网首发,未经授权,任何形式的复制、转载、洗稿或传播行为均属违法侵权行为,一经发现将采取法律手段维护合法权益。我们对所有未经授权传播行为保留追究责任的权利。请尊重原创,支持创作者的努力,共同维护网络知识产权。 文章目录 网络结构实验结果…

97. 交错字符串

题目链接&#xff1a;力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 解题思路&#xff1a;动态规划。 如果s1.length()s2.length ! s3.length()&#xff0c;直接返回false&#xff0c;否则使用动态规划求解。定义状态&#xff1a;dp[i][i]&#xff…

在CPU上运行yolov5

https://blog.csdn.net/weixin_54721509/article/details/122983561 前提是安装好了 python和 opencv基本环境 &#xff0c;如果没按转可以参考&#xff1a;https://blog.csdn.net/yangshengwei230612/article/details/127606771 安装pytorch 进入pytorch官网 https://pytor…

No175.精选前端面试题,享受每天的挑战和学习

🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云课上架的前后端实战课程《Vue.js 和 Egg.js 开发企业级健康管理项目》、《带你从入…

SOLIDWORKS PDM 2024数据管理5大新功能

1. 改进的视觉内容 • 通过装配体可视化功能&#xff0c;在 SOLIDWORKS 中以图形方式查看零部件数据&#xff0c;如工作流程状态。• 使用特定图标迅速识别焊件切割清单零部件。 优点&#xff1a;重要数据和系统信息一目了然。 2.增强的数据保护和跟踪功能 •保护“包含”和…

D-LINK SQL注入漏洞让攻击者获得管理员权限

D-Link DAR-7000 设备中发现了一个名为 SQL 注入的安全漏洞。 SQL注入是一种恶意攻击&#xff0c;它利用Web应用程序中的漏洞注入恶意SQL语句并获得对数据库的未经授权的访问。 此技术允许攻击者查看、修改和删除数据库中的数据&#xff0c;这可能对数据的机密性、完整性和可…

leetcode经典面试150题---4.删除有序数组中的重复项II

目录 题目描述 前置知识 代码 方法一 双指针 思路 图解 实现 复杂度 题目描述 给你一个有序数组 nums &#xff0c;请你 原地 删除重复出现的元素&#xff0c;使得出现次数超过两次的元素只出现两次 &#xff0c;返回删除后数组的新长度。 不要使用额外的数组空间&…