1. 课程导论:Deployment 滚动更新机制概述、集群升级对业务的影响、节点池治理的重要性

1.1 Deployment 滚动更新机制概述

Deployment 是 Kubernetes 中最常用的工作负载控制器,其核心能力之一便是滚动更新(Rolling Update)。该机制允许以零停机或低停机的方式,逐步将 Pod 实例从旧版本替换为新版本。理解其底层运作原理,是诊断中断和规划集群升级的前提。

核心目标:在更新过程中,始终保持一定数量的 Pod 可用(Ready),同时控制不可用 Pod 的数量上限,从而保障业务连续性。

滚动更新的行为由两个关键参数控制:

参数 默认值 含义
maxSurge 25% 更新期间,允许超出期望副本数(Replicas)的最大 Pod 数量。可以是数值或百分比。
maxUnavailable 25% 更新期间,允许相对于期望副本数不可用的最大 Pod 数量。可以是数值或百分比。

下图展示了 Deployment 滚动更新的典型流程:

Deployment 滚动更新流程 旧版本 ReplicaSet-A 创建新RS ReplicaSet-B 扩容新Pod maxSurge 控制 缩容旧Pod maxUnavailable 控制 更新完成 旧RS保留 说明: 滚动更新并非一次性完成,而是反复执行“扩容新Pod → 等待就绪 → 缩容旧Pod”的循环,直至所有Pod被替换。 旧 ReplicaSet 不会被删除,以便支持快速回滚。

1.2 集群升级对业务的影响

Kubernetes 集群升级(如 kube-apiserver、kubelet、kube-scheduler 等组件版本更新)是一项高风险运维操作。升级过程中,控制平面组件和节点组件的重启、API 版本废弃、资源对象的兼容性变化,都可能直接或间接影响运行中的 Deployment。

主要影响维度如下:

  • Pod 重建与驱逐:节点升级(如 kubelet 重启或操作系统更新)通常会导致节点上的 Pod 被重新调度,触发 Deployment 的滚动更新或重建。
  • API 兼容性中断:升级后,旧的 API 版本可能被废弃(如 extensions/v1beta1 的 Ingress),导致 Deployment 使用的资源定义无法被新集群识别。
  • 控制平面抖动:升级期间,kube-apiserver 可能短暂不可用,影响 Deployment 控制器、HPA、Service 等组件的正常协调。
  • 节点资源压力:大规模节点升级时,大量 Pod 同时被驱逐,可能造成集群资源碎片化或节点过载。
常见故障模式:集群升级后,Deployment 的 maxUnavailable 设置不当,导致升级过程中可用 Pod 数量低于业务容忍阈值,引发服务降级或中断。

1.3 节点池治理的重要性

节点池(Node Pool)是云原生环境中对节点进行分组管理的核心抽象。在集群升级场景下,节点池治理直接决定了升级的可控性、灰度策略和故障隔离能力。

良好的节点池治理能够带来以下收益:

治理维度 收益描述
灰度升级 按节点池分批升级,先升级测试池或金丝雀池,验证业务稳定性后再升级生产池。
故障隔离 将关键业务与非关键业务部署在不同节点池,升级非关键池时不影响核心服务。
资源预留 为系统组件(如 kube-system)预留独立节点池,避免业务 Pod 挤占系统资源导致升级失败。
快速回滚 升级失败时,可快速将节点池回滚至旧镜像或配置,而不影响其他池。

下图展示了基于节点池的分批升级策略:

节点池分批升级策略 Kubernetes 集群 金丝雀池 先升级,验证 生产池-A 第二批升级 生产池-B 最后升级 节点-1 节点-2 节点-3 升级顺序: 金丝雀池 → 生产池-A → 生产池-B
最佳实践:建议至少划分 3 个节点池:系统池(运行集群关键组件)、金丝雀池(运行测试或低风险业务)、生产池(运行核心业务)。升级时严格遵循“金丝雀 → 生产”的顺序,并设置合理的 PodDisruptionBudget(PDB)保护关键 Deployment。