定时伸缩cronhpa
定时伸缩CronHPA
1. 操作场景
容器云CSK支持CronHPA,实现资源定时扩缩容,并且可以和HPA策略共同作用,定时调整HPA伸缩范围,实现复杂场景下的扩缩容。
2. 注意事项
为了使用CronHPA,集群需要安装相应的组件,操作详情请参见 CronHPA说明 ;
云硬盘类型的数据卷不建议同时挂载给多个Pod使用,当多个Pod同时进行数据写入时,会存在数据丢失的风险。所以,建议使用云硬盘类型数据卷的工作负载将Pod数量设置为1,且不绑定自动/定时伸缩策略。
3. 创建CronHPA
3.1. 通过容器云控制台创建CronHPA
在创建工作负载过程中,开启CronHPA
- 登录容器云控制台;
- 若默认进入的集群非目标集群,可在顶部的集群切换栏,切换进入集群;
在容器云控制台左侧导航栏中,选择 【工作负载】并选择工作负载类型;
单击【创建】,进入【创建工作负载】页面;
在扩展配置部分选择开启CronHPA,根据实际需求完成参数配置;
完成工作负载的配置后,单击创建,完成工作负载创建的同时,也会创建相应的CronHPA。
为已有工作负载或HPA创建CronHPA
- 登录容器云控制台;
- 若默认进入的集群非目标集群,可在顶部的集群切换栏,切换进入集群;
在容器云控制台左侧导航栏中,选择 【弹性伸缩】-【定时伸缩】;
单击【创建】,进入【创建定时伸缩】页面。根据实际需求,完成参数设置;
单击确定,完成CronHPA创建。
3.2. 通过YAML创建CronHPA
- 登录容器云控制台;
- 若默认进入的集群非目标集群,可在顶部的集群切换栏,切换进入集群;
在容器云控制台左侧导航栏中,选择 【弹性伸缩】-【定时伸缩】;
单击【YAML 创建】,完成参数设置;
单击确定,完成CronHPA创建。
3.3. 通过kubectl创建CronHPA
YAML示例:
apiVersion: "autoscaling.alibabacloud.com/v1beta1"
kind: "CronHorizontalPodAutoscaler"
metadata:
name: "cronhpa"
namespace: "default"
spec:
scaleTargetRef:
apiVersion: "apps/v1"
kind: "Deployment"
name: "nginx"
jobs:
- name: "job"
schedule: "* * * * * *"
targetSize: 3
参考YAML示例,准备 CronHPA YAML 文件;
安装 kubectl,并连接集群。操作详情请参见 连接集群 ;
执行以下命令,创建 CronHPA YAML 文件:
kubectl --kubeconfig KUBECONFIG_NAME create -f CronHPA YAML 文件名称
例如,创建一个文件名为 my-cronhpa.yaml 的 CronHPA YAML 文件,则执行以下命令:
kubectl --kubeconfig KUBECONFIG_NAME create -f my-cronhpa.yaml
执行以下命令,验证创建是否成功:
kubectl --kubeconfig KUBECONFIG_NAME get cronhpa
返回类似以下信息,即表示创建成功。
NAMESPACE NAME AGE
default my-cronhpa 16h
4. CronHPA兼容HPA
由于HPA与CronHPA均通过scaleTargetRef字段来获取伸缩对象,如果CronHPA和HPA同时设置Deployment为伸缩对象,两个伸缩策略相互独立,后执行的操作会覆盖先执行的操作,导致伸缩效果不符合预期,因此需避免这种情况发生。
在CronHPA与HPA共同使用时,可以将CronHPA的scaleTargetRef字段设置为HPA对象,这样CronHPA就不会直接调整Deployment的副本数,而是通过调整HPA来操作Deployment,从而避免HPA和CronHPA的冲突问题。
以下表格根据不同的扩缩容场景,说明了CronHPA兼容HPA的规则。
表格中参数说明如下:
- HPA:表示HPA中定义的最小和最大副本数;
- CronHPA:表示CronHPA任务设定的目标副本数;
- Deployment:表示工作负载扩缩前的副本数。
HPA | Cronhpa | Deployment | 扩缩结果 | 兼容规则说明 |
---|---|---|---|---|
1/10 | 5 | 5 | HPA:1/10 Deployment:5 |
当CronHPA中的目标副本数和当前副本数一致时,HPA中的最大和最小副本数,还有应用当前的副本数无需变更。 |
1/10 | 4 | 5 | HPA:1/10 Deployment:5 |
当CronHPA中的目标副本数低于当前副本数时,保留当前副本数。 |
1/10 | 6 | 5 | HPA:6/10 Deployment:6 |
当CronHPA中的目标副本数高于当前副本数时,保留CronHPA的目标副本数。 CronHPA目标副本数高于HPA副本数下限(minReplicas)时,修改HPA的副本数下限。 |
5/10 | 4 | 5 | HPA:4/10 Deployment:5 |
当CronHPA中的目标副本数低于当前副本数时,保留当前应用副本数。 CronHPA目标副本数低于HPA副本数下限(minReplicas)时,修改HPA的副本数下限。 |
5/10 | 11 | 5 | HPA:11/11 Deployment:11 |
当CronHPA中的目标副本数高于当前副本数时,保留CronHPA的目标副本数。 CronHPA目标副本数高于HPA副本数上限(maxReplicas)时,修改HPA的副本数上限。 |