【Kubernetes】使用Deployment进行的资源调度,资源清理,伸缩与更新管控

Kubernetes Deployment 实战:从资源清理到伸缩与更新管控

一、基础准备:清理闲置 ReplicaSet

在使用 Deployment 时,每次更新都会生成新的 ReplicaSet(简称 RS),旧的 RS 会被保留但设置为 DESIRED=0。这些闲置 RS 虽然不占用运行资源,但会让集群资源列表变得混乱,建议定期清理。

场景

通过 kubectl get rs 查看发现,除了正在运行的 nginx-deploy-6b7b64468(管理 3 个 Pod),还有多个闲置 RS:

# 清理前的 RS 列表
NAME                      DESIRED   CURRENT   READY   AGE
nginx-deploy-5c545b9dd5   0         0         0       42m
nginx-deploy-665f4b5c77   0         0         0       5h1m
nginx-deploy-6b7b64468    3         3         3       121m
nginx-deploy-77cddcb87f   0         0         0       137m

清理操作

直接删除闲置 RS 即可,不会影响当前运行的 Pod(当前 Pod 由 nginx-deploy-6b7b64468 管理):

kubectl delete rs nginx-deploy-5c545b9dd5 nginx-deploy-665f4b5c77 nginx-deploy-77cddcb87f

清理后效果

资源列表变得简洁,仅保留活跃 RS:

NAME                     DESIRED   CURRENT   READY   AGE
nginx-deploy-6b7b64468   3         3         3       124m

二、高效伸缩:用 kubectl scale 替代手动编辑

Deployment 的核心功能之一是动态调整副本数(replicas)。传统的 kubectl edit deploy 需要手动修改配置文件,效率较低;而 kubectl scale 可以一键完成伸缩,更适合高频操作。

核心命令

# 扩容:将 nginx-deploy 的副本数调整为 6
kubectl scale --replicas=6 deploy nginx-deploy# 缩容:将 nginx-deploy 的副本数调整为 3
kubectl scale --replicas=3 deploy nginx-deploy

操作验证

  1. 扩容效果:执行扩容命令后,新 Pod 会立即创建(AGE 为几秒),Deployment 和 RS 的副本数同步更新:

    # 扩容后 Pod 列表(新增 3 个 Pod)
    nginx-deploy-6b7b64468-2sncq   1/1     Running   0               2s
    nginx-deploy-6b7b64468-8vc5m   1/1     Running   0               2s
    nginx-deploy-6b7b64468-nptv5   1/1     Running   0               2s# 扩容后 Deployment 状态
    NAME           READY   UP-TO-DATE   AVAILABLE   AGE
    nginx-deploy   6/6     6            6           5h6m
    
  2. 缩容效果:执行缩容命令后,多余的 Pod 会被自动删除,最终保留 3 个运行中的 Pod:

    # 缩容后 Pod 列表(仅保留原 3 个 Pod)
    nginx-deploy-6b7b64468-h55t4   1/1     Running   0               128m
    nginx-deploy-6b7b64468-kh4wm   1/1     Running   0               124m
    nginx-deploy-6b7b64468-lq844   1/1     Running   0               127m
    

三、安全更新:Deployment 暂停与重启机制

在更新 Deployment 配置(如镜像版本、资源限制)时,可能需要分步骤验证。通过 kubectl rollout pause 暂停更新,可避免配置错误直接生效;验证无误后用 kubectl rollout resume 恢复更新,大幅降低风险。

操作流程

1. 暂停 Deployment 更新
kubectl rollout pause deploy nginx-deploy

暂停后,即使通过 kubectl edit deploy 修改配置,也不会触发新 RS 创建和旧 Pod 替换。

2. 修改配置并验证

例如,编辑 Deployment 增加资源限制(limits.cpu=500m):

kubectl edit deploy nginx-deploy

此时查看 RS 列表,发现没有新 RS 生成(仍为原 RS),说明暂停生效:

NAME                      DESIRED   CURRENT   READY   AGE
nginx-deploy-57b68466d4   3         3         3       4m21s  # 无新 RS
3. 恢复更新并验证

确认配置无误后,恢复 Deployment 更新:

kubectl rollout resume deploy nginx-deploy

恢复后,新 RS 会被创建,旧 RS 会逐步缩容,最终完成更新:

# 恢复后 RS 列表(新 RS 已创建并运行 3 个 Pod)
NAME                      DESIRED   CURRENT   READY   AGE
nginx-deploy-57b68466d4   0         0         0       6m28s  # 旧 RS 被缩容
nginx-deploy-6c6766f6d6   3         3         3       5s     # 新 RS 生效

四、版本管理:查看更新历史与回滚

