(七)Pod 缩放
前面我们已经学习到了 Pod 的扩容、滚动更新等内容,我们可以手动为 Deployment 等设置 Pod 副本的数量,今天会继续学习 关于 Pod 扩容、收缩 的规则,让 Pod 根据节点服务器的资源自动增加或减少 Pod 数量
缩放 Deployment
设置副本数量
可以使用 scale 直接设置或使用 edit 修改文件
kubectl scale deployment nginx --replicas=10
# kubeclt edit deployment nginx
水平自动缩放
k8s 提供了一个 Pod 水平自动扩缩(Horizontal Pod Autoscaler)可以基于 CPU 利用率自动扩缩 ReplicationController、Deployment、ReplicaSet 和 StatefulSet 中的 Pod 数量,但 Pod 自动扩缩不适用于无法扩缩的对象,比如 DaemonSet,每个 Node 维持一个 Pod
# 不进行执行
kubectl autoscale deployment nginx --min=10 --max=15 --cpu=80%
表示目标 CPU 使用率为 80%(期望指标),副本数量配置应该为 10 到 15 之间,CPU 是动态缩放 Pod 的指标,会根据具体的 CPU 使用率计算副本数量,计算公式如下
期望副本数 = ceil[当前副本数 * (当前指标 / 期望指标)]- 比如当前有十二个副本,CPU 使用率是
90%,期望值是80% ceil[12 × (90% / 80%)] = ceil[13.5] = 14,理论期望值是十四个副本;继续升高时也不会超过命令指定的十五个
比例缩放
水平缩放只关心最终的期望 Pod 数量,直接修改副本数和水平缩放,决定最终 Pod 数量有多少个
而比例缩放,指的是在上线 Deployment 时,临时运行着应用程序的多个版本(共存),比例缩放是控制上线时多个 Pod 服务可用数量的方式,控制对象上线过程中,新的 Pod 创建速度、旧的 Pod 销毁速度、Pod 的可用程度,跟上线过程中新旧版本的 Pod 替换数量有关
查看当前 Deployment 的缩放策略
kubectl get deployment nginx -o yaml
strategy 可以设置 Pod 是怎么更新的,.spec.strategy.type==RollingUpdate时,便会采取滚动更新的方式更新 Pods,此时指定 maxUnavailable 和 maxSurge 可以控制滚动更新过程
- maxUnavailable 更新期间 Pod 最大不可用数量或比例,旧 Pod 按此限制逐渐减少
- maxSurge 更新期间允许超过期望副本数的最大数量或比例,新 Pod 按此限制逐渐创建
这里的 3 和 2 是前几篇修改过的,创建 Deploymnet 时默认为 25%,也就是每次处理 25% 的 Pod,在更新过程中,我们必须保证我们的服务依然可用,即还有旧版本的 Pod 在运,。这个配置设定了更新过程中至少保证 75% 的 Pod 还可以使用,这个就是 比例缩放
这里的 3 和 2 意思是 旧的 Pod 按照最大 2 个的速度不断减少;新的 Pod 按照最大 3 个的速度不断增加 ``` kubectl delete deployment nginx
kubectl create deployment nginx --image=nginx:1.19.0 --replicas=10
直接复制执行
kubectl set image deployment nginx --image=nginx:1.20.0 kubectl get replicaset
可以看到,因为新的 Pod 创建较快,所以最终可能新的 Pod 数量达到 10 个了,旧的 Pod 还有很多,总数量大于 10,但最终都会变为 10 个

如果想新版本的 Pod 上线速度更快,则可以把 `maxSurge` 数量或比例设置大一些;为了保证上线过程稳定、服务可用程度高,可以把 `maxUnavailable` 设置小一些
# 总结
本篇内容较少,主要聚焦于 Pod 的缩放,当然了,如果记不住也是没关系的,有印象了总是好的
愿诸君顺遂