Knative 灰度发布和自动弹性(二)|学习笔记

本文涉及的产品
函数计算FC,每月15万CU 3个月
简介: 快速学习Knative 灰度发布和自动弹性(一)

开发者学堂课程【如何通过 Knative 轻松实现应用 Serverless 化交付 Knative 灰度发布和自动(二)】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/291/detail/3434


Knative 灰度发布和自动(二)


六、自动弹性 HPA

HPA 能够通过监测到 CPUmemory 版本的使用率,修改相应的 pod 数量,并扩容。在 connect 中集成了 HPA 的能力,通过 outset 的 class 可以选择 HPA 的相应的类型,然后可以设置相应的 CPU 以及 memory 的指标信息。

 

七、如何自定义扩缩容插件。

除了 KPA 和 HPA 在实际运用中,会经常遇到不同的一些指标收集或者扩充策略,这时候就需要自定义一个扩缩容插件,只需要进行一个指标的采集,然后调整采集到指标之后,计算中相应的 pod 实例数,然后修改相应的信息,最终实现一个自定义扩缩容的能力。


八、实例演示

分别介绍一下灰度发布以及自动扩缩容的一个实例。

进入一个终端模式。

首先演示一下灰度发布,这里会创建两个coffee的一个实例,分别对应v1和v2版本。v1版本中打一个 hello coffee v1,然后在v2版本中打一个v2。

首先创建v1版本的一个 coffee。

[root@iZbp1djyqnxhjfv9h9s0edZ serverless]#ls coffee-v1.yaml coffee-v2.yaml test.sh

[root@iZbp1djyqnxhjfv9h9s0edZ serverless]# kubectl apply-f coffee-v1.yaml

service,serving.knative.dev/coffee created[root@iZbp1djyqnxhjfv9h9s0edZ serverles5]#

创建完成,观察一个 pod 的启动情况:[root@iZbp1djyqnxhjfv9h9s0edZ ~]# watch "kubectl get pod"然后可以看到 pod 已经在启动中了。这里启动完服务之后,会做一次访问,访问一下当前的服务是否是v1。

可以看到当前是一v1版本的打印:

[root@iZbpldjyqnxhjfv9h950edZ ~]# cd serverless/[root@iZbp1djyqnxhjfv9h9s0edZ serverless]#ls coffee-v1.yaml coffee-v2.yaml test.sh

[root@iZbp1djyqnxhjfv9h9s0edZ serverless]#

[root@iZbp1djyqnxhjfv9h9s0edZ serverless]#ls coffee-v1.yaml coffee-v2.yaml test.sh

Troot@iZbpldiyqnxhifv9h9s0edZ serverless]# curl -H"hast: coffeedefault.example com"http://60.205.218.122 chtml>

<head><title>503 Service Temporarily Unavailable</title></head><body bgcolor="white">

<center><h1>503 Service Temporarily Unavailable</h1></center><hr><center>nginx</center></body></html>

Troot@iZbp1diyqnxhifv9h9s0edZ serverless]# curl -H"host:coffee.default.example com"http://60.205.218.122 Hello coffee v1!

