当前位置: 首页 > news >正文

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: nginxtemplate:           # Pod模板(定义Pod的规格)metadata:labels:app: nginx    # 与selector.matchLabels一致spec:containers:- name: nginximage: nginx:1.21  # 容器镜像ports:- containerPort: 80strategy:           # 更新策略(可选,默认RollingUpdate)type: RollingUpdaterollingUpdate: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.dtcms.com/a/435342.html

相关文章:

  • daily notes[68]
  • SPI Flash基础知识点 (chatgpt版本)
  • 昆明城乡和住房建设局网站做网站公司的收费多少
  • LLM 笔记 —— 02 大语言模型能力评定
  • 做网站视频用哪个视频编辑软件网站设计相似侵权吗
  • [特殊字符]灵感补给站 | pinterest 设计灵感分享 UI版面设计3
  • 网站主机一般选哪种的远程访问群晖wordpress
  • Edit Starts找不到Mybatis Framwork依赖
  • 【C++算法】类与对象通用题目解析分享
  • C语言中原子操作(简要)
  • 珠宝行业做网站的好处网站建设平台有哪些 谢谢平台建站
  • OpenOCD 终端使用指令大全
  • JS工具函数与代码优化实战
  • 学生信息管理系统|基于Springboot的学生信息管理系统设计与实现(源码+数据库+文档)
  • 哪些ppt网站是免费的wordpress微信验证码
  • 【P0】Spring 面试篇
  • pyqt 播放视频遮罩显示 时钟
  • Day01_刷题niuke20251002
  • 做宠物商品的网站公司网页首页图片
  • 衡水建设网站长沙房地产网站建设
  • linux进程与服务
  • wordpress订阅会员seo建站技术
  • 医疗AI平台化转型:从单点试点到体系化建设的互操作性与质量控制路径研究(下)
  • JavaScript 数组清空的三种方式
  • 网站云空间和普通空间上海传媒公司官网
  • 网站标题正确书写标准微信公众号登录不上
  • 复制标签页导致的Vue动态路由失效问题解决思路
  • 从零起步学习Redis || 第六章:Redis单线程模式的实现详解
  • 影视公司网站设计河南省建设厅厅长
  • PySide6 新(建)窗口 简单示例