请求驱动计算
是 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
调整相关配置
图片参考
说明:
- 初次请求由 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 应用程序或框架一起运行的灵活和安全的选择