You need to enable JavaScript to run this app.
文档中心
容器服务

容器服务

复制全文
下载 pdf
事件驱动伸缩(KEDA)
使用 APIG 网络指标实现弹性伸缩
复制全文
下载 pdf
使用 APIG 网络指标实现弹性伸缩
容器服务支持通过事件驱动的弹性伸缩器组件(KEDA),实现工作负载的弹性伸缩,帮助用户降低使用成本。本文介绍如何基于 API 网关的网络指标,实现工作负载的弹性伸缩。​
背景信息​
KEDA 为容器服务 VKE 支持的事件驱动弹性伸缩组件,支持对接多数据源和从 0 伸缩的能力。能够使用 API 网关提供的网络请求指标,实现工作负载缩容到 0 或从 0 扩容,从而有效降低客户业务的闲时用云成本,增强弹性能力,提高产品竞争力。​
前提条件​
  • 已创建集群,且集群 Kubernetes 版本为 v1.24 及以上。详情请参见 创建集群。​
  • 已在集群中安装 keda 组件,详情请参见 安装组件。​
  • 已在集群中安装 apig-controller 组件,用于对接 API 网关产品。详情请参见 安装组件。​
  • 已创建 VMP 工作区,并开启 Basic Auth 认证。详情请参见 创建工作区。​
  • 集群已开启云原生观测,详情请参见 开启观测。​
操作步骤​
步骤一:创建应用和服务​
在集群中部署应用和服务,本文以 Nginx 为例,示例代码如下:​
​
apiVersion: apps/v1​
kind: Deployment​
metadata:​
name: nginx​
namespace: default​
spec:​
replicas: 2​
selector:​
matchLabels:​
app: nginx​
template:​
metadata:​
labels:​
app: nginx​
spec:​
containers:​
- name: nginx​
image: doc-cn-beijing.cr.volces.com/vke/nginx-demo:v1.0​
ports:​
- containerPort: 80​
---​
apiVersion: v1​
kind: Service​
metadata:​
name: nginx​
namespace: default​
spec:​
internalTrafficPolicy: Cluster​
ipFamilies:​
- IPv4​
ipFamilyPolicy: SingleStack​
ports:​
- name: http​
port: 80​
protocol: TCP​
targetPort: 80​
selector:​
app: nginx​
sessionAffinity: None​
type: ClusterIP​
​
步骤二:创建 APIG Ingress​
在集群中通过控制台创建 APIG Ingress,本文中以域名example.com为例。详细操作方式,请参见 通过控制台创建 APIG Ingress。​
步骤三:开启 APIG 实例观测​
  1. 登录 API 网关控制台。​
  1. 在左侧导航栏选择 实例管理,在实例列表中,单击目标实例名称,进入实例详情页面。​
  1. 选择 监控信息 页签,单击 立即绑定。​
  • ​alt​​
  1. 在弹出的对话框中选择 VMP 工作区,单击 确定。开启 APIG 实例观测,并将监控数据保存在指定的 VMP 工作区中。​
  • ​alt​​
注意​
APIG 实例和 VKE 集群必须绑定同一个 VMP 工作区。​
步骤四:创建 KEDA 伸缩对象​
  1. KEDA 组件安装后,需要使用 Secret 配置 VMP 工作区的 Basic Auth 认证信息,示例如下:​
​
apiVersion: v1​
kind: Secret​
metadata:​
name: keda-prom-secret​
namespace: default​
data:​
username: "YWRtaW4=" # Base64 编码后的 VMP 工作区用户名。例如本例中,"YWRtaW4="表示 admin​
password: "YWRtaW4xMjM0" # Base64 编码后的 VMP 工作区密码。例如本例中,"YWRtaW4xMjM0"表示 admin1234​
​
  1. 为 KEDA 创建鉴权 CRD,用于 KEDA 访问 VMP 工作区。示例如下:​
​
apiVersion: keda.sh/v1alpha1​
kind: TriggerAuthentication​
metadata:​
name: keda-prom-creds​
namespace: default​
spec:​
secretTargetRef:​
- parameter: username​
name: keda-prom-secret​
key: username​
- parameter: password​
name: keda-prom-secret​
key: password​
​
  1. 创建 KEDA 弹性伸缩对象 ScaledObject,其中:​
  • query为查询指标,本例中选择sum(rate(istio_requests_total[1m]))指标,即 APIG 请求总数。request_host表示与 APIG 关联的 APIG Ingress 对应的外部访问地址,本文中为example.com。​
