Flagger on ASM——基于Mixerless Telemetry实现渐进式灰度发布系列 2 应用级扩缩容

简介: 应用级扩缩容是相对于运维级而言的。像监控CPU/内存的利用率就属于应用无关的纯运维指标,针对这种指标进行扩缩容的HPA配置就是运维级扩缩容。而像请求数量、请求延迟、P99分布等指标就属于应用相关的,或者叫业务感知的监控指标。 本篇将介绍3种应用级监控指标在HPA中的配置,以实现应用级自动扩缩容。

应用级扩缩容是相对于运维级而言的。像监控CPU/内存的利用率就属于应用无关的纯运维指标,针对这种指标进行扩缩容的HPA配置就是运维级扩缩容。而像请求数量、请求延迟、P99分布等指标就属于应用相关的,或者叫业务感知的监控指标。

本篇将介绍3种应用级监控指标在HPA中的配置,以实现应用级自动扩缩容。

Setup HPA

1 部署metrics-adapter

执行如下命令部署kube-metrics-adapter(完整脚本参见:demo_hpa.sh)。:

helm --kubeconfig "$USER_CONFIG" -n kube-system install asm-custom-metrics \$KUBE_METRICS_ADAPTER_SRC/deploy/charts/kube-metrics-adapter \--set prometheus.url=http://prometheus.istio-system.svc:9090

执行如下命令验证部署情况:

#验证POD
kubectl --kubeconfig "$USER_CONFIG" get po -n kube-system | grep metrics-adapterasm-custom-metrics-kube-metrics-adapter-6fb4949988-ht8pv   1/1     Running     0          30s#验证CRD
kubectl --kubeconfig "$USER_CONFIG" api-versions | grep "autoscaling/v2beta"autoscaling/v2beta1
autoscaling/v2beta2#验证CRD
kubectl --kubeconfig "$USER_CONFIG" get --raw "/apis/external.metrics.k8s.io/v1beta1" | jq .{"kind": "APIResourceList","apiVersion": "v1","groupVersion": "external.metrics.k8s.io/v1beta1","resources": []
}

2 部署loadtester

执行如下命令部署flagger loadtester:

kubectl --kubeconfig "$USER_CONFIG" apply -f $FLAAGER_SRC/kustomize/tester/deployment.yaml -n test
kubectl --kubeconfig "$USER_CONFIG" apply -f $FLAAGER_SRC/kustomize/tester/service.yaml -n test

3 部署HPA

3.1 根据应用请求数量扩缩容

首先我们创建一个感知应用请求数量(istio_requests_total)的HorizontalPodAutoscaler配置:

apiVersion: autoscaling/v2beta2
kind: HorizontalPodAutoscaler
metadata:name: podinfo-totalnamespace: testannotations:metric-config.external.prometheus-query.prometheus/processed-requests-per-second: |sum(rate(istio_requests_total{destination_workload_namespace="test",reporter="destination"}[1m]))
spec:maxReplicas: 5minReplicas: 1scaleTargetRef:apiVersion: apps/v1kind: Deploymentname: podinfometrics:- type: Externalexternal:metric:name: prometheus-queryselector:matchLabels:query-name: processed-requests-per-secondtarget:type: AverageValueaverageValue: "10"

执行如下命令部署这个HPA配置:

kubectl --kubeconfig "$USER_CONFIG" apply -f resources_hpa/requests_total_hpa.yaml

执行如下命令校验:

kubectl --kubeconfig "$USER_CONFIG" get --raw "/apis/external.metrics.k8s.io/v1beta1" | jq .

结果如下:

{"kind": "APIResourceList","apiVersion": "v1","groupVersion": "external.metrics.k8s.io/v1beta1","resources": [{"name": "prometheus-query","singularName": "","namespaced": true,"kind": "ExternalMetricValueList","verbs": ["get"]}]
}

类似地,我们可以使用其他维度的应用级监控指标配置HPA。举例如下,不再冗述。

3.2 根据平均延迟扩缩容

