Skip to main content
版本:2.7.1

弹性伸缩管理

1. 背景说明

弹性伸缩管理用于在 Kubernetes 环境中调整 ShenYu Bootstrap Deployment 的副本数。ShenYu Admin 支持按固定时间策略伸缩,也支持根据 Prometheus 指标规则动态伸缩。

该功能默认关闭。只有在 ShenYu Admin 能访问 Kubernetes API Server,并且具备更新目标 Deployment scale 子资源权限时,才建议开启。

2. 配置

application.yml 中开启弹性伸缩管理:

shenyu:
k8s:
scale:
enabled: true
monitor-interval: 10000
pool-size: 6
prometheus:
url: http://localhost:9090
queries:
cpu_usage: "sum(rate(container_cpu_usage_seconds_total{namespace='%s', pod=~'%s.*'}[5m]))"
memory_usage: "sum(container_memory_usage_bytes{namespace='%s', pod=~'%s.*'})"
request_count: "sum(rate(http_requests_total{namespace='%s', pod=~'%s.*'}[1m]))"
deployment:
name: "shenyu-bootstrap"
namespace: "shenyu"
apiServer: "https://127.0.0.1:6443"
token: "token"
caCertPath: "/etc/kubernetes/pki/ca.crt"

配置说明:

配置项说明
shenyu.k8s.scale.enabled是否启用 Kubernetes 弹性伸缩管理,默认值为 false
shenyu.k8s.scale.monitor-interval指标轮询间隔,单位为毫秒。
shenyu.k8s.scale.pool-size伸缩监控任务线程池大小。
shenyu.k8s.prometheus.urlPrometheus 服务地址。
shenyu.k8s.prometheus.queries伸缩规则使用的 PromQL 模板。
shenyu.k8s.deployment.name目标 Kubernetes Deployment 名称。
shenyu.k8s.deployment.namespace目标 Deployment 所在命名空间。
shenyu.k8s.deployment.apiServerKubernetes API Server 地址。
shenyu.k8s.deployment.token访问 Kubernetes API Server 的 Service Account token。
shenyu.k8s.deployment.caCertPathKubernetes API Server CA 证书路径。

3. 固定伸缩策略

在 ShenYu Admin 中选择【系统管理】-【弹性伸缩管理】。

伸缩策略用于在指定时间范围内设置固定的 Bootstrap 副本数。策略字段包括:

字段说明
Sort策略优先级。
Status1 表示启用,0 表示禁用。
NumBootstrap 目标副本数。
Begin Time策略开始生效时间。
End Time策略停止生效时间。

当启用状态的策略处于生效时间范围内时,ShenYu Admin 会将目标 Deployment 调整到配置的副本数。

4. 动态伸缩规则

伸缩规则用于为指标设置上限和下限。规则字段包括:

字段说明
Metric Name指标名称,必须与 shenyu.k8s.prometheus.queries 下的 key 保持一致。
Type指标来源类型,0 表示 ShenYu,1 表示 Kubernetes,2 表示其他。
Sort规则优先级。
Status1 表示启用,0 表示禁用。
Minimum采集到的指标值低于该值时,ShenYu Admin 会缩容一个副本。
Maximum采集到的指标值高于该值时,ShenYu Admin 会扩容一个副本。

动态伸缩会使用指标名称对应的 Prometheus 查询模板,查询模板会接收目标 Kubernetes namespace 和 Deployment name。

5. 注意事项

  • 开启弹性伸缩前需要先配置 Kubernetes RBAC,确保 token 具备读取和更新目标 Deployment scale 的权限。
  • 伸缩规则中的指标名称必须与 shenyu.k8s.prometheus.queries 中配置的 key 保持一致。
  • 生产环境建议先使用保守阈值,并结合伸缩历史确认行为符合预期。