完整教程:K8s学习笔记(十) Deployment 副本控制器

news/2025/10/3 21:46:12/文章来源:https://www.cnblogs.com/slgkaifa/p/19125047

完整教程:K8s学习笔记(十) Deployment 副本控制器

在 Kubernetes 中,Deployment 是一种声明式的工作负载资源,用于管理 Pod 和 ReplicaSet(副本集),并提供 Pod 的创建、更新、回滚等全生命周期管理能力。它的核心功能之一是通过 ReplicaSet(新一代 “副本控制器”)确保集群中始终运行指定数量的 Pod 副本,因此常被称为 “高级副本控制器”。

Deployment 与副本控制器的关系

Kubernetes 中负责维持 Pod 副本数量的 “副本控制器” 经历了两个阶段:

  • Replication Controller(RC,旧版):最早的副本控制器,通过标签选择器管理 Pod,确保副本数量与期望一致。
  • ReplicaSet(RS,新版):替代 RC 的新一代副本控制器,功能与 RC 类似,但支持更灵活的标签选择器(如集合式选择器),是 Deployment 的 “底层执行者”。

Deployment 并不直接管理 Pod,而是通过管理 ReplicaSet 来间接控制 Pod:

  • 用户定义 Deployment 的 “期望状态”(如副本数、Pod 模板、更新策略等);
  • Deployment 自动创建 / 更新 ReplicaSet,由 ReplicaSet 负责维持 Pod 的实际副本数与期望一致(如 Pod 故障时自动重建)。

Deployment 的核心功能

  1. 确保副本数量:通过 ReplicaSet 保证集群中始终运行指定数量的 Pod(replicas 字段),例如指定 3 个副本时,若某个 Pod 因节点故障终止,ReplicaSet 会立即新建一个 Pod 补充。
  2. 声明式更新 Pod:支持通过修改 Deployment 的 Pod 模板(如镜像版本)实现 Pod 的滚动更新,避免服务中断。例如:
    • 当更新镜像时,Deployment 会创建一个新的 ReplicaSet,逐步替换旧 ReplicaSet 中的 Pod(默认每次替换 25% 的旧 Pod);
    • 若更新失败,可快速回滚到之前的版本。
  3. 版本管理与回滚:Deployment 会记录每一次更新的历史版本(通过 ReplicaSet 的版本区分),支持查看历史记录并回滚到任意版本。
  4. 自愈能力:当 Pod 所在节点故障、Pod 被意外删除或健康检查失败时,ReplicaSet 会自动重建 Pod,确保服务可用性。

Deployment 的基本使用

1. 创建 Deployment

通过 YAML 配置文件定义 Deployment,示例如下(nginx-deployment.yaml):

apiVersion: apps/v1  # API版本(Deployment属于apps组)
kind: Deployment     # 资源类型
metadata:
name: nginx-deploy  # Deployment名称
spec:
replicas: 3         # 期望副本数(核心的副本控制参数)
selector:
matchLabels:      # 标签选择器(关联被管理的Pod)
app: nginx
template:           # Pod模板(定义Pod的规格)
metadata:
labels:
app: nginx    # 与selector.matchLabels一致
spec:
containers:
- name: nginx
image: nginx:1.21  # 容器镜像
ports:
- containerPort: 80
strategy:           # 更新策略(可选,默认RollingUpdate)
type: RollingUpdate
rollingUpdate:
maxSurge: 1      # 最多可超出期望副本数的数量(或百分比)
maxUnavailable: 0 # 更新过程中最多不可用的副本数(或百分比)

创建命令:

kubectl apply -f nginx-deployment.yaml
2. 查看 Deployment 与副本状态
# 查看Deployment
kubectl get deployments
# 输出示例:NAME           READY   UP-TO-DATE   AVAILABLE   AGE
#           nginx-deploy   3/3     3            3           5m
# 查看关联的ReplicaSet(名称格式:<deployment-name>-<随机字符串>)kubectl get replicasets# 输出示例:NAME                      DESIRED   CURRENT   READY   AGE#           nginx-deploy-7f89d65b9   3         3         3       5m# 查看Pod(标签会包含app:nginx,与Deployment的selector匹配)kubectl get pods --show-labels
3. 调整副本数量(动态扩缩容)
  • 临时调整:

    kubectl scale deployment nginx-deploy --replicas=5
  • 永久调整:修改 YAML 文件的replicas字段后执行kubectl apply -f <file>

