Kubernetes 弹性伸缩HPA功能增强Advanced Horizontal Pod Autoscaler -介绍部署篇

简介: 背景 WHAT(做什么) Advanced Horizontal Pod Autoscaler(简称:AHPA)是kubernetes中HPA的功能增强. 在兼容原生HPA功能基础上,增加预测、执行模式配置、缩容控制等功能。

背景

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

使用场景

周期性规律明显应用成本优化 --提前备容,降低容量风险

针对规律性明显的应用,一般有如下特征:
image
上图中,红线表示应用的入网流量(qps),蓝线表示容器数。从图中蓝色可以看出,在qps到来前一段时间(比如:60min)已经开始备容,在qps达到峰值前资源已经ready,降低流量高峰来临时刻备容应用抖动带来的风险;在qps峰值过后,资源缓慢回收(缩容速率线性递减),避免产生浪费。通过上图可以看出,针对规律性明显应用,提前备容,缓慢缩容,最终能够保证应用稳定性的前提下达到成本优化目的。

部署

前置条件

  • helm v2版本大于 v2.11.0+.
  • 预测功能依赖"阿里云云监控",需安装"ack-alibaba-cloud-metrics-adapter"组件.

安装 && 卸载

安装chart

方式一:进入“容器服务”->"市场"->"应用目录"->"ack-advanced-horizontal-pod-autoscaler"进行安装,如下图:
image

方式二:

helm install ack-advanced-horizontal-pod-autoscaler -n ahpa

卸载chart

helm delete ahpa

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

AHPA功能增强配置说明 && 指标支持

功能增强说明

参数 说明 默认值
scaleMode 扩缩模式,scalingUpOnly:只扩模式,observer:观察模式,auto:扩缩模式 "observer"
forecastWindow 预测未来时间窗口(分钟),0表示不使用预测功能 0

指标支持

最后

Advanced Horizontal Pod Autoscaler可针对周期性规律强的应用进行提前备容,减少扩容资源申请、应用启动耗时带来的容量风险,同时更好的支持扩缩模式和扩缩控制,增加了自动扩缩的业务的可用性。AHPA目前向白名单用户开放,申请地址:https://page.aliyun.com/form/act946163602/index.htm,欢迎大家试用并提新需求。

相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
云原生实践公开课
课程大纲 开篇:如何学习并实践云原生技术 基础篇: 5 步上手 Kubernetes 进阶篇:生产环境下的 K8s 实践 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
目录
相关文章
|
24天前
|
Kubernetes 网络协议 应用服务中间件
K8S二进制部署实践-1.15.5
K8S二进制部署实践-1.15.5
33 0
|
2月前
|
运维
计算巢如何使用fluxcd在ack部署helm chart
为支持helm服务运维管理功能,现在改用fluxcd的方式进行helm chart部署,这里计算巢对fluxcd进行部署helm chart的过程进行了封装,封装成了ROS公共模块MODULE::ACS::ComputeNest::FluxOciHelmDeploy,下面将主要介绍下怎么使用这个模块在计算巢中进行Helm Chart的部署。
36 3
|
2月前
|
Kubernetes 容器
使用sealer部署k8s记录
使用sealer部署k8s记录
|
2月前
|
存储 Kubernetes 容器
百度搜索:蓝易云【Kubernetes使用helm部署NFS Provisioner】
现在,你已经成功使用Helm部署了NFS Provisioner,并且可以在Kubernetes中创建使用NFS存储的PersistentVolumeClaim。
44 10
|
2月前
|
Kubernetes 应用服务中间件 nginx
百度搜索:蓝易云【使用Kubernetes部署Nginx应用教程】
现在,你已经成功在Kubernetes集群上部署了Nginx应用。通过访问Service的外部IP地址,你可以访问Nginx服务。
42 4
|
3月前
|
Kubernetes 流计算 容器
在Rancher K8s上部署Flink时,TaskManager连接不上并不断重启可能是由多种原因导致的。
在Rancher K8s上部署Flink时,TaskManager连接不上并不断重启可能是由多种原因导致的。【1月更文挑战第22天】【1月更文挑战第106篇】
58 1
|
2月前
|
存储 Kubernetes 网络协议
使用 K8S 部署 RSS 全套自托管解决方案 - RssHub + Tiny Tiny Rss
使用 K8S 部署 RSS 全套自托管解决方案 - RssHub + Tiny Tiny Rss
|
26天前
|
Kubernetes 流计算 Perl
在Rancher K8s上部署Flink时,TaskManager连接不上并不断重启可能是由多种原因导致的
在Rancher K8s上部署Flink时,TaskManager连接不上并不断重启可能是由多种原因导致的
33 7
|
3月前
|
存储 Kubernetes Apache
pulsar on k8s 部署验证
pulsar on k8s 部署验证
|
8天前
|
Kubernetes 搜索推荐 Docker
使用 kubeadm 部署 Kubernetes 集群(二)k8s环境安装
使用 kubeadm 部署 Kubernetes 集群(二)k8s环境安装
46 17