Deployment 会自动记录每一次更新(称为“修订版本”),通过 kubectl rollout history 可查看历史记录,必要时可回滚到指定版本(即使更新已完成)。

在暂停后,修改完yaml,可以通过查看版本历史,发现没有新的版本出现来印证暂停效果

核心命令

  1. 查看更新历史

    kubectl rollout history deploy nginx-deploy
    

    输出示例(REVISION 为修订版本号):

    REVISION  CHANGE-CAUSE
    5         <none>
    6         <none>
    7         <none>
    
  2. 查看指定版本详情

    kubectl rollout history deploy nginx-deploy --revision=7
    

    可查看该版本的 Pod 模板(如镜像、资源配置等)。

  3. 回滚到指定版本(若需回滚):

    kubectl rollout undo deploy nginx-deploy --to-revision=6
    

总结

场景推荐操作优势
清理闲置资源kubectl delete rs <闲置RS>保持集群资源列表简洁,避免资源冗余
动态调整副本数kubectl scale deploy <名称> --replicas=<数量>一键伸缩,比手动编辑更高效
安全更新配置pause → 修改 → resume分步验证配置,降低更新风险
版本管理与回滚rollout history/undo追踪更新记录,支持快速回滚到稳定版本

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

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

相关文章

stm32使用USB虚拟串口,因电脑缺少官方驱动而识别失败(全系列32单片机可用)

驱动下载地址 官网地址&#xff1a;https://www.st.com/en/development-tools/stsw-stm32102.html

枚举中间位置基础篇

参考资料来源灵神在力扣所发的题单&#xff0c;仅供分享学习笔记和记录&#xff0c;无商业用途。 核心思路&#xff1a; 一&#xff1a;直接直接用数据结构记录需要的数据&#xff0c;在枚举右&#xff0c;维护左的循环中&#xff0c;删除当前位置的元素即可达成一样效果 二…

企业选择将服务器放在IDC机房托管的优势

在服务器作为数据存储和传输的核心设备的社会环境中&#xff0c;服务器的稳定性和安全性会直接影响到企业业务的连续性和用户的满意程度&#xff0c;随着云计算技术和大数据的兴起&#xff0c;企业对于服务器的需求也在日益增加&#xff0c;而如何高效、安全的管理服务器则是各…

自动化UI测试工具TestComplete的AI双引擎:即时数据集 + 自愈测试

随着敏捷开发和持续交付模式的普及&#xff0c;传统的软件测试方法正面临着前所未有的挑战。测试团队在追求快速迭代的同时&#xff0c;往往陷入测试数据准备和测试维护的泥潭&#xff0c;严重制约了交付效率和质量保障能力。 TestComplete作为业界领先的自动化测试工具&#…

用KNN实现手写数字识别:基于 OpenCV 和 scikit-learn 的实战教学 (超级超级超级简单)

用KNN实现手写数字识别&#xff1a;基于 OpenCV 和 scikit-learn 的实战教学在这篇文章中&#xff0c;我们将使用 KNN&#xff08;K-Nearest Neighbors&#xff09;算法对手写数字进行分类识别。我们会用 OpenCV 读取图像并预处理数据&#xff0c;用 scikit-learn 构建并训练模…

数据结构自学Day15 -- 非比较排序--计数排序

一、计数排序&#xff08;Counting Sort&#xff09;计数排序是一种非比较型的排序算法&#xff0c;它的核心思想是&#xff1a;利用“元素的值”来确定它在结果数组中的位置&#xff0c;通过“统计每个数出现的次数”来完成排序。二、如何实现计数排序&#xff08;核心步骤&am…

k8s的权限

来自博客&#xff1a;25-k8s集群中-RBAC用户角色资源权限_权限 资源 角色-CSDN博客 一.RBAC概述&#xff08;基于角色的访问控制&#xff09; 1.图解 用户&#xff1a; 1.user 2.serviceAccount 3.Group 用户角色 1.Role:局部资源角色 2.clusterRole:全局资源角色额 角色绑…

C++ - 仿 RabbitMQ 实现消息队列--服务端核心模块实现(三)

目录 队列数据管理 代码实现 测试代码 绑定信息(交换机-队列)管理 代码实现 测试代码 队列数据管理 当前队列数据的管理&#xff0c;本质上是队列描述信息的管理&#xff0c;描述当前服务器上有哪些队列。 定义队列描述数据类 队列名称是否持久化标志是否独占标志是否自…

51c自动驾驶~合集9

