1. 课程导论:滚动升级概述、速率控制与流量切换的重要性

1.1 什么是滚动升级?

滚动升级(Rolling Update)是 Kubernetes 中更新工作负载(如 Deployment、StatefulSet)的默认策略。它通过逐步替换旧版本 Pod 实例为新版本,实现零停机的应用更新。与“一次性全部替换”的蓝绿部署或“完全重建”的 recreate 策略不同,滚动升级在升级过程中始终保持一定数量的可用副本,从而保障服务的连续性。

核心思想: 用新版本 Pod 逐个替换旧版本 Pod,每次只替换一部分,确保集群中始终有足够的 Pod 处理用户请求。

1.2 滚动升级的核心参数

Kubernetes 通过两个关键参数控制滚动升级的行为:

参数 默认值 作用
maxSurge 25% 升级过程中允许超出期望副本数的最大 Pod 数量(可以是数或百分比)
maxUnavailable 25% 升级过程中允许不可用 Pod 的最大数量(可以是数或百分比)

这两个参数共同决定了升级的速率与安全边界。例如,对于一个 10 副本的 Deployment,默认配置允许同时最多有 3 个 Pod 处于不可用状态(10 × 25% = 2.5,向上取整为 3),同时最多允许 3 个额外 Pod 被创建。

1.3 速率控制:为什么重要?

速率控制决定了升级过程中新旧 Pod 切换的速度。不合理的速率配置可能导致以下问题:

  • 过快: 大量 Pod 同时被替换,造成服务容量骤降,引发请求超时或错误率飙升。
  • 过慢: 升级周期过长,影响新功能上线效率,且长时间处于混合版本状态增加运维复杂度。
  • 无控制: 在节点资源紧张或集群规模较大时,可能触发级联故障。
最佳实践: 生产环境中建议将 maxUnavailable 设置为 1 或 10% 以下,配合 maxSurge 控制并发创建量,实现“慢速、可控”的升级节奏。

1.4 流量切换:升级中的关键挑战

当 Pod 被滚动替换时,流量切换是保证用户体验的核心环节。Kubernetes 的 Service 和 Endpoint 控制器负责将流量导向健康的 Pod,但在实际场景中,流量切换存在以下挑战:

  • 就绪探测延迟: 新 Pod 启动后,需要等待 Readiness Probe 通过才会被加入 Service 后端,这段时间内流量可能被导向未就绪的 Pod。
  • 连接排空: 旧 Pod 被终止时,正在处理的请求可能被中断,需要优雅关闭(preStop hook)来排空已有连接。
  • 节点池切换: 在升级节点池(Node Pool)时,Pod 需要迁移到新节点,流量切换涉及跨节点的网络路由更新。
滚动升级流量切换流程 旧版本 Pod (v1) 新版本 Pod (v2) Service ClusterIP / LoadBalancer 流量切换过程:逐步将流量从旧 Pod 迁移到新 Pod 依赖 Readiness Probe + Endpoint 控制器 + 优雅关闭 阶段 1:新 Pod 创建 等待 Readiness Probe 通过 阶段 2:流量接入 Endpoint 更新,流量进入新 Pod 阶段 3:旧 Pod 排空 preStop + 等待连接关闭 速率控制参数(maxSurge / maxUnavailable)决定每个阶段并发处理的 Pod 数量

1.5 课程目标与学习路径

本课程旨在帮助学员掌握滚动升级的速率控制与节点池流量切换的核心技能。通过本课程,你将能够:

模块 学习目标 关键技能
基础概念 理解滚动升级原理与参数含义 配置 maxSurge / maxUnavailable
速率控制实战 掌握不同场景下的速率调优策略 使用 kubectl rollout 监控与调整
流量切换机制 深入 Service、Endpoint、Readiness Probe 协作 配置优雅关闭与 preStop Hook
节点池升级 实现节点池滚动升级与 Pod 迁移 节点池管理、PodDisruptionBudget 配置
生产最佳实践 设计高可用的升级策略与故障恢复 灰度发布、回滚、监控告警
前置要求: 学员需具备基本的 Kubernetes 操作经验(熟悉 Deployment、Service、Pod 概念),了解 kubectl 常用命令。本课程将提供完整的 YAML 示例与操作步骤。

1.6 为什么选择本课程?

  • 实战驱动: 每个知识点都配有可执行的 YAML 配置与 kubectl 命令。
  • 深度解析: 不仅讲“怎么做”,更讲“为什么这样做”,涵盖底层原理。
  • 生产级案例: 涵盖大集群、多节点池、跨可用区等复杂场景。
  • 故障排查: 提供常见问题的诊断思路与解决方案。

接下来,我们将从滚动升级的基础参数配置开始,逐步深入到速率控制与流量切换的每一个细节。准备好你的集群环境,开始学习吧!