4. 更新 Pod(如升级镜像)

修改 Deployment 的 Pod 模板(如镜像版本),触发滚动更新:

# 直接更新镜像
kubectl set image deployment/nginx-deploy nginx=nginx:1.23
# 或修改YAML后apply
kubectl apply -f nginx-deployment.yaml  # 假设已将image改为1.23

更新过程中,Deployment 会创建新的 ReplicaSet(如nginx-deploy-6b78c9d),逐步替换旧 ReplicaSet 的 Pod,确保服务不中断。

5. 查看更新历史与回滚
# 查看更新历史(每个版本对应一个ReplicaSet)
kubectl rollout history deployment nginx-deploy
# 回滚到上一个版本
kubectl rollout undo deployment nginx-deploy
# 回滚到指定版本(通过history中的REVISION指定)
kubectl rollout undo deployment nginx-deploy --to-revision=2

Deployment vs ReplicaSet vs Replication Controller

特性DeploymentReplicaSetReplication Controller(RC)
核心功能管理 ReplicaSet,支持更新 / 回滚维持 Pod 副本数量维持 Pod 副本数量
标签选择器支持集合式选择器支持集合式选择器仅支持等式选择器
更新策略内置滚动更新、重建策略无(需手动管理)无(需手动管理)
版本管理支持历史记录与回滚不支持不支持
推荐使用场景生产环境的 Pod 全生命周期管理作为 Deployment 的底层组件,不直接使用已淘汰,不推荐使用

总结

Deployment 是 Kubernetes 中推荐的 Pod 管理方式,它通过 ReplicaSet 实现副本数量的自动维持(副本控制),同时提供声明式更新、版本回滚等高级功能,确保服务的高可用性和可维护性。相比直接使用 ReplicaSet 或 RC,Deployment 更适合生产环境中需要频繁更新和稳定运行的业务场景。

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

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

相关文章

湖南建设信息网站做手机版网站和做app差别

接口测试虽然作为版本的一环&#xff0c;但是也是有一套完整的体系&#xff0c;有接口的功能测试、性能测试、安全测试&#xff1b;同时&#xff0c;由于接口的特性&#xff0c;接口的自动化低成本高收益的&#xff0c;使用一些开源工具或一些轻量级的方法&#xff0c;在测试用…

QBXT2025S刷题 Day2

今天的题目 \(rk38\) T1 这道题想了 \(1h\) 差不多。 这道题其实可以直接转化成选一个点,把覆盖着这个点线段全部删掉,使得左右两边都有线段。 可以维护每个点被多少个区间覆盖,左面有多少个区间,右面有多少个区间…

个人主页网址

https://www.cnblogs.com/gutianle

建设项目环境影响评价公示网站wordpress添加干扰代码

数据可视化是将复杂数据转化为易于理解的图表和图形的过程&#xff0c;帮助我们发现趋势、关联和模式。同时数据可视化也是数字孪生的基础&#xff0c;本文小编带大家用最简单的话语为大家讲解怎么制作一个数据可视化大屏&#xff0c;接下来跟随小编的思路走起来~ 1.数据收集和…

离型剂技术支持东莞网站建设php 移动网站开发

1025. 反转链表 (25) 时间限制300 ms内存限制65536 kB代码长度限制8000 B判题程序Standard作者CHEN, Yue给定一个常数K以及一个单链表L&#xff0c;请编写程序将L中每K个结点反转。例如&#xff1a;给定L为1→2→3→4→5→6&#xff0c;K为3&#xff0c;则输出应该为3→2→1→6…

甘肃省工程建设信息官方网站宣传片拍摄构思

