Kubernetes 核心机制详解:热更新与 自动扩缩容
这两项功能是 K8s 区别于传统运维模式的核心竞争力,也是保障服务"高可用"和"高弹性"的基石。
1. 热更新 (Rolling Update)
1.1 什么是热更新?
热更新(Rolling Update)是 Kubernetes Deployment 默认的发布策略。它的目标是在不中断服务的情况下,将应用从旧版本(v1)平滑过渡到新版本(v2)。
核心理念:新老交替,温水煮青蛙。K8s 不会一次性杀掉所有旧容器,而是启动一个新容器 -> 确认存活 -> 杀掉一个旧容器,如此循环,直到全部替换完成。
1.2 核心原理:ReplicaSet 的交接棒
当我们更新 Deployment 的镜像时,K8s 底层实际发生了以下动作:
- Deployment 创建一个新的 ReplicaSet (v2),初始副本数为 0。
- Deployment 指挥 v2 ReplicaSet 增加副本(扩容)。
- 当 v2 的 Pod 准备就绪(Ready)后,Deployment 指挥旧的 ReplicaSet (v1) 减少副本(缩容)。
- 重复上述步骤,直到 v1 副本数为 0,v2 副本数达到期望值。
1.3 关键配置参数
在 Deployment 的 YAML 中,通过 strategy 字段控制更新节奏:
spec:
replicas: 10
strategy:
type: RollingUpdate
rollingUpdate:
maxSurge: 2 # 激增数:允许比期望副本数多几个?
maxUnavailable: 0 # 不可用数:允许发布过程中少几个?
-
maxSurge (最大激增数):
- 设置为
2或20%。表示在发布过程中,最多可以存在10 + 2 = 12个 Pod。 - 作用:先启动新 Pod,确保资源足够后再删旧的。
- 设置为
-
maxUnavailable (最大不可用数):
- 设置为
0。表示在发布过程中,任何时刻可用的 Pod 数量都不能少于 10 个。 - 作用:保证服务处理能力不下降,适合对稳定性要求极高的场景。
- 设置为