定时伸缩
HPA(Horizontal Pod Autoscaling) 指 Kubernetes Pod 的横向自动伸缩,是 Kubernetes 集群利用监控指标自动扩容或者缩容服务中的 Pod 数量,其中监控指标利用 CPU 内存等。定时伸缩不同的是通过定时器进行 Pod 的数量的伸缩,用于已知的高并发,在高并发来临前提前扩容业务进行应对。
1. 在UK8S使用定时伸缩
1.1 开启定时伸缩
在 UK8S 集群管理页面中点击集群伸缩标签页,选择定时伸缩CronHPA,点击立即开启安装 CronHPA 控制插件,开启定时伸缩功能。
1.2 添加定时伸缩条件
用户点击添加进入新增定时任务页面,在页面中需要输入定时器的名字、选择需要伸缩的对象、执行计划的时间和目标 Pod 数量。如勾选「单次执行」选项,则表明该定时伸缩任务仅需执行一次,非周期性执行。
1.2 针对计划表语法说明
针对计划表语法使用和 CronTab 一致的语法,下面列举几种常用语法,详细语法请参考链接
Crontab格式(前5位为时间选项,这里我们只用到了前5位)
<分钟> <小时> <日> <月份> <星期> <命令>
每天一次,0点0分执行
0 0 * * *
每周一次,0点0分执行
0 0 * * 0
每月一次,0点0分执行
0 0 1 * *
⚠️ CronTab 的命令时间为 UTC 时间,任务真实执行时间用户可以进行 +8 小时计算。
1.3 示例 yaml
我们针对 nginx-deployment 这个应用设置了 up5 和 down2 两个执行计划,分别设置的是 40 8 * * *
和 50 8 * * *
,即应用将在北京时间 16 点
40 分扩容到 5 个,在 16 点 50 分缩容到 2 个,并每天执行。
apiVersion: autoscaling.ucloud.cn/v1
kind: CronHorizontalPodAutoscaler
metadata:
name: "nginx-cronhpa"
namespace: default
spec:
jobs: # 执行计划,可在同一个 CronHPA 任务中添加多个执行计划
- name: "up5"
schedule: "40 8 * * * "
targetSize: 5
runOnce: false
- name: "down2"
schedule: "50 8 * * * "
targetSize: 2
runOnce: false
scaleTargetRef: # 目标执行对象,支持 Deployment、StatefulSet 及 HPA 资源对象
apiVersion: apps/v1
kind: Deployment
name: nginx-deployment
2. CronHPA 定时伸缩支持 HPA 对象
CronHPA 插件支持在创建时,选择原有的 HPA 对象,兼容规则如下:
HPA 配置 min/max | CronHPA 目标Pod数 | Deployment 当前 Pod 数 | 扩缩结果 | 说明 |
---|---|---|---|---|
1/10 | 5 | 5 | HPA:5/10 Deployment:5 | CronHPA 目标副本数 > HPA 副本数下限,修改 HPA 中的副本数下限 |
5/10 | 4 | 5 | HPA:4/10 Deployment:5 | CronHPA 目标副本数 < HPA 副本数下限,修改 HPA 中的副本数下限 当业务下降低于 HPA 设定阈值范围时,HPA 将调整 Deployment 中副本数为 4 |
1/10 | 11 | 5 | HPA:11/11 Deployment:11 | CronHPA 目标副本数 > HPA 副本数上限,同时修改 HPA 中的副本数上限与下限 |