创建CronFederatedHPA策略以定时扩缩工作负载
本小节将指导您创建CronFederatedHPA策略,以设置固定时间周期自动扩缩工作负载。
在创建CronFederatedHPA策略前,您可以参考CronFederatedHPA工作原理了解相关原理与概念。若您需要了解不同负载伸缩策略的差异,请参考负载伸缩概述。
约束与限制
CronFederatedHPA策略仅支持1.19及以上版本的集群创建。
创建CronFederatedHPA策略
控制台创建
- 登录UCS控制台,在左侧导航栏中选择“容器舰队”。
- 单击已开通集群联邦的容器舰队名称,进入容器舰队详情页面。
- 在左侧导航栏选择“负载伸缩”,选择“定时伸缩策略”,并单击右上角“创建定时伸缩策略”。
- 参考表1配置CronFederatedHPA策略。
表1 基础配置参数说明 参数
参数说明
策略名称
CronFederatedHPA策略的名称。
命名空间
需要设置自动扩缩的工作负载所在命名空间的名称。
作用对象
可选择作用于工作负载或指标伸缩策略。
- 工作负载:选择需要应用该策略的工作负载,也可新建工作负载,新建的具体操作请参见创建工作负载。
- 指标伸缩策略:选择已创建的指标伸缩策略,也可单击右侧新建,新建的具体操作请参见创建FederatedHPA策略。
- 单击策略配置下的“添加规则”,参考表2配置策略规则。
表2 CronFederatedHPA策略规则配置 参数
参数说明
规则名称
CronFederatedHPA策略的名称。
目标副本数
CronFederatedHPA策略的目标Pod数。
触发时间
可选择每小时、每天、每周、每月、每年,或选择Cron表达式自行配置触发时间。
- 每小时:在每小时的第几分钟执行一次。例如选择“5”,策略将会在每小时的第5分钟执行一次。
- 每天:在每天具体的某一个时间执行一次,可具体到分钟。设置完成后,策略将会在每天的该时点执行。
- 每周:在每周具体的某一天内的某一时间执行一次,可具体到分钟。设置完成后,策略将会在每周的该天该时点执行。
- 每月:在每月具体的某一天内的某一时间执行一次,可具体到分钟。设置完成后,策略将会在每月的该天该时点执行。
- 每年:在每年具体的某月某天内的某一时间执行一次,可具体到分钟。设置完成后,策略将会在每年的该天该时点执行。
- Cron表达式:
┌───────────── 分钟(0-59) │ ┌─────────── 小时(0-23) │ │ ┌────────── 月的某天(1-31) │ │ │ ┌──────── 月份(1-12) │ │ │ │ ┌─────── 周的某天(0-6) │ │ │ │ │ │ │ │ │ │ * * * * *
例如:0 0 13 * 5 表示此任务必须在每个星期五的午夜以及每个月的 13 日的午夜开始。
时区
可选择上海时区或新加坡时区。
- 设置完成后,单击“确定”,然后单击“创建”,即可跳转定时伸缩策略列表查看策略详情,完成CronFederatedHPA策略创建。
命令行创建
- 使用kubectl连接集群联邦,详细操作请参见使用kubectl连接集群联邦。
- 使用如下命令创建并编辑cfhpa.yaml文件。
vi cfhpa.yaml
文件内容定义如下所示,参数定义请参见表3。本示例中构建的CronFederatedHPA策略名称为cron-federated-hpa,直接作用于名称为test的工作负载,内含两条定时规则(名称为“Scale-Up”和“Scale-Down”)。其中,Scale-Up规则为每天8:30的目标Pod数为10,Scale-Down规则为每天21:00的目标Pod数为5。
apiVersion: autoscaling.karmada.io/v1alpha1 kind: CronFederatedHPA metadata: name: cron-federated-hpa # CronFederatedHPA策略名称 spec: scaleTargetRef: apiVersion: apps/v1 kind: Deployment # 可选择Deployment或FederatedHPA name: test # 工作负载或FederatedHPA的名称 rules: - name: "Scale-Up" # 规则名称 schedule: 30 08 * * * # 触发时间 targetReplicas: 10 # 目标Pod数,非负整数 timeZone: Asia/Shanghai # 时区 - name: "Scale-Down" # 规则名称 schedule: 0 21 * * * # 触发时间 targetReplicas: 5 # 目标Pod数,非负整数 timeZone: Asia/Shanghai # 时区
表3 关键参数说明 参数
是否必填
参数类型
描述
kind
是
String
可选择Deployment或FederatedHPA。
- 单独使用CronFederatedHPA策略:Deployment
- 同时使用FederatedHPA与CronFederatedHPA策略:FederatedHPA
name
是
String
CronFederatedHPA策略中定义的规则名称,长度为1~32字符。
schedule
是
String
策略触发时间,以Cron表达式呈现,具体遵循以下语法规则:
┌───────────── 分钟(0-59) │ ┌─────────── 小时(0-23) │ │ ┌────────── 月的某天(1-31) │ │ │ ┌──────── 月份(1-12) │ │ │ │ ┌─────── 周的某天(0-6) │ │ │ │ │ │ │ │ │ │ * * * * *
例如:0 0 13 * 5 表示此任务必须在每个星期五的午夜以及每个月的 13 日的午夜开始。
targetReplicas
是
String
CronFederatedHPA策略的目标Pod数。
timeZone
是
String
时区,可选择上海时区或新加坡时区。
- 上海时区:Asia/Shanghai
- 新加坡时区:Asia/Singapore
- 执行如下命令创建CronFederatedHPA策略。
kubectl apply -f cfhpa.yaml
回显如下表明创建成功。
CronFederatedHPA.autoscaling.karmada.io/cron-federated-hpa created
创建完成后,可以执行如下命令观察负载伸缩的运行效果。
- 检查工作负载的当前Pod数:kubectl get deployments
- 查看CronFederatedHPA策略事件(仅保留最近三条):kubectl describe cronfederatedhpa cron-federated-hpa
可以执行如下命令管理CronFederatedHPA策略。其中cron-federated-hpa为CronFederatedHPA策略的名称,实际情况中需修改为自己所创建的策略名称。
- 获取CronFederatedHPA策略:kubectl get cronfederatedhpa cron-federated-hpa
- 更新CronFederatedHPA策略:kubectl edit cronfederatedhpa cron-federated-hpa
- 删除CronFederatedHPA策略:kubectl delete cronfederatedhpa cron-federated-hpa