[root@iZbp1djyqnxhifv9h9s0edZ serverless7# curl -H "host: coffee.default.example. comhttp://60.205.218.122 Hello coffee v1!

[root@iZbpldiyqnxhjfv9h9s0edZ serverless]# curl -H"host:coffee.default.example com"http://60.205.218.122 Hello coffee v1!

[root@iZbp1djyqnxhjfv9h9s0edZ serverless]#

做一次版本的一个变更,换到v2版本。复制一下当前revision,进行v2版本的一个创建,同时会将v2版本和v1版本设置不同的流量比例,这里为了方便区分,可以分别设置50%即可。

[root@iZbp1djygnxhify9h9s0edZ serverles5]#l5 coffee-v1.yaml coffee-v2.yaml test.sh

[root@iZbp1djyqnxhjfv9h9s0edZ serverless]# kubectl apply-fcoffee-v1yaml service.serving.knative.dev/coffee created

[root@iZbp1djyqnxhjfv9h9s0edZserverless]#ls

coffee-v1.yomlcoffee-v2yaml test.sh

[root@iZbp1djyqnxhjfv9h9s0edZ serverless]# kubectl get revision

coffee-9hng7 coffee coffee-9hng7 1 True

[root@iZbp1djyqnxhjfv9h9s0edZ serverless]#ls coffee-v1yaml coffee-v2.yaml test.sh

[root@iZbp1djyqnxhjfv9h9s0edZ serverless]#vicoffee v2.yaml

[root@iZbp1djyqnxhjfv9h9s0edZ serverless]# kubectl apply-fcoffee-v2.yaml

service.serving.knative.dev/coffee configured[root@iZbp1diyqnxhjfy9h9s0edZ serverless]#

因为到时候可以看到50%的一个流量是v2版本,都会一个随机的出现。终端上有一个显示就是一个多了一个波段,这是因为这个时间阶段没有访问,送入了一个保留实例。

把新的版本做出一次变更,更新的v2版本创建了,可以看到v版本的pod开始启动,会访问到v1版本上,并且访问的过程中,可以对之前的一个做一次算是复习。访问之后,会通过线索保留实例,介绍到请求之后,同时会创建一个正常的实例出来。

v2版本起来后,看一下是否可以访问到v2版本, 灰度50%,发现打印v2版本没有问题.

将当前的比例调整一个100%,也就是把新的VR版本调分调成100%,再观察一下流量的一个分配情况。改traffic的值,新的版本改成100%,原来版本是让它设置为0,接着访问,会发现都会到v2版本上去,这就是实现了一个从通过流量比例进行一个灰度发布的流程。

现在已经是v2版本了,接下来会做一个压测,当前默认的是使用基于流量的KPA的一个策略。

[root@iZbp1djyqnxhjfv9h9s0edZ serverless]# hey-z 30s -c 90 --host"coffee,defoult example.com”"http://60.205.218.122/?sleep=100"

可以看到新的一个 VR版本。

NAME READY STATUS RESTARTS AGE 78s

coffee-9hng7-deployment-reserve-64954c7476-b4jwm 2/2 Running

coffee-new-deployment-7fd9ffffd7-2km6l 0/2 Pending 15s

coffee-new-deployment-7fd9ffffd7-2nd29 0/2 Pending 15s

coffee-new-deployment-7fd9ffffd7-4zvrr 2/2 Running 3m35s

coffee-new-deployment-7fd9ffffd7-9ct51 0/2 Pending 25s

caffee-new-deplayment-7fd9ffffd7-bg6x7 0/2 Pending 25s

caffee-new-deplayment-7fd9ffffd7-d4pfg 0/2 Pending 23s

coffee-new-deployment-7fd9ffffd7-qdgsh 0/2 Pending 25s

coffee-new-deployment-7fd9ffffd7-t7l5 0/2 Pending 25s

coffee-new-deployment-7fd9ffffd7-td4xb 0/2 Pending 15s

这个场景其实相当于有新的一个业务过来,根据流量做了一个自动弹性的能力。

 

九、总结

主要内容是基于流量的灰度发布以及增弹性,自动弹性包括平台中基于流量请求的 KPA,以及基于 CPU memory 的一致 KPI 和 HPA,同时也介绍了如何自动扩缩容的一个插件。

相关实践学习
【文生图】一键部署Stable Diffusion基于函数计算
本实验教你如何在函数计算FC上从零开始部署Stable Diffusion来进行AI绘画创作,开启AIGC盲盒。函数计算提供一定的免费额度供用户使用。本实验答疑钉钉群:29290019867
建立 Serverless 思维
本课程包括: Serverless 应用引擎的概念, 为开发者带来的实际价值, 以及让您了解常见的 Serverless 架构模式
相关文章
|
Kubernetes 监控 测试技术
k8s中蓝绿部署、金丝雀发布、滚动更新汇总
k8s中蓝绿部署、金丝雀发布、滚动更新汇总
|
测试技术 微服务 负载均衡
微服务部署:蓝绿部署、滚动部署、灰度发布、金丝雀发布
在项目迭代的过程中,不可避免需要”上线“。上线对应着部署,或者重新部署;部署对应着修改;修改则意味着风险。 目前有很多用于部署的技术,有的简单,有的复杂;有的得停机,有的不需要停机即可完成部署。
2896 0
|
5月前
|
Kubernetes 监控 Java
发布策略:蓝绿部署、金丝雀发布(灰度发布)、AB测试、滚动发布、红黑部署的概念与区别
发布策略:蓝绿部署、金丝雀发布(灰度发布)、AB测试、滚动发布、红黑部署的概念与区别
779 0
|
Kubernetes Perl 容器
OpenKruise中的CloneSet主要用于Pod的自动扩缩容和滚动更新
OpenKruise中的CloneSet主要用于Pod的自动扩缩容和滚动更新
95 1
|
测试技术 Serverless vr&ar
Knative 灰度发布和自动弹性(一)|学习笔记
快速学习 Knative 灰度发布和自动弹性(一)
139 0
Knative 灰度发布和自动弹性(一)|学习笔记
|
测试技术 Serverless vr&ar
Knative 灰度发布和自动弹性|学习笔记(二)
快速学习Knative 灰度发布和自动弹性
Knative 灰度发布和自动弹性|学习笔记(二)
|
测试技术 Serverless vr&ar
Knative 灰度发布和自动弹性|学习笔记(一)
快速学习 Knative 灰度发布和自动弹性
Knative 灰度发布和自动弹性|学习笔记(一)
|
测试技术 Serverless 开发者
SAE 应用分批发布与无损下线的最佳实践|学习笔记
快速学习 SAE 应用分批发布与无损下线的最佳实践
139 0
SAE 应用分批发布与无损下线的最佳实践|学习笔记
|
缓存 分布式计算 Kubernetes
Fluid 0.6 版本发布:数据感知的Pod调度与数据集自动弹性扩缩容
Fluid 是 CNCF 基金会旗下云原生环境中数据密集型应用的高效支撑平台,由南京大学、阿里云云原生团队以及 Alluxio 开源社区联合发起。项目自开源发布以来吸引了众多相关方向领域专家和工程师的关注,在大家的积极反馈下社区不断演进。近期 Fluid 0.6 版本正式发布,在该版本中,Fluid 主要新增改善三个方面的内容。
|
Kubernetes Cloud Native Shell
Knative 之流量灰度和版本管理
本篇主要介绍 Knative Serving 的流量灰度,通过一个 rest-api 的例子演示如何创建多个 Revision、并在不同的 Revision 之间按照流量比例灰度。
Knative 之流量灰度和版本管理