Knative 自动扩缩实现

发布时间: 更新时间: 总字数:586 阅读时间:2m 作者: IP上海 分享 网址

请求驱动计算是 Serverless 的核心特性,Knative Pod Autoscaler(KPA)实现 Pod 资源的扩缩。

介绍

Knative 系统中,AutoScaler、Activator 和 Queue-Proxy 三者系统管理应用的规模和匹配流量的规模(通过前面的示例,我们可以看出):

  • 缩容至 0:当没有请求时,Knative 不会分配资源给 KServie(缩容为 0)
  • 接受扩容事件(请求驱动):当来请求时,由 Activator 缓存请求,并通知 AutoScaler
  • 按需扩容:AutoScaler 根据 Revision 中各实例的 Queue-Proxy 报告的调整指标数据动态调整 Revision 中实例的规模
  • 也借助底层 k8s 的 Horizontal Pod Autoscaler (HPA) 实现
  • 可以通过 kubectl -n knative-serving describe cm config-autoscaler 调整相关配置
knative autoscaler

图片参考

说明:

  • 初次请求由 Ingress GW 经 Route 转交给 Activator 进行缓存,同时报告 AutoScaler 进行资源扩缩容
  • Pod ok 后,Activator 将缓存的请求转发至对应的 Pod 对象
  • 若存在 Ok 的 Pod,Ingress GW 经 Route 直接将流量抓发到对应的 Pod,不经过 Activator 缓存
  • 若持续无请求,AutoScaler 根据 Queue-Proxy 的报告一直为 0 时,缩容 Pod 数量为 0

扩展

  • kedacore/keda 是基于 Kubernetes 的事件驱动的自动化组件
    • https://keda.sh/
    • 使用 KEDA,可以根据需要处理的事件数量来驱动 Kubernetes 中任何容器的缩放
    • KEDA 是一种单活力和轻量级组件,可以添加到任何 Kubernetes 群集中
    • KEDA 与标准的 Kubernetes 组件(如水平 Pod Autoscaler)一起工作,可以扩展功能而无需覆盖或重复
    • 使用 KEDA,可以明确地映射要使用事件驱动量表的应用程序,而其他应用程序仍在继续运行
    • 这使 Keda 成为与许多其他 Kubernetes 应用程序或框架一起运行的灵活和安全的选择

参考

  1. https://knative.dev/docs/serving/autoscaling/
Home Archives Categories Tags Statistics
本文总阅读量 次 本站总访问量 次 本站总访客数