​
apiVersion: keda.sh/v1alpha1​
kind: ScaledObject​
metadata:​
name: apig-scaledobject​
namespace: default​
spec:​
scaleTargetRef:​
name: nginx​
pollingInterval: 15​
# for keda trigger 0->1 关键定义​
idleReplicaCount: 0​
# 副本从 1 缩容到 0 的观察窗口期​
cooldownPeriod: 30​
# cooldownPeriod 首次创建之后触发的观察窗口期​
initialCooldownPeriod: 0​
# 最小副本数(HPA)​
minReplicaCount: 1​
# 最大副本数(HPA)​
maxReplicaCount: 2​
triggers:​
- type: prometheus​
metadata:​
serverAddress: http://query.prometheus-cn-beijing.ivolces.com/workspaces/5c0***​
threshold: '1'​
query: sum(rate(istio_requests_total{request_host="example.com"}[1m])) by (request_host)​
authModes: "basic"​
authenticationRef:​
name: keda-prom-creds​
​
结果验证​
验证工作负载缩容到 0​
  1. 单击左侧导航栏中的 集群。​
  1. 在集群列表页面,单击需要配置的目标集群。​
  1. 在集群管理页面的左侧导航栏中,选择 监控中心 > 监控看板。​
  1. 在左侧看板列表中选择 工作负载监控 > 无状态负载监控,分别选择命名空间和工作负载后,即可查看指定工作负载的监控大盘。​
在监控大盘中可以看到,工作负载创建时配置为 2 个副本,KEDA 弹性伸缩对象创建后,工作负载对应的弹性伸缩指标为 0,所以副本数被调整为 KEDA 弹性伸缩对象 ScaledObject 中idleReplicaCount的值,即自动缩容为 0。​
​alt​​
验证工作负载从 0 扩容​
使用如下命令,通过 APIG Ingress 访问集群中的应用。其中,http://14.***.***.***为 APIG 实例的外部 IP 地址。获取方式,请参见 获取网关地址。​
​
curl -H "Host: example.com" http://14.***.***.***​
​
预期结果如下,由于后端工作负载的副本数为 0,因此无法访问到对应的应用,系统显示后端错误。​
​
no healthy upstream​
​
同时,在 APIG 控制台或 VMP 控制台查看观测大盘或对应指标,均可见请求数量指标。​
​alt​​
​alt​​
当集群中的 KEDA 监听到外部指标上升时,会对后端工作负载从 0 开始扩容。工作负载从 0 开始扩容到 Pod 可用的这段时间内,请求依然不会被响应,时间大约为 15~20 秒。​
扩容完成后,使用如下命令,即可正常访问到集群中的应用。​
​
curl -H "Host: example.com" http://14.***.***.***​
​
预期结果如下,可以正常通过 APIG Ingress 访问到工作负载。​
​
<!DOCTYPE html>​
<html>​
<head>​
<title>Welcome to nginx!</title>​
<style>​
html { color-scheme: light dark; }​
body { width: 35em; margin: 0 auto;​
font-family: Tahoma, Verdana, Arial, sans-serif; }​
</style>​
</head>​
<body>​
<h1>Welcome to nginx!</h1>​
<p>If you see this page, the nginx web server is successfully installed and​
working. Further configuration is required.</p>​
​
<p>For online documentation and support please refer to​
<a href="http://nginx.org/">nginx.org</a>.<br/>​
Commercial support is available at​
<a href="http://nginx.com/">nginx.com</a>.</p>​
​
<p><em>Thank you for using nginx.</em></p>​
</body>​
</html>​
​
在外部请求结束后,工作负载又会被重新缩容到 0,从而有效降低客户业务的闲时用云成本。​
​alt​​
查看弹性伸缩监控大盘,可以看到工作负载扩容和缩容的监控信息。​
​alt​​
​
最近更新时间:2025.10.23 11:11:16
这个页面对您有帮助吗?
有用
有用
无用
无用