apiVersion: autoscaling/v2beta2
kind: HorizontalPodAutoscaler
metadata:name: podinfo-latency-avgnamespace: testannotations:metric-config.external.prometheus-query.prometheus/latency-average: |sum(rate(istio_request_duration_milliseconds_sum{destination_workload_namespace="test",reporter="destination"}[1m]))/sum(rate(istio_request_duration_milliseconds_count{destination_workload_namespace="test",reporter="destination"}[1m]))
spec:maxReplicas: 5minReplicas: 1scaleTargetRef:apiVersion: apps/v1kind: Deploymentname: podinfometrics:- type: Externalexternal:metric:name: prometheus-queryselector:matchLabels:query-name: latency-averagetarget:type: AverageValueaverageValue: "0.005"

3.3 根据P95分布扩缩容

apiVersion: autoscaling/v2beta2
kind: HorizontalPodAutoscaler
metadata:name: podinfo-p95namespace: testannotations:metric-config.external.prometheus-query.prometheus/p95-latency: |histogram_quantile(0.95,sum(irate(istio_request_duration_milliseconds_bucket{destination_workload_namespace="test",destination_canonical_service="podinfo"}[5m]))by (le))
spec:maxReplicas: 5minReplicas: 1scaleTargetRef:apiVersion: apps/v1kind: Deploymentname: podinfometrics:- type: Externalexternal:metric:name: prometheus-queryselector:matchLabels:query-name: p95-latencytarget:type: AverageValueaverageValue: "4"

验证HPA

1 生成负载

执行如下命令产生实验流量,以验证HPA配置自动扩容生效。

alias k="kubectl --kubeconfig $USER_CONFIG"
loadtester=$(k -n test get pod -l "app=flagger-loadtester" -o jsonpath='{.items..metadata.name}')
k -n test exec -it ${loadtester} -c loadtester -- hey -z 5m -c 2 -q 10 http://podinfo:9898

这里运行了一个持续5分钟、QPS=10、并发数为2的请求。

hey命令详细参考如下:

Usage: hey [options...] <url>Options:-n  Number of requests to run. Default is 200.-c  Number of workers to run concurrently. Total number of requests cannotbe smaller than the concurrency level. Default is 50.-q  Rate limit, in queries per second (QPS) per worker. Default is no rate limit.-z  Duration of application to send requests. When duration is reached,application stops and exits. If duration is specified, n is ignored.Examples: -z 10s -z 3m.-o  Output type. If none provided, a summary is printed."csv" is the only supported alternative. Dumps the responsemetrics in comma-separated values format.-m  HTTP method, one of GET, POST, PUT, DELETE, HEAD, OPTIONS.-H  Custom HTTP header. You can specify as many as needed by repeating the flag.For example, -H "Accept: text/html" -H "Content-Type: application/xml" .-t  Timeout for each request in seconds. Default is 20, use 0 for infinite.-A  HTTP Accept header.-d  HTTP request body.-D  HTTP request body from file. For example, /home/user/file.txt or ./file.txt.-T  Content-type, defaults to "text/html".-a  Basic authentication, username:password.-x  HTTP Proxy address as host:port.-h2 Enable HTTP/2.-host HTTP Host header.-disable-compression  Disable compression.-disable-keepalive    Disable keep-alive, prevents re-use of TCPconnections between different HTTP requests.-disable-redirects    Disable following of HTTP redirects-cpus                 Number of used cpu cores.(default for current machine is 4 cores)

2 自动扩容

执行如下命令观察扩容情况:

watch kubectl --kubeconfig $USER_CONFIG -n test get hpa/podinfo-total

结果如下:

Every 2.0s: kubectl --kubeconfig /Users/han/shop_config/ack_zjk -n test get hpa/podinfo                                            East6C16G: Tue Jan 26 18:01:30 2021NAME      REFERENCE            TARGETS           MINPODS   MAXPODS   REPLICAS   AGE
podinfo   Deployment/podinfo   10056m/10 (avg)   1         5         2          4m45s

另外两个HPA类似,命令如下:

kubectl --kubeconfig $USER_CONFIG -n test get hpawatch kubectl --kubeconfig $USER_CONFIG -n test get hpa/podinfo-latency-avg
watch kubectl --kubeconfig $USER_CONFIG -n test get hpa/podinfo-p95

3 监控指标

同时,我们可以实时在Prometheus中查看相关的应用级监控指标的实时数据。示意如下:

10dbef80efc092ca2014ac32f3d78aa7.png

原文链接

本文为阿里云原创内容,未经允许不得转载。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/513773.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

自动替换 Kubernetes 镜像

