
Kubernetes 彻底火了,这把开源之火烧到了所有互联网大厂。许多分析机构认为,以 Kubernetes 为基础的云原生架构,很可能是云计算下一个十年发展的关键。
船长在容器编排方面从业数年,借着这股东风,给大家讲讲 Kubernetes 一个很重要的自动伸缩组件,也是目前社区比较火热的一个项目:Kubernetes Event-Driven Autoscaling (KEDA),中文名叫 Kubernetes 基于事件驱动的自动伸缩。这个名字好长有没有,咱业内将其简称为 KEDA。
1. 既生瑜何生亮

Kubernetes 本身自带了一个自动伸缩组件:Horizontal Pod Autoscaler (HPA)。为什么有了 HPA,还非得要 KEDA 呢?主要是 HPA 这哥们天生有缺陷,无法基于灵活的事件源进行伸缩:
02:
03:
HPA 的每种指标收集器只能配置一个,还需添加指标转换器让 HPA 识别指标。虽然社区也提供了相应的转换组件,但是会导致调用链路拉长,同时也增加了响应延时和排错的复杂性。而使用 KEDA 立马改观,可以大大简化这一流程。
2. KEDA 具体干啥?

Deployment 或 StatefulSet 伸缩

点击上方图片,打开小程序,『美团外卖』红包天天免费领!
3. 组件与原理

Metrics Adapter
将 Scaler 获取的指标转化成 HPA 可以使用的格式并传递给 HPAController
负责创建和更新一个 HPA 对象,并负责扩缩到零Scaler
连接到外部组件(例如 Prometheus)获取指标
3.1. Metrics Adapter
3.2. Controller
3.3. Scaler
Apache Kafka:基于 Kafka topic lag
Redis:基于 Redis 列表的长度
Prometheus:基于 PromQL 查询的结果
4. 代码用例

添加 Helm Repo
helm repo add kedacore https://kedacore.github.io/chart更新 Helm Repo
helm repo update安装
KEDA
Helm chart
kubectl create namespace kedahelm install keda kedacore/keda --namespace keda
apiVersion: apps/v1kind: Deploymentmetadata: name: httpserverspec: replicas: 1 selector: matchLabels: app: httpserver template: metadata: labels: app: httpserver spec: containers: - name: httpserver image: httpserver # 镜像需自己编写,并暴露对应的指标 imagePullPolicy: Always---apiVersion: v1kind: Servicemetadata: name: httpserver labels: app: httpserver annotations: # prometheus 服务发现规则 prometheus.io/scrape: "true" prometheus.io/path: "/metrics" prometheus.io/port: "http"spec: type: ClusterIP ports: - port: 80 protocol: TCP name: http selector: app: httpserver
创建一个 ScaledObject
apiVersion: keda.sh/v1alpha1kind: ScaledObjectmetadata:name: prometheus-scaledobjectnamespace: defaultspec:scaleTargetRef:name: httpserver # ScaledObject 绑定的 Deployment 名字pollingInterval: 20 # 检查每个触发器的时间间隔minReplicaCount: 1 # 最小副本数,可以缩小到零maxReplicaCount: 10 # 最大副本数triggers:- type: prometheus # 使用的事件源metadata: # 触发器的属性serverAddress: http://promethes_ur1:port/metricName: httpserver_requests_totalthreshold: '1'query: sum(rate(httpserver_requests_total[1m]))authenticationRef:name: promethes-auth-secret # 用于事件源身份验证
eployment进行自动伸缩。
5. KEDA 社区
本文转载自:「道客船长」,原文:https://tinyurl.com/4dsjf428,版权归原作者所有。欢迎投稿,投稿邮箱: editor@hi-linux.com。


你可能还喜欢
点击下方图片即可阅读
Linux 技能不再是第一需求?Linux 基金会 2021 最新开源工作报告:云原生市场需求成最热
点击上方图片,『美团|饿了么』外卖红包天天免费领

更多有趣的互联网新鲜事,关注「奇妙的互联网」视频号全了解!





