Kubernetes 弹性伸缩HPA功能增强Advanced Horizontal Pod Autoscaler -介绍部署篇 算法360ccms申诉
程序员文章站
2024-01-13 17:09:34
...
背景
--
### WHAT(做什么)
Advanced Horizontal Pod Autoscaler(简称:AHPA)是kubernetes中HPA的功能增强. 在兼容原生HPA功能基础上,增加预测、执行模式配置、缩容控制等功能。用户可以使用AdvancedHorizontalPodAutoscaler对支持scale功能的对象(例如Deployment等)进行弹性伸缩。
### WHY(为什么做)
HPA在使用方面存在不便之处:
* 扩缩模式不灵活:创建HPA后,资源真实扩缩后方可验证可用性
* 扩缩控制存在一定风险,缩容按照目标态单次执行,易造成业务抖动
* 针对规律性强应用,无法进行特殊处理,比如提前备容,降低扩容效率低带来的风险
* 支持指标需要自定义扩展,需要一定开发成本
### How(怎么做)
AHPA功能分为两部分:controller和algorithm。
* controller部分:HPA功能兼容、阈值触发和预测触发结果处理、扩缩模式功能、缩容控制功能等
* algorithm部分:提供一个基于STL + auto-arima的预测算法实现功能
* 整体架构如下:
![image](https://yqfile.alicdn.com/23e69098c3d24658114a0c2494886cf024995db4.png)
使用场景
----
### 周期性规律明显应用成本优化 --提前备容,降低容量风险
针对规律性明显的应用,一般有如下特征:
![image](https://yqfile.alicdn.com/7dcf15a484c4fffec1463c0b8a10c63e5da882ad.png)
上图中,红线表示应用的入网流量(qps),蓝线表示容器数。从图中蓝色可以看出,在qps到来前一段时间(比如:60min)已经开始备容,在qps达到峰值前资源已经ready,降低流量高峰来临时刻备容应用抖动带来的风险;在qps峰值过后,资源缓慢回收(缩容速率线性递减),避免产生浪费。通过上图可以看出,针对规律性明显应用,提前备容,缓慢缩容,最终能够保证应用稳定性的前提下达到成本优化目的。
部署
--
### 前置条件
* helm v2版本大于 v2.11.0+.
* 预测功能依赖"阿里云云监控",需安装"ack-alibaba-cloud-metrics-adapter"组件.
### 安装 && 卸载
#### 安装chart
方式一:进入“容器服务”->"市场"->"应用目录"->"ack-advanced-horizontal-pod-autoscaler"进行安装,如下图:
![image](https://yqfile.alicdn.com/5cc055d2f8bccc7e8cb716eb5f52f1ceaf74b750.png)
方式二:
```
helm install ack-advanced-horizontal-pod-autoscaler -n ahpa
```
![](data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==)![](data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw== "点击并拖拽以移动")
#### 卸载chart
```
helm delete ahpa
```
![](data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==)![](data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw== "点击并拖拽以移动")
### helm参数配置
参数
说明
默认值
ahpa.replicaCount
AHPA controller 副本数
`1`
ahpa.imageTag
AHPA 镜像tag.
`v1.0`
ahpa.imagePullPolicy
AHPA 镜像拉取策略
`Always`
ahpa.ALGORITHM\_SERVICE\_AHPA\_SVC\_HOST
AHPA 算法依赖svc
`algorithm-service`
algorithm.replicaCount
算法服务 副本数
`1`
algorithm.ports
算法服务 端口号
`5000`
algorithm.imageTag
算法服务 镜像tag
`1.0`
algorithm.imagePullPolicy
算法服务 镜像拉取策略
`Always`
alibabaCloudMetricsAdapter.needcreate
是否安装alibaba-cloud-metric-adapter
`true`
crds.needcreate
是否安装crds
`true`
rbac.needcreate
是否配置rbac
`true`
使用
--
### 运行一个AHPA demo
```
apiVersion: autoscaling.alibabacloud.com/v1
kind: AdvancedHorizontalPodAutoscaler
metadata:
labels:
controller-tools.k8s.io: "1.0"
name: ahpa-sample-original-support
namespace: kube-system
spec:
scaleTargetRef:
apiVersion: extensions/v1beta1
kind: Deployment
name: nginx-deploy
selector:
matchLabels:
app: nginx-deploy
minReplicas: 2
maxReplicas: 5
# 扩缩模式,scalingUpOnly:只扩模式,observer:观察模式,auto:扩缩模式
scaleMode: "auto"
# 单位为分钟,预测未来60分钟所需副本数
forecastWindow: 60
metrics:
- type: External
external:
metric:
name: k8s_workload_cpu_util
selector:
matchLabels:
k8s.cluster.id: "xxx"
k8s.workload.name: "nginx-deploy"
k8s.workload.type: "Deployment"
k8s.workload.namespace: "kube-system"
k8s.period: "100"
target:
type: Value
value: 60
```
![](data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==)![](data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw== "点击并拖拽以移动")
AHPA功能增强配置说明 && 指标支持
--------------------
### 功能增强说明
参数
说明
默认值
scaleMode
扩缩模式,scalingUpOnly:只扩模式,observer:观察模式,auto:扩缩模式
"observer"
forecastWindow
预测未来时间窗口(分钟),0表示不使用预测功能
0
### 指标支持
* [Ingress(SLS)](https://yq.aliyun.com/go/articleRenderRedirect?url=https%3A%2F%2Fgithub.com%2FAliyunContainerService%2Falibaba-cloud-metrics-adapter%2Fblob%2Fmaster%2Fdocs%2Fmetrics%2Fsls.md)
* [SLB](https://yq.aliyun.com/go/articleRenderRedirect?url=https%3A%2F%2Fgithub.com%2FAliyunContainerService%2Falibaba-cloud-metrics-adapter%2Fblob%2Fmaster%2Fdocs%2Fmetrics%2Fslb.md)
* [CMS](https://yq.aliyun.com/go/articleRenderRedirect?url=https%3A%2F%2Fgithub.com%2FAliyunContainerService%2Falibaba-cloud-metrics-adapter%2Fblob%2Fmaster%2Fdocs%2Fmetrics%2Fcms.md)
最后
--
Advanced Horizontal Pod Autoscaler可针对周期性规律强的应用进行提前备容,减少扩容资源申请、应用启动耗时带来的容量风险,同时更好的支持扩缩模式和扩缩控制,增加了自动扩缩的业务的可用性。AHPA目前向白名单用户开放,申请地址:[https://page.aliyun.com/form/act946163602/index.htm](https://page.aliyun.com/form/act946163602/index.htm),欢迎大家试用并提新需求。
iPhone 11 Pro、卫衣、T恤等你来抽,马上来试试手气 [https://www.aliyun.com/1111/2019/m-lottery?utm\_content=g\_1000083877](https://link.zhihu.com/?target=https%3A//www.aliyun.com/1111/2019/m-lottery%3Futm_content%3Dg_1000083877)
[原文链接](https://yq.aliyun.com/articles/721299?utm_content=g_1000084430)
本文为云栖社区原创内容,未经允许不得转载。~~~~
--
### WHAT(做什么)
Advanced Horizontal Pod Autoscaler(简称:AHPA)是kubernetes中HPA的功能增强. 在兼容原生HPA功能基础上,增加预测、执行模式配置、缩容控制等功能。用户可以使用AdvancedHorizontalPodAutoscaler对支持scale功能的对象(例如Deployment等)进行弹性伸缩。
### WHY(为什么做)
HPA在使用方面存在不便之处:
* 扩缩模式不灵活:创建HPA后,资源真实扩缩后方可验证可用性
* 扩缩控制存在一定风险,缩容按照目标态单次执行,易造成业务抖动
* 针对规律性强应用,无法进行特殊处理,比如提前备容,降低扩容效率低带来的风险
* 支持指标需要自定义扩展,需要一定开发成本
### How(怎么做)
AHPA功能分为两部分:controller和algorithm。
* controller部分:HPA功能兼容、阈值触发和预测触发结果处理、扩缩模式功能、缩容控制功能等
* algorithm部分:提供一个基于STL + auto-arima的预测算法实现功能
* 整体架构如下:
![image](https://yqfile.alicdn.com/23e69098c3d24658114a0c2494886cf024995db4.png)
使用场景
----
### 周期性规律明显应用成本优化 --提前备容,降低容量风险
针对规律性明显的应用,一般有如下特征:
![image](https://yqfile.alicdn.com/7dcf15a484c4fffec1463c0b8a10c63e5da882ad.png)
上图中,红线表示应用的入网流量(qps),蓝线表示容器数。从图中蓝色可以看出,在qps到来前一段时间(比如:60min)已经开始备容,在qps达到峰值前资源已经ready,降低流量高峰来临时刻备容应用抖动带来的风险;在qps峰值过后,资源缓慢回收(缩容速率线性递减),避免产生浪费。通过上图可以看出,针对规律性明显应用,提前备容,缓慢缩容,最终能够保证应用稳定性的前提下达到成本优化目的。
部署
--
### 前置条件
* helm v2版本大于 v2.11.0+.
* 预测功能依赖"阿里云云监控",需安装"ack-alibaba-cloud-metrics-adapter"组件.
### 安装 && 卸载
#### 安装chart
方式一:进入“容器服务”->"市场"->"应用目录"->"ack-advanced-horizontal-pod-autoscaler"进行安装,如下图:
![image](https://yqfile.alicdn.com/5cc055d2f8bccc7e8cb716eb5f52f1ceaf74b750.png)
方式二:
```
helm install ack-advanced-horizontal-pod-autoscaler -n ahpa
```
![](data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==)![](data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw== "点击并拖拽以移动")
#### 卸载chart
```
helm delete ahpa
```
![](data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==)![](data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw== "点击并拖拽以移动")
### helm参数配置
参数
说明
默认值
ahpa.replicaCount
AHPA controller 副本数
`1`
ahpa.imageTag
AHPA 镜像tag.
`v1.0`
ahpa.imagePullPolicy
AHPA 镜像拉取策略
`Always`
ahpa.ALGORITHM\_SERVICE\_AHPA\_SVC\_HOST
AHPA 算法依赖svc
`algorithm-service`
algorithm.replicaCount
算法服务 副本数
`1`
algorithm.ports
算法服务 端口号
`5000`
algorithm.imageTag
算法服务 镜像tag
`1.0`
algorithm.imagePullPolicy
算法服务 镜像拉取策略
`Always`
alibabaCloudMetricsAdapter.needcreate
是否安装alibaba-cloud-metric-adapter
`true`
crds.needcreate
是否安装crds
`true`
rbac.needcreate
是否配置rbac
`true`
使用
--
### 运行一个AHPA demo
```
apiVersion: autoscaling.alibabacloud.com/v1
kind: AdvancedHorizontalPodAutoscaler
metadata:
labels:
controller-tools.k8s.io: "1.0"
name: ahpa-sample-original-support
namespace: kube-system
spec:
scaleTargetRef:
apiVersion: extensions/v1beta1
kind: Deployment
name: nginx-deploy
selector:
matchLabels:
app: nginx-deploy
minReplicas: 2
maxReplicas: 5
# 扩缩模式,scalingUpOnly:只扩模式,observer:观察模式,auto:扩缩模式
scaleMode: "auto"
# 单位为分钟,预测未来60分钟所需副本数
forecastWindow: 60
metrics:
- type: External
external:
metric:
name: k8s_workload_cpu_util
selector:
matchLabels:
k8s.cluster.id: "xxx"
k8s.workload.name: "nginx-deploy"
k8s.workload.type: "Deployment"
k8s.workload.namespace: "kube-system"
k8s.period: "100"
target:
type: Value
value: 60
```
![](data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==)![](data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw== "点击并拖拽以移动")
AHPA功能增强配置说明 && 指标支持
--------------------
### 功能增强说明
参数
说明
默认值
scaleMode
扩缩模式,scalingUpOnly:只扩模式,observer:观察模式,auto:扩缩模式
"observer"
forecastWindow
预测未来时间窗口(分钟),0表示不使用预测功能
0
### 指标支持
* [Ingress(SLS)](https://yq.aliyun.com/go/articleRenderRedirect?url=https%3A%2F%2Fgithub.com%2FAliyunContainerService%2Falibaba-cloud-metrics-adapter%2Fblob%2Fmaster%2Fdocs%2Fmetrics%2Fsls.md)
* [SLB](https://yq.aliyun.com/go/articleRenderRedirect?url=https%3A%2F%2Fgithub.com%2FAliyunContainerService%2Falibaba-cloud-metrics-adapter%2Fblob%2Fmaster%2Fdocs%2Fmetrics%2Fslb.md)
* [CMS](https://yq.aliyun.com/go/articleRenderRedirect?url=https%3A%2F%2Fgithub.com%2FAliyunContainerService%2Falibaba-cloud-metrics-adapter%2Fblob%2Fmaster%2Fdocs%2Fmetrics%2Fcms.md)
最后
--
Advanced Horizontal Pod Autoscaler可针对周期性规律强的应用进行提前备容,减少扩容资源申请、应用启动耗时带来的容量风险,同时更好的支持扩缩模式和扩缩控制,增加了自动扩缩的业务的可用性。AHPA目前向白名单用户开放,申请地址:[https://page.aliyun.com/form/act946163602/index.htm](https://page.aliyun.com/form/act946163602/index.htm),欢迎大家试用并提新需求。
iPhone 11 Pro、卫衣、T恤等你来抽,马上来试试手气 [https://www.aliyun.com/1111/2019/m-lottery?utm\_content=g\_1000083877](https://link.zhihu.com/?target=https%3A//www.aliyun.com/1111/2019/m-lottery%3Futm_content%3Dg_1000083877)
[原文链接](https://yq.aliyun.com/articles/721299?utm_content=g_1000084430)
本文为云栖社区原创内容,未经允许不得转载。~~~~
上一篇: 关于ThreadPo的详细介绍
下一篇: 《Java Performance》书评