一、业务背景
整点秒杀活动背景
跨境电商独立站业务,计划在 **3月8日零点** 开启 **85折整点抢券**,预计将在 3月8日零点产生高于平日 **2倍** 的流量。这属于典型的**整点秒杀类型业务场景**。
为什么 K8S 自带的弹性扩容 HPA 无法应对爆发性流量(整点秒杀)?
2. **扩容速度限制**:新 Pod 创建依赖资源准备(健康检查),受资源紧张和镜像拉取等影响速度慢,且受集群资源上限制约。
3. **预测能力不足**:HPA 不了解业务模式,无法提前预知整点秒杀流量,错过准备时机。
HPA 更适用于**平稳的流量增长**带来的扩缩容场景,而"整点秒杀"类型的业务场景,瞬时性的突发流量直接把容器组负载打满,此刻业务的反应是 **———— 卡卡卡 ————**
因此,整点秒杀的场景,一定要利用云计算的弹性能力**预准备计算资源**,覆盖活动周期来应对突发性流量,弥补 HPA 的不足。
二、CronHPA 方案
CronHPA 基于 `kubernetes-cronhpa-controller` 实现,是一个**基于时间的 Pod 水平伸缩 Controller**,按照类似 Crontab 的策略定时对集群进行扩缩容。
CronHPA 配置示例
```yaml
apiVersion: autoscaling.alibabacloud.com/v1beta1
kind: CronHorizontalPodAutoscaler
metadata:
name: shopping-mall
namespace: mall
spec:
jobs:
- name: scale-up
schedule: 0 0 23 7 3 * # 3月7日23点执行扩容任务
targetSize: 50
runOnce: true
- name: scale-down
schedule: 0 0 3 8 3 * # 3月8日凌晨3点执行缩容
targetSize: 25
runOnce: true
scaleTargetRef:
apiVersion: autoscaling/v2beta1
kind: HorizontalPodAutoscaler
name: shopping-mall # 以 HPA 为操作对象,实现协同
```
三、效果与成本
**Prometheus 监控流量负载**:3月7日23点 ~ 3月8日3点,期间预部署2倍动态资源,仅覆盖 **4小时**,极大程度地节约服务器成本,又应对了整点秒杀流量高峰。
四、案例总结
2. 对于**电商整点秒杀场景**:用计划性弹性容器实例预部署,既能很好地应对已知的流量高峰,又能很好地控制用云成本。
3. 如果应用**同时部署了 HPA 和 CronHPA**,那么必须配置两者协同,防止相互覆盖的问题。