容器服务支持通过事件驱动的弹性伸缩器组件(KEDA),实现工作负载的弹性伸缩,帮助用户降低使用成本。本文介绍如何基于 API 网关的网络指标,实现工作负载的弹性伸缩。
背景信息
KEDA 为容器服务 VKE 支持的事件驱动弹性伸缩组件,支持对接多数据源和从 0 伸缩的能力。能够使用 API 网关提供的网络请求指标,实现工作负载缩容到 0 或从 0 扩容,从而有效降低客户业务的闲时用云成本,增强弹性能力,提高产品竞争力。
前提条件
- 已创建集群,且集群 Kubernetes 版本为 v1.24 及以上。详情请参见 创建集群。
- 已在集群中安装 keda 组件,详情请参见 安装组件。
- 已在集群中安装 apig-controller 组件,用于对接 API 网关产品。详情请参见 安装组件。
- 已创建 VMP 工作区,并开启 Basic Auth 认证。详情请参见 创建工作区。
操作步骤
步骤一:创建应用和服务
在集群中部署应用和服务,本文以 Nginx 为例,示例代码如下:
步骤二:创建 APIG Ingress
步骤三:开启 APIG 实例观测
- 在左侧导航栏选择 实例管理,在实例列表中,单击目标实例名称,进入实例详情页面。
-
- 在弹出的对话框中选择 VMP 工作区,单击 确定。开启 APIG 实例观测,并将监控数据保存在指定的 VMP 工作区中。
-
注意
APIG 实例和 VKE 集群必须绑定同一个 VMP 工作区。
步骤四:创建 KEDA 伸缩对象
- KEDA 组件安装后,需要使用 Secret 配置 VMP 工作区的 Basic Auth 认证信息,示例如下:
- 为 KEDA 创建鉴权 CRD,用于 KEDA 访问 VMP 工作区。示例如下:
- 创建 KEDA 弹性伸缩对象 ScaledObject,其中:
- serverAddress为 VMP 工作区的 Query 地址,详情请参见 获取工作区地址。
- query为查询指标,本例中选择sum(rate(istio_requests_total[1m]))指标,即 APIG 请求总数。request_host表示与 APIG 关联的 APIG Ingress 对应的外部访问地址,本文中为example.com。
结果验证
验证工作负载缩容到 0
- 在集群管理页面的左侧导航栏中,选择 监控中心 > 监控看板。
- 在左侧看板列表中选择 工作负载监控 > 无状态负载监控,分别选择命名空间和工作负载后,即可查看指定工作负载的监控大盘。
在监控大盘中可以看到,工作负载创建时配置为 2 个副本,KEDA 弹性伸缩对象创建后,工作负载对应的弹性伸缩指标为 0,所以副本数被调整为 KEDA 弹性伸缩对象 ScaledObject 中idleReplicaCount的值,即自动缩容为 0。
验证工作负载从 0 扩容
使用如下命令,通过 APIG Ingress 访问集群中的应用。其中,http://14.***.***.***为 APIG 实例的外部 IP 地址。获取方式,请参见 获取网关地址。 预期结果如下,由于后端工作负载的副本数为 0,因此无法访问到对应的应用,系统显示后端错误。
同时,在 APIG 控制台或 VMP 控制台查看观测大盘或对应指标,均可见请求数量指标。
当集群中的 KEDA 监听到外部指标上升时,会对后端工作负载从 0 开始扩容。工作负载从 0 开始扩容到 Pod 可用的这段时间内,请求依然不会被响应,时间大约为 15~20 秒。
扩容完成后,使用如下命令,即可正常访问到集群中的应用。
预期结果如下,可以正常通过 APIG Ingress 访问到工作负载。
在外部请求结束后,工作负载又会被重新缩容到 0,从而有效降低客户业务的闲时用云成本。
查看弹性伸缩监控大盘,可以看到工作负载扩容和缩容的监控信息。