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

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
简介: 背景 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,欢迎大家试用并提新需求。

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
目录
相关文章
|
20天前
|
Kubernetes Java Docker
利用(K8S)配合Docker部署jar包
通过Docker打包并部署到Kubernetes(K8S)集群的过程。首先,通过SpringBoot生成jar包,接着在K8S环境中创建并编辑Dockerfile文件。随后构建Docker镜像,并将其推送到镜像仓库。最后,通过一系列kubectl命令(如get pods、get svc、logs等),展示了如何在K8S中管理应用,包括查看Pod状态、服务信息、Pod日志以及重启Pod等操作。
80 2
|
21天前
|
Kubernetes jenkins 持续交付
从代码到k8s部署应有尽有系列-java源码之String详解
本文详细介绍了一个基于 `gitlab + jenkins + harbor + k8s` 的自动化部署环境搭建流程。其中,`gitlab` 用于代码托管和 CI,`jenkins` 负责 CD 发布,`harbor` 作为镜像仓库,而 `k8s` 则用于运行服务。文章具体介绍了每项工具的部署步骤,并提供了详细的配置信息和示例代码。此外,还特别指出中间件(如 MySQL、Redis 等)应部署在 K8s 之外,以确保服务稳定性和独立性。通过本文,读者可以学习如何在本地环境中搭建一套完整的自动化部署系统。
51 0
|
18天前
|
存储 Kubernetes 负载均衡
CentOS 7.9二进制部署K8S 1.28.3+集群实战
本文详细介绍了在CentOS 7.9上通过二进制方式部署Kubernetes 1.28.3+集群的全过程,包括环境准备、组件安装、证书生成、高可用配置以及网络插件部署等关键步骤。
118 3
CentOS 7.9二进制部署K8S 1.28.3+集群实战
|
18天前
|
Kubernetes 负载均衡 前端开发
二进制部署Kubernetes 1.23.15版本高可用集群实战
使用二进制文件部署Kubernetes 1.23.15版本高可用集群的详细教程,涵盖了从环境准备到网络插件部署的完整流程。
40 2
二进制部署Kubernetes 1.23.15版本高可用集群实战
|
18天前
|
Linux pouch 容器
CentOS7部署阿里巴巴开源的pouch容器管理工具实战
关于如何在CentOS 7.6操作系统上安装和使用阿里巴巴开源的Pouch容器管理工具的实战教程。
53 2
CentOS7部署阿里巴巴开源的pouch容器管理工具实战
|
3天前
|
Kubernetes Cloud Native Linux
云原生入门:Kubernetes的简易部署与应用
【8月更文挑战第49天】在云原生的世界里,Kubernetes(K8s)是一颗璀璨的星。本文将带你走进K8s的世界,从安装到简单应用,轻松驾驭这个强大的容器编排工具。让我们一起探索云原生的奥秘,解锁新技能!
|
9天前
|
Kubernetes 应用服务中间件 nginx
Kubernetes上安装Metallb和Ingress并部署应用程序
Kubernetes上安装Metallb和Ingress并部署nginx应用程序,使用LoadBalancer类型的KubernetesService
41 2
|
17天前
|
存储 Kubernetes Ubuntu
Ubuntu 22.04LTS版本二进制部署K8S 1.30+版本
这篇文章详细介绍了在Ubuntu 22.04 LTS系统上使用VMware Fusion虚拟化软件部署Kubernetes 1.30+版本的完整过程,包括环境准备、安装containerd、配置etcd、生成证书、部署高可用组件、启动Kubernetes核心组件以及网络插件的部署和故障排查。
50 4
|
18天前
|
Kubernetes Ubuntu 网络安全
Ubuntu基于kubeadm快速部署K8S实战
关于如何在Ubuntu系统上使用kubeadm工具快速部署Kubernetes集群的详细实战指南。
72 2
|
18天前
|
Kubernetes Linux API
CentOS 7.6使用kubeadm部署k8s 1.17.2测试集群实战篇
该博客文章详细介绍了在CentOS 7.6操作系统上使用kubeadm工具部署kubernetes 1.17.2版本的测试集群的过程,包括主机环境准备、安装Docker、配置kubelet、初始化集群、添加节点、部署网络插件以及配置k8s node节点管理api server服务器。
53 0
CentOS 7.6使用kubeadm部署k8s 1.17.2测试集群实战篇