自己的原文哦~ https://blog.51cto.com/whaosoft/11627386 #端到端1 说起端到端&#xff0c;每个从业者可能都觉得会是下一代自动驾驶量产方案绕不开的点&#xff01;特斯拉率先吹响了方案更新的号角&#xff0c;无论是完全端到端&#xff0c;还是专注于planner的模…

时间长了忘记jupyter的环境是哪个了

有这些但是忘记是哪个了jupyter kernelspec list查看内核路径&#xff0c;这个内核是用来告诉jupyter 去哪找内核配置的到这个路径下打开json文件查看使用的python环境从而确定是哪个conda环境为jupyter使用的python环境jupyter的工作原理&#xff1a;在创建conda环境后会安装j…

PYTHON从入门到实践-15数据可视化

数据可视化是数据分析中不可或缺的一环&#xff0c;它能够将抽象的数据转化为直观的图形&#xff0c;帮助我们更好地理解数据特征和发现潜在规律。本文将介绍如何使用Python中的Matplotlib和Plotly库进行数据可视化&#xff0c;并通过掷骰子的概率模拟案例展示可视化的实际应用…

Spring IOC 容器 **默认注册 Bean** 的 8 条规则

Spring IOC 容器 默认注册 Bean 的 8 条规则 &#xff08;Spring Framework 6.x 源码级总结&#xff09;阅读提示&#xff1a;把下面 8 条规则背下来&#xff0c;再读 Spring 源码时&#xff0c;你会在任何一行代码里立刻知道「这个 BeanDefinition 是从哪儿来的」。1️⃣ 环境…

29.【.NET8 实战--孢子记账--从单体到微服务--转向微服务】--单体转微服务--用户配置服务

用户配置服务是孢子记账中最简单的部分。简单说&#xff0c;用户配置服务就是用户自定义的配置项存储服务&#xff0c;用于我们的APP根据用户的配置实现指定的功能。它提供了一个简单的接口&#xff0c;允许用户存储和检索他们的配置数据。就目前来说&#xff0c;用户配置只有一…

Python实现PDF按页分割:灵活拆分文档的技术指南

Python实现PDF按页分割&#xff1a;灵活拆分文档的技术指南 PDF文件处理是日常工作中的常见需求&#xff0c;特别是当我们需要将大型PDF文档拆分为多个部分时。本文将介绍如何使用Python创建一个灵活的PDF分割工具&#xff0c;能够根据用户指定的页数范围任意分割文档。 需求分…

「iOS」——GCD其他方法详解

GCD学习GCD其他方法dispatch_semaphore &#xff08;信号量&#xff09;**什么是信号量**dispatch_semaphore主要作用dispatch_semaphore主要作用异步转同步设置一个最大开辟的线程数加锁机制dispatch_time_t 两种形式GCD一次性代码(只执行一次)dispatch_barrier_async/sync栅栏…

【图像处理基石】如何实现一个车辆检测算法?

基于AI的车牌检测和识别算法 问题描述、应用场景与难点 问题描述 车牌检测和识别是计算机视觉领域的一个特定任务&#xff0c;主要包含两个核心步骤&#xff1a; 车牌检测&#xff1a;从图像中准确定位车牌的位置和区域车牌识别&#xff1a;对检测到的车牌区域进行字符识别&…

计算机学报 2025年 区块链论文 录用汇总 附pdf下载

计算机学报 Year&#xff1a;2025 2024请看 1 Title: 基于区块链的动态多云多副本数据完整性审计方法研究 Authors: Key words: 区块链&#xff1b;云存储&#xff1b;多云多副本存储&#xff1b;数据完整性审计 Abstract: 随着云计算技术的快速发展和云存储服务的日益…

计算机网络-UDP协议

UDP&#xff08;用户数据报协议&#xff09;是传输层的一种无连接、不可靠、轻量级的协议&#xff0c;适用于对实时性要求高、能容忍少量数据丢失的场景&#xff08;如视频流、DNS查询等&#xff09;。以下是UDP的详细解析&#xff1a;1. UDP的核心特点特性说明无连接通信前无需…

子域名收集和c段查询

子域名收集方法一、sitesite&#xff1a; 要查询的域名可以查到相关网站二、oneforall &#xff08;子域名查找工具&#xff09;下载后解压的文件夹在当前文件夹打开终端然后运行命令 python oneforall.py --target xxxxxxxx&#xff08;这里放你要查的网址&#xff09; run最…

计网-TCP拥塞控制

TCP的拥塞控制&#xff08;Congestion Control&#xff09;是核心机制之一&#xff0c;用于动态调整发送方的数据传输速率&#xff0c;避免网络因过载而出现性能急剧下降&#xff08;如丢包、延迟激增&#xff09;。其核心思想是探测网络可用带宽&#xff0c;并在拥塞发生时主动…