创建使用自定义指标的HPA策略
Kubernetes默认的HPA策略只支持基于CPU和内存的自动伸缩,在复杂的业务场景中,仅使用CPU和内存使用率指标进行弹性伸缩往往无法满足日常运维需求。通过自定义指标配置工作负载HPA策略,可以根据业务自身特点,通过更多指标实现更灵活的弹性配置。
本文介绍如何部署示例Nginx应用,并通过Prometheus标准方式暴露container_cpu_usage_core_per_second的指标用来标识容器每秒使用CPU核心数。关于Prometheus指标的更多信息,请参见metric_type。
步骤一:安装云原生监控插件
- 登录CCE控制台,单击集群名称进入集群,单击左侧导航栏的“插件中心”。
- 在“插件中心”页面右侧找到云原生监控插件,单击“安装”。
建议您关注以下配置,其他配置可按需进行设置。详情请参见云原生监控插件。
- 数据存储配置:必选本地数据存储,可选监控数据是否对接AOM或三方监控平台。
- 自定义指标采集:该配置在本实践中必须选择开启,否则将无法采集自定义指标。
- 插件配置完成后,单击“安装”。
步骤二:创建示例工作负载
- 登录CCE控制台,单击集群名称进入集群。
- 在集群控制台左侧导航栏中选择“工作负载”,单击右上角“创建工作负载”。创建一个Nginx工作负载,详情请参见创建无状态负载(Deployment)。
步骤三:修改配置文件
- 在集群控制台左侧导航栏中选择“配置与密钥”,切换至“monitoring”命名空间。
- 更新user-adapter-config配置项,通过修改user-adapter-config中rules字段将Prometheus暴露出的指标转换为HPA可关联的指标。
添加以下示例规则:
rules: - seriesQuery: 'container_cpu_usage_seconds_total{namespace!="",pod!=""}' seriesFilters: [] resources: overrides: namespace: resource: namespace pod: resource: pod name: matches: "^(.*)_seconds_total" as: "${1}_core_per_second" metricsQuery: 'sum(rate(<<.Series>>{<<.LabelMatchers>>}[1m])) by (<<.GroupBy>>)'
此配置项示例中,通过现有的container_cpu_usage_seconds_total指标,聚合成 container_cpu_usage_core_per_second 指标,供后续的HPA策略中使用。关于采集规则配置详情请参见Metrics Discovery and Presentation Configuration。
- seriesQuery:PromQL请求数据(用户需要查询的指标,可根据实际情况填写)。
- metricsQuery:对seriesQuery中PromQL请求的数据进行聚合操作。
- resources:是PromQL里的数据Label,与resource进行匹配。此处的resource是指集群内的api-resource,例如Pod、Namespace和Node。您可以通过kubectl api-resources -o wide命令查看。此处Key对应Prometheus数据中的LabelName,请确认Prometheus指标数据中有此LabelName。
- name:指根据正则匹配把Prometheus指标名转为比较可读的指标名,此处将container_cpu_usage_seconds_total转为container_cpu_usage_core_per_second。
- 重新部署monitoring命名空间下的custom-metrics-apiserver工作负载。
- 执行命令查看指标是否添加成功。
kubectl get --raw "/apis/custom.metrics.k8s.io/v1beta1/namespaces/default/pods/*/container_cpu_usage_core_per_second"
步骤四:测试HPA弹性功能
- 单击左侧导航栏的“工作负载”,在目标工作负载的操作列中单击“更多 > 弹性伸缩”。
- 策略类型选择“HPA+CronHPA策略”,并启用HPA策略, 可以直接选择配置在rules里面的自定义指标创建HPA策略。
- 单击工作负载名称,切换至“弹性伸缩”页签查看HPA状态,成功触发HPA策略。