wordpress 工具栏图标,做搜狗手机网站优化软,网站建设的说辞,网站备案资料表简介#xff1a; Knative 提供了基于流量的自动扩缩容能力#xff0c;可以根据应用的请求量#xff0c;在高峰时自动扩容实例数#xff1b;当请求量减少以后#xff0c;自动缩容实例#xff0c;做到自动化地节省资源成本。此外#xff0c;Knative 还提供了基于流量的灰度…简介 Knative 提供了基于流量的自动扩缩容能力可以根据应用的请求量在高峰时自动扩容实例数当请求量减少以后自动缩容实例做到自动化地节省资源成本。此外Knative 还提供了基于流量的灰度发布能力可以将流量的百分比进行灰度发布。 作者 | 李鹏元毅 来源 | Serverless 公众号
一、Knative
Knative 提供了基于流量的自动扩缩容能力可以根据应用的请求量在高峰时自动扩容实例数当请求量减少以后自动缩容实例做到自动化地节省资源成本。此外Knative 还提供了基于流量的灰度发布能力可以将流量的百分比进行灰度发布。
在介绍 Knative 灰度发布和自动弹性之前先带大家了解一下 ASK Knative 中的流量请求机制。 如上图所示整体的流量请求机制分为以下部分
左侧是 Knative Service 的版本信息可以对流量设置百分比下面是路由策略在路由策略里通过 Ingress controller 将相应的路由规则设置到阿里云 SLB右侧是对应创建的服务版本 Revision在版本里对应有 Deployment 的资源当流量通过 SLB 进来之后直接根据相应的转发规则转到后端服务器 Pod 上。
除了流量请求机制外上图还展示了相应的弹性策略如 KPA、HPA 等。
二、Service 生命周期
Service 是直接面向开发者操作的资源对象包含两部分的资源Route 和 Configuration。 如上图所示用户可以通过配置 Configuration 里面的信息设置相应的镜像、内容以及环境变量信息。
1. Configuration Configuration 是
管理容器期望的状态类似版本控制器每次更新 Configuration 都会创建新的版本Revision。
如上图所示与 Knative Service 相比较Configuration 和它的配置很接近Configuration 里配置的就是容器期望的资源信息。
2. Route Route 可以
控制流量分发到不同的版本Revision支持按照百分比进行流量分发。
如上图所示一个 Route 资源下面包括一个 traffic 信息traffic 里面可以设置对应的版本和每个版本对应的流量比例。
3. Revision 一个 Configuration 的快照版本追踪、回滚。
Knative Service 中版本管理的资源Revision它是 Configuration 的快照每次更新 Configuration 就会创建一个新的 Revision可以通过 Revision 实现版本追踪、灰度发布以及回滚。在 Revision 资源里面可以直接地看到配置的镜像信息。
三、基于流量的灰度发布 如上图所示假如一开始我们创建了 V1 版本的 Revision这时如果有新的版本变更那么我们只需要更新 Service 中的 Configuration就会相应的创建出 V2 版本。然后通过 Route 对 V1 和 V2 设置不同的流量比例上图中 V1 是 70%V2 是 30%流量会按照 7:3 的比例分别分发到两个版本上。一旦 V2 版本验证没有问题接下来就可以通过调整流量比例的方式进行继续灰度直到新的版本 V2 达到 100%。
在灰度的过程中一旦发现新版本有异常随时可以调整流量比例进行回滚。假设灰度到 30% 的时候发现 V2 版本有问题我们就可以把比例调回去在原来的 V1 版本上设置流量 100%实现回滚操作。
除此之外我们还可以在 Route 中通过 traffic 对 Revision 打上一个 Tag打完 Tag 之后在 Knative 中会自动对当前的 Revision 生成一个可直接访问的 URL通过这个 URL 我们可以直接把相应的流量打到当前的某一个版本上去这样可以实现对某个版本的调试。
四、自动弹性
在 Knative 中提供了丰富的弹性策略除此之外ASK Knative 中还扩展了一些相应的弹性机制接下来分别介绍以下几个弹性策略
Knative Pod 自动扩缩容 KPAPod 水平自动扩缩容 HPA支持定时 HPA 的自动扩缩容策略事件网关基于流量请求的精准弹性扩展自定义扩缩容插件。
1. 自动扩缩容-KPA 图Knative Pod 自动扩缩容KPA
如上图所示Route 可以理解成流量网关Activator 在 Knative 中承载着 0~1 的职责当没有请求流量时 Knative 会把相应的服务挂到 Activator Pod 上面一旦有第一个流量进来首先会进入到 ActivatorActivator 收到流量之后会通过 Autoscaler 扩容 Pod扩容完成之后 Activator 把请求转发到相应的 Pod 上去。一旦 Pod ready 之后那么接下来相应的服务会通过 Route 直接打到 Pod 上面去这时 Activator 已经结束了它的使命。
在 1~N 的过程中Pod 通过 kube-proxy 容器可以采集每个 Pod 里面的请求并发指数也就是请求指标。Autoscaler 根据这些请求指标进行汇聚计算相应的需要的扩容数实现基于流量的最终扩缩容。
2. 水平扩缩容-HPA 图Pod 水平自动扩缩容HPA
它其实是将 K8s 中原生的 HPA 做了封装通过 Revision 配置相应的指标以及策略使用 K8s 原生的 HPA支持 CPU、Memory 的自动扩缩容。
3. 定时HPA 融合 提前规划容量进行资源预热与 CPU、Memory 进行结合。
在 Knative 之上我们将定时与 HPA 进行融合实现提前规划容量进行资源预热。我们在使用 K8s 时可以体会到通过 HPA 进行扩容时等指标阈值上来之后再进行扩容的话有时满足不了实际的突发场景。对于一些有规律性的弹性任务可以通过定时的方式提前规划好某个时间段需要扩容的量。
我们还与 CPU、Memory 进行结合。比如某个时间段定时设置为 10 个 Pod但是当前 CPU 对阈值计算出来需要 20 个 Pod这时会取二者的最大值也就是 20 个 Pod 进行扩容这是服务稳定性的最基本保障。
4. 事件网关 基于请求数自动弹性1 对 1 任务分发。
事件网关是基于流量请求的精准弹性。当事件进来之后会先进入到事件网关里面我们会根据当前进来的请求数去扩容 Pod扩容完成之后会产生将任务和 Pod 一对一转发的诉求。因为有时某个 Pod 同一时间只能处理一个请求这时候我们就要对这种情况进行处理也就是事件网关所解决的场景。
5. 自定义扩缩容插件 自定义扩缩容插件有 2 个关键点
采集指标调整 Pod 实例数。
指标从哪来像 Knative 社区提供的基于流量的 KPA它的指标是通过一个定时的任务去每个 Pod 的 queue-proxy 容器中拉取 Metric 指标。通过 controller 对获取这些指标进行处理做汇聚并计算需要扩容多少 Pod。 怎么执行扩缩容其实通过调整相应的 Deployment 里面的 Pod 数即可。
调整采集指标和调整 Pod 实例数实现这两部分后就可以很容易地实现自定义扩缩容插件。
五、实操演示
下面进行示例演示演示内容主要有
基于流量的灰度发布基于流量的自动扩缩容
演示过程观看链接https://developer.aliyun.com/live/246127
作者简介 李鹏花名元毅阿里云容器平台高级开发工程师2016 年加入阿里 深度参与了阿里巴巴全面容器化、连续多年支持双十一容器化链路。专注于容器、Kubernetes、Service Mesh 和 Serverless 等云原生领域致力于构建新一代 Serverless 平台。当前负责阿里云容器服务 Knative 相关工作。
原文链接
本文为阿里云原创内容未经允许不得转载。