来源&#xff1a;云原生指北作者&#xff1a;Addo Zhang最近萌生了个想法&#xff0c;维护一个后网络友好的仓库镜像&#xff0c;在 Pod 创建时将镜像仓库切换到自维护的仓库&#xff0c;从自维护的仓库拉取镜像。前几天体验了极狐Gitlab 的容器镜像库&#xff0c;便是为这个想…

Flagger on ASM——基于Mixerless Telemetry实现渐进式灰度发布系列 3 渐进式灰度发布

简介&#xff1a; 作为CNCF[成员](https://landscape.cncf.io/card-mode?categorycontinuous-integration-delivery&groupingcategory&selectedweave-flagger)&#xff0c;[Weave Flagger](flagger.app)提供了持续集成和持续交付的各项能力。Flagger将渐进式发布总结为…

react 使用 leaflet 百度地图_【React】react项目中应用百度地图添加起始点绘制路线...

如图&#xff1a;项目中百度地图的应用添加起始点、终点并绘制路线在展示代码的时候首先展示一下后台返回给我的接口{其中position_list参数代表的是用户的行驶点&#xff0c; area参数代表的是服务区的坐标点&#xff0c;下面会用到参数下面开始展示代码了index.html引入百度地…

基线长度中误差的计算_电子战支援实施中的测向技术

派遣一个机载电子战机组执行支援压制敌防空系统任务&#xff0c;在任务计划阶段&#xff0c;全体人员将会获取任务区域内的EOB&#xff0c;机载电子战人员会优先识别他们在任务期间可能会遇到的威胁辐射源&#xff0c;以及其他中立、友好辐射源。当机载电子战人员进入目标作战区…

洞察设计模式的底层逻辑

简介&#xff1a; 设计模式是开发同学经常聊到的话题&#xff0c;也经常被用到实际的开发项目中&#xff0c;熟练的人可以做到信手拈来&#xff0c;不熟悉的人陷入苦思冥想中。笔者认为&#xff0c;不仅仅要掌握设计模式的用法&#xff0c;更要洞察设计模式的底层逻辑&#xff…

pta段错误是什么意思_用Python执行Django数据迁移时报!(1091错误及解决方法)...

前言&#xff1a;今天为大家带来的内容是用Python执行Django数据迁移时报!(1091错误及解决方法)本文内容具有不错的参考意义&#xff0c;希望在此能够帮助到大家&#xff01;前几天在Pycharm 中的Terminal下&#xff0c;执行数据迁移操作时&#xff1a;第一步&#xff1a; Pyth…

cad大理石填充图案_CAD制图初学入门者必须知道的CAD填充问题

在使用浩辰CAD软件绘制图纸的过程中&#xff0c;经常会用到CAD填充功能。但是CAD制图初学入门者在进行CAD填充时偶尔会遇到一些问题&#xff0c;比如在自己的CAD软件中填充是完整的&#xff0c;但是在别人的CAD软件中打开却出现了缺口&#xff0c;这是什么原因呢&#xff1f;接…

苹果:iOS 比 Android 更安全!

整理 | 祝涛 出品 | CSDN据报道&#xff0c;在答复欧盟委员会数字市场行动的函件中&#xff0c;苹果援引诺基亚2019年、2020年的威胁情况报告称&#xff0c;安卓平台恶意软件的数量是iPhone的15~47倍。苹果称iOS比安卓安全就在于无法绕过商店安装软件&#xff0c;因此坚决…

日志服务SLS 助力识货 APP,解决业务数据采集查询监控问题

简介&#xff1a; 日志服务SLS 助力识货 APP&#xff0c;解决业务数据采集查询监控问题 更多存储标杆案例 欢迎点击下方链接查看 阿里云存储标杆案例样板间 公司介绍 识货APP是虎扑体育旗下的导购应用&#xff0c;致力于为广大年轻用户提供专业的网购决策指导&#xff0c;为…