伺服放大器功能提升 伺服放大器MELSERVO-JET系列为进一步优化了独家控制引擎的高性能伺服放大器。 可通过与支持CC-LinK IE TSN的运动控制器的同步通信,进行高 速、高精度的运动控制。 除了旋转型伺服电机以外,还支持线性伺服电机。MR-JET-G-N1支持EtherCAT。 旋转型伺服电机 …

Vue之刷新页面会触发的生命周期函数

刷新页面时不会触发组件的 onUnmount 事件。 因为刷新页面会直接销毁整个页面的 DOM 树和内存中的组件实例,属于“强制清空”,而非组件正常从 DOM 树中卸载的流程。 而 onUnmount 的核心是“组件正常卸载(如路由切换…

深入解析:App Store 上架完整流程解析,iOS 应用发布步骤、ipa 文件上传工具、TestFlight 测试与苹果审核经验

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

傅里叶的一生

傅里叶的一生https://www.bilibili.com/video/BV1u7411s7Hi/ 傅里叶1807年发表《热的传播》论文,提出用三角函数级数表示物体温度分布,但因数学家反对延迟发表。1811年该研究获巴黎科学院大奖,1822年出版《热的解析…

Dos命令学习(新手)

打开CMD的方式Win键+R 输入cmd打开控制台 在任意的文件夹下面,按住shift键+鼠标右键点击,在此处打开命令行窗口 开始菜单,打开命令提示符 资源管理器的地址栏前面加上cmd路径常用Dos命令 #盘符切换:盘符+回车 #查看…

如何做外围网站的代理wordpress首页调用文章页图片

Windows 10启用Hyper-V 官网教程PowerShell 启用 Hyper-V启用 Hyper-V 角色 我们知道VMware是创建虚拟机的好工具&#xff0c;那Windows平台上有没有虚拟工具呢&#xff1f; 今天我们要讲解的就是Windows才入局的虚拟工具&#xff1a;Hyper-V 官网教程 https://learn.microsof…

苹果im虚拟机协议群发系统,苹果imessage推信软件,苹果iMessage自动群发协议–持续更新中...

一、电脑版虚拟机苹果系统(Mac OS)上实现imessage群发: /*MacOS苹果系统,正常情况下,只能安装到苹果公司自己出品的Mac电脑,俗称白苹果,不能安装到各种组装机或者其他品牌的品牌机上,黑苹果的的原理,就是通过一些“…

吴恩达深度学习课程一:神经网络和深度学习 第一周:深度学习简介

此分类用于记录吴恩达深度学习课程的学习笔记。 课程相关信息链接如下:原课程视频链接:[双语字幕]吴恩达深度学习deeplearning.ai github课程资料,含课件与笔记:吴恩达深度学习教学资料 课程配套练习(中英)与答案…

实用指南:AI Agent开发平台如何设计?核心架构与工作流实战案例详解

实用指南:AI Agent开发平台如何设计?核心架构与工作流实战案例详解pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: &qu…

防重复提交的实现

实现防重复提交 1.按钮置灰和恢复(触发函数时应马上置灰,再执行其他逻辑,最后恢复按钮状态,否则容易在执行函数的置灰语句前再次触发函数,可以使用try-finally结构对函数进行改造) 2.前端对请求进行缓存(实现请…

建设云南省癌症中心网站wordpress 采集函数

ReactNative中升级IOS 17版本Crash解决 ReactNative中升级IOS 17版本Crash解决一、问题描述二、原因分析三、解决方案决策3.1 设置宽高为非零值3.2 使用新的UIGraphicsImageRenderer替换就版本的UIGraphicsBeginImageContext 四、可能使用到该API的三方库4.1 react-native-fast…

设计模式(C++)详解——观察者模式(Observer)(1) - 教程

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

百度百科让做网站的超链接吗wordpress登陆小工具

如何终止一个正在运行的线程&#xff1f; 设置状态位来终止一个正在运行的线程。可以自己实现, 也可以使用 interrupt 方法来设置这个状态位, 然后在代码中判断 isInterrupted 的返回结果来执行退出执行的逻辑。 了解 Thread 类中的 stop、interrupt 方法吗?为什么不用 stop…