TKE 上的业务流量往往是通过 CLB(腾讯云负载均衡器)接入的,有时候希望工作负载能够直接根据 CLB 的监控指标进行伸缩,比如:
KEDA 有很多内置的触发器,但没有腾讯云 CLB 的,不过 KEDA 支持 external 类型的触发器来对触发器进行扩展,keda-tencentcloud-clb-scaler 是基于腾讯云 CLB 监控指标的 KEDA External Scaler,可实现基于 CLB 连接数、QPS 和带宽等指标的弹性伸缩。
helm repo add clb-scaler https://imroc.github.io/keda-tencentcloud-clb-scaler
helm upgrade --install clb-scaler clb-scaler/clb-scaler -n keda \
--set region="ap-chengdu" \
--set credentials.secretId="xxx" \
--set credentials.secretKey="xxx"
region
修改为CLB 所在地域(一般就是集群所在地域),地域列表: https://cloud.tencent.com/document/product/213/6091credentials.secretId
和 credentials.secretKey
是腾讯云账户密钥对,用于查 CLB 监控数据。下面给出一个用于测试的工作负载 YAML 实例:
apiVersion: v1
kind: Service
metadata:
labels:
app: httpbin
name: httpbin
spec:
ports:
- port: 8080
protocol: TCP
targetPort: 80
selector:
app: httpbin
type: LoadBalancer
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: httpbin
spec:
replicas: 1
selector:
matchLabels:
app: httpbin
template:
metadata:
labels:
app: httpbin
spec:
containers:
- image: kennethreitz/httpbin:latest
name: httpbin
部署好后,会自动创建响应的公网 CLB 接入流量,通过以下命令获取对应的 CLB ID:
$ kubectl get svc httpbin -o jsonpath='{.metadata.annotations.service\.kubernetes\.io/loadbalance-id}'
lb-********
记录下获取到的 CLB ID,后续 KEDA 的扩缩容配置需要用到。
基于 CLB 的监控指标通常用于在线业务,通常使用 KEDA 的 ScaledObject
配置弹性伸缩,配置 external
类型的 trigger,并传入所需的 metadata,主要包含以下字段:
scalerAddress
是 keda-operator
调用 keda-tencentcloud-clb-scaler
时使用的地址。loadBalancerId
是 CLB 的实例 ID。metricName
是 CLB 的监控指标名称,公网和内网的大部分指标相同,具体指标列表参考官方文档 公网负载均衡监控指标 和 内网负载均衡监控指标。threshold
是扩缩容的指标阈值,即会通过比较 metricValue / Pod 数量
与 threshold
的值来决定是否扩缩容。listener
是唯一可选的配置,指定监控指标的 CLB 监听器,格式:协议/端口
。apiVersion: keda.sh/v1alpha1
kind: ScaledObject
metadata:
name: httpbin
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: httpbin
pollingInterval: 15
minReplicaCount: 1
maxReplicaCount: 100
triggers:
- type: external
metadata:
scalerAddress: clb-scaler.keda.svc.cluster.local:9000
loadBalancerId: lb-xxxxxxxx
metricName: ClientConnum # 连接数指标
threshold: "100" # 每个 Pod 处理 100 条连接
listener: "TCP/8080" # 可选,指定监听器,格式:协议/端口
apiVersion: keda.sh/v1alpha1
kind: ScaledObject
metadata:
name: httpbin
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: httpbin
pollingInterval: 15
minReplicaCount: 1
maxReplicaCount: 100
triggers:
- type: external
metadata:
scalerAddress: clb-scaler.keda.svc.cluster.local:9000
loadBalancerId: lb-xxxxxxxx
metricName: TotalReq # 每秒连接数指标
threshold: "500" # 平均每个 Pod 支撑 500 QPS
listener: "TCP/8080" # 可选,指定监听器,格式:协议/端口
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。