html5 烟雾,jQuery烟雾背景发生器(HTML5 Canvas插件waterpipe.js

插件描述&#xff1a;waterpipe.js是一个创建烟雾弥漫的背景,有多种效果可选择&#xff0c;自定义参数效果还是挺酷的哦&#xff01;使用方法1、包括jQuery和waterpipe.js2、创建画布元素内包装Your browser does not support HTML5 canvas.3、创建画布元素内包装var smokyBG …

数据仓库分层存储技术揭秘

简介&#xff1a; 本文介绍数据仓库产品作为企业中数据存储和管理的基础设施&#xff0c;在通过分层存储技术来降低企业存储成本时的关键问题和核心技术。 作者 | 沄浩、士远 来源 | 阿里技术公众号 一 背景 据IDC发布的《数据时代2025》报告显示&#xff0c;全球每年产生的数…

cups支持的打印机列表_网络存储让你的打印机瞬间变无线,打印文件不用愁

无论是公司的文件、合同还是学校的教材作业总有需要打印的而且还需要满足手机、电脑等设备的无线打印不然文件来回拷贝实在是太麻烦了只要打印机搭配群晖NAS旧打印机也能上岗再就业轻松实现无线打印&#xff01;话不多说&#xff0c;这就开始教大家如何使用&#xff01;先确认一…

python同时输出多个值_怎样在python中输出多个数组元素?

展开全部 如果2113要输出多个列表元素&#xff0c;实际上是列表的分片5261或者说是切片。 以下代码运4102行通过&#xff1a;12list [a, b, mpilgrim, z, example]print(\n, list[0:3]) 运行效1653果&#xff1a;1.python输出一维矩阵或numpy数组中的非0元素 import numpy as …

网游云上网络优化方案

简介&#xff1a; 网游云上网络优化方案1. 游戏行业背景 1.1 行业概况 2019全球数字游戏营收1094亿美元&#xff0c;其中中国市场328亿美元。国内游戏⽤户数6.5亿&#xff1b;移动端 (60%)>PC端>主机。移动游戏占⽐逐年增⻓已成为绝对的主流。国内公司近3万&#xff0c;近…

云栖大会展出两款一体机,搭载新一代无影融合架构

10月18日云栖大会开放日上&#xff0c;阿里云基于新一代无影架构的两款一体机已对观众展出。两款新品分为23.8寸标准版和27寸Pro版&#xff0c;Pro版为手绘场景配有触控屏和触控笔&#xff0c;官方介绍为首款设计师云电脑。 在云栖大会展区&#xff0c;观众已经可以对一体机进…

ansys如何删除线_绘画新手不懂如何用ps提取线稿?教你用PS提取自己喜欢的线稿!...

绘画新手不懂如何用ps提取线稿&#xff1f;初学者如何自学绘画&#xff1f;自学板画难吗&#xff1f;怎样才能学习好绘画&#xff1f;想必这些都是绘画初学者们经常在想的问题吧&#xff0c;就是不知道如何才能学习好绘画&#xff0c;然后绘画出自己想要画的东西那么今天灵猫课…

Service Mesh 从“趋势”走向“无聊”

简介&#xff1a; 过去一年&#xff0c;阿里巴巴在 Service Mesh 的探索道路上依旧扎实前行&#xff0c;这种坚定并非只因坚信 Service Mesh 未来一定是云计算基础技术的关键组成部分&#xff0c;还因需要借这一技术趋势去偿还过去所积累下来的技术债&#xff08;“技术债”并非…

python增加一列数据_python数据怎么添加列?

python在DataFrame数据中添加列的方法&#xff1a; 1、使用concat方法在数据中添加列 concat方法相当于数据库中的全连接&#xff08;union all&#xff09;&#xff0c;它不仅可以指定连接的方式&#xff08;outer join或inner join&#xff09;还可以指定按照某个轴进行连接。…

开源 1 年半 star 破 1.2 万的 Dapr 是如何在阿里落地的?

简介&#xff1a; Dapr 是 2019 年 10 月微软开源的可移植、事件驱动分布式运行时&#xff0c;它使开发人员能够轻松地构建运行在云平台和边缘的弹性而微服务化的无状态和有状态的应用程序&#xff0c;从而降低基于微服务架构构建现代云原生应用的准入门槛。 作者 | 敖小剑 来源…

cron 每年执行一次_crontab服务执行定时脚本,在指定时间内让php执行处理业务逻辑...

技小白 2019-12-19 11:45:33crontab-e编辑某个用户的cron服务设置执行脚本crontab-l列出某个用户cron服务列表信息crontab-r删除某个用户的cron服务定时任务crontab格式分小时日月星期命令******0-590-231-311-120-6command注&#xff1a;“*”代表取值范围内的数字“/”代表每…