使用keda完成基于事件的弹性伸缩

更新时间:2023-07-30 13:24:39 阅读: 评论:0

福州医保中心使⽤keda完成基于事件的弹性伸缩⽂章中使⽤的是keda 1.5版本,2.0⽬前是beta版本。
1.5版本⽀持deployment,job两种资源。⽽在
2.0增加了StatefulSet以及⾃定义资源
张岱年keda 是⼀个⽀持多种事件源来对应⽤进⾏弹性伸缩的控制器。我觉得keda可以认为是基于HPA的external metrics的⼀种扩展,因为它利⽤了hpa中external metrics的能⼒,允许直接配置多个事件源:
安装keda
├── 00-namespace.yaml
├── 01-rvice_account.yaml
├── 10-cluster_role.yaml
├── 11-role_binding.yaml
├── 12-operator.yaml
├── 20-metrics-cluster_role.yaml
├── 21-metrics-role_binding.yaml
├── 22-metrics-deployment.yaml
├── 23-metrics-rvice.yaml
├── 24-metrics-api_rvice.yaml
└── crds
├── keda.k8s.io_scaledobjects_crd.yaml
it宾格
└── keda.k8s.io_triggerauthentications_crd.yaml
安装:
kubectl apply -f ./crds/
kubectl apply -f .凉面的调料
以prometheus 和cron两个事件源看下如何使⽤
配置 ScaledObject
以Deployment为例,看下ScaledObject⽀持哪些变量
apiVersion: keda.k8s.io/v1alpha1
kind: ScaledObject
metadata:
name: {scaled-object-name}
spec:
scaleTargetRef:
deploymentName: {deployment-name} # must be in the same namespace as the ScaledObject
containerName: {container-name}  #Optional. Default: ainers[0]
pollingInterval: 30  # Optional. Default: 30 conds
cooldownPeriod:  300 # Optional. Default: 300 conds
minReplicaCount: 0  # Optional. Default: 0
maxReplicaCount: 100 # Optional. Default: 100
triggers:
# {list of triggers to activate the deployment}
基于prometheus指标进⾏伸缩
我这⾥有个http demo的应⽤,上报了gin_requests_total指标到prometheus,通过ab请求http接⼝模拟压⼒上升的情况:
这⾥我将minReplicaCount设置为2,因为在没有流量的时候副本数将会被keda设置为0。
apiVersion: keda.k8s.io/v1alpha1
kind: ScaledObject
metadata:
name: prometheus-scaledobject
namespace: default
spec:
scaleTargetRef:
deploymentName: http-demo
minReplicaCount: 2
triggers:
- type: prometheus
metadata:
小组组训rverAddress: 192.168.99.100:31046/
metricName: gin_requests_total
threshold: '2'
query: sum(rate(gin_requests_total{app="http-demo",code="200"}[2m]))
当创建该ScaledObject,我们看到同时创建了⼀个hpa资源:
➜  example kubectl get hpa
NAME                REFERENCE              TARGETS    MINPODS  MAXPODS  REPLICAS  AGE
keda-hpa-http-demo  Deployment/http-demo  0/2 (avg)  2        100      2          70m
通过压测观察hpa资源变化:
> ab  -c 10 -n 1000 127.0.0.1:8080/
Every 1.0s: kubectl get hpa                                                                                      anymore.local: Mon Sep 14 14:23:59 2020
NAME                REFERENCE              TARGETS    MINPODS  MAXPODS  REPLICAS  AGE
keda-hpa-http-demo  Deployment/http-demo  8/2 (avg)  2        100      4          73m
可以看得到随着流量上升,由hpa控制的副本数在上升,这就达到了我们根据流量扩容的⽬的,当流量降下来之后,副本数也减少。组件组成
keda由两个组件组成:
keda operator:负责创建维护hpa对象资源,同时激活和停⽌hpa伸缩。在⽆事件的时候将副本数降低
gre作文题库为0(如果未设置
minReplicaCount的话)
metrics rver: 实现了hpa中external metrics,根据事件源配置返回计算结果。
可以看得到HPA控制了副本1->N和N->1的变化。keda控制了副本0->1和1->0的变化(起到了激活和停⽌的作⽤,对于⼀些消费型的任务副本⽐较有⽤,⽐如在凌晨启动任务进⾏消费)
美国条形码
扩展事件源(external-scalers)
type Scaler interface {
GetMetrics(ctx context.Context, metricName string, metricSelector labels.Selector) ([]external_metrics.ExternalMetricValue, error)
GetMetricSpecForScaling() []v2beta2.MetricSpec
IsActive(ctx context.Context) (bool, error)
荷花描写Clo() error
}
IsActive 在ScaledObject / ScaledJob CRD中定义的pollingInterval上,每隔pollingInterval时间,调⽤IsActive,如果返回true,则将⽐例缩放为1(默认1)
Clo调⽤Clo可以使缩放器清除连接或其他资源。
GetMetricSpec 返回缩放器的HPA定义的⽬标值。
GetMetrics 返回从GetMetricSpec引⽤的指标的值。
在2.0中还多⽀持⼀种PushScaler形式的扩展,允许⽤户主动push来是否开启/停⽌基于事件伸缩
总结
之前⽤过k8s-prometheus-adapter项⽬来进⾏应⽤的⾃定义指标进⾏扩展,对⽐keda感觉keda操作更简单,配置更加动态化,因为抽象了hpa,⽤户直接操作ScaledObject即可,不需要关注hpa如何进⾏配置。
⽽且⽀持将副本数设置为0,同时⼜拥有类似cronhpa(定时伸缩)的功能,扩展能⼒⽐较强。
阅读原⽂体验更加,⽂中链接⽀持跳转

本文发布于:2023-07-30 13:24:39,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/89/1101994.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:副本   事件   伸缩   资源   流量   配置   上升   弹性
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图