`
大涛学长
  • 浏览: 107570 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

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

阅读更多
背景
--

### 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)

本文为云栖社区原创内容,未经允许不得转载。~~~~
分享到:
评论

相关推荐

    kubernetes-server-linux-amd64-v1.15.4.tar.gz

    9. **伸缩和调度**:Kubernetes的Horizontal Pod Autoscaler(HPA)可以根据资源使用情况自动调整Pod的数量,而Scheduler则负责根据节点资源和Pod规格将Pod调度到合适的节点上。 10. **服务发现和负载均衡**:...

    spring-boot-k8s-hpa:在Kubernetes上使用水平Pod自动缩放器和自定义指标自动缩放Spring Boot

    您应该使用至少4GB的RAM启动minikube: minikube start \ --memory 4096 \ --extra-config=controller-manager.horizontal-pod-autoscaler-upscale-delay=1m \ --extra-config=controller-manager.horizontal-pod-...

    Kubernetes HPA弹性伸缩 helm包

    Kubernetes HPA弹性伸缩 helm包

    K8S之HPA基于内存指标实现pod自动扩缩容测试用例

    标题 "K8S之HPA基于内存指标实现pod自动扩缩容测试用例" 涉及的关键知识点是 Kubernetes(K8S)的水平自动扩展(Horizontal Pod Autoscaler, HPA)以及如何根据内存指标来调整Pod的副本数量。在这个测试用例中,我们...

    K8S之HPA基于CPU指标实现pod自动扩缩容测试用例

    标题中的“K8S之HPA基于CPU指标实现pod自动扩缩容测试用例”指的是在Kubernetes(K8s)环境中,通过水平Pod自动扩展器(Horizontal Pod Autoscaler,简称HPA)来根据Pod的CPU使用率进行自动扩缩容的测试案例。...

    04-kubernetes笔记.pdf

    本文将深入探讨ReplicationController(RC)、ReplicaSet(RS)、Deployment、selector以及Horizontal Pod Autoscaler(HPA)等关键概念。 1. **ReplicationController(RC)**: - RC是K8s早期用于维护Pod副本...

    kubez-autoscaler:带注释的kubez-autoscaler-controller将自动维护kubernetes资源的HPA

    Kubez-autoscaler概述 kubez-autoscaler通过为deployment / statefulset添加annotations的方式,自动维护对应HorizontalPodAutoscaler的生命周期。 正在安装 kubez-autoscaler控制器的安装非常简单,通过kubectl ,...

    k8s自动伸缩那些事资料下载.pdf

    1. **Horizontal Pod Autoscaler (HPA)**:根据CPU利用率或其他自定义指标动态调整Pod的数量。 2. **Cluster-Autoscaler**:自动调整Kubernetes集群中的节点数量以适应Pod的伸缩需求。 3. **Vertical Pod Autoscaler...

    kubernetes-server-linux-amd64.tar.gz

    - **自动伸缩**:通过Horizontal Pod Autoscaler(HPA)根据资源使用情况自动调整Pod数量。 6. **持续集成/持续部署(CI/CD)**: - Kubernetes与Jenkins、GitLab CI/CD等工具集成,实现应用的自动化部署和更新。...

    kubernetes-learning.zip

    - **自动伸缩**:Horizontal Pod Autoscaler (HPA) 根据资源使用情况自动调整 Pod 数量。 4. **Kubernetes 扩展与管理** - **Operator**:一种实现自定义管控逻辑的方法,用于管理复杂的应用程序。 - **Ingress*...

    kubernetes-server-linux-amd64-v1.15.5.tar.gz

    4. **自动伸缩**:Kubernetes的水平Pod自动伸缩(HPA)和垂直Pod自动伸缩(VPA)功能在这个版本中可能更加成熟,能够根据应用负载自动调整Pod的数量和资源分配。 5. **资源效率**:优化了调度器和控制器的性能,...

    Kubernetes指南-倪朋飞

    6. **Horizontal Pod Autoscaler (HPA)**:HPA允许自动调整Pod的数量以应对资源需求的变化,这是Kubernetes实现弹性伸缩的关键功能。 7. **Ingress与网络策略**:Ingress提供了对外部访问Kubernetes服务的路由规则...

    Effective HPA:预测未来的弹性伸缩产品.doc

    水平Pod自动伸缩(Horizontal Pod Autoscaler, HPA)作为Kubernetes的一项核心功能,允许根据Pods的CPU或内存使用情况动态调整副本数量,以确保业务性能的同时降低成本。然而,传统的HPA存在配置复杂、响应延迟、可...

    基于kube-prometheus-stack部署监控K8S告警系统资源合集

    5. **Prometheus Adapter**: 用于将 Prometheus 度量转换为 Kubernetes 标准的 Metrics API,使得 Kubernetes 自带的 HPA(Horizontal Pod Autoscaler)能够基于监控指标自动扩展应用。 在部署 `kube-prometheus-...

    行业分类-设备装置-基于Kubernetes的容器管理平台.zip

    2. **弹性伸缩**:通过Horizontal Pod Autoscaler(HPA)自动调整Pod的数量以应对流量变化。 3. **自我修复**:当检测到Pod故障时,Kubernetes会自动重启或替换故障Pod,保证服务的高可用性。 4. **网络策略**:通过...

    k8s-prom-hpa:具有Prometheus自定义指标的Kubernetes水平Pod自动缩放器

    在Kubernetes(k8s)环境中,水平Pod自动缩放器(Horizontal Pod Autoscaler, HPA)是一种强大的功能,它允许系统根据工作负载动态调整Pod的数量。然而,HPA默认仅支持基于CPU和内存利用率的指标进行缩放。但在实际...

    tftpd-hpa-0.42-2tr.i586.rpm

    tftpd的rpm包,已经在centos6.4(32bit)上适用了 tftpd的rpm包,已经在centos6.4(32bit)上适用了 tftpd的rpm包,已经在centos6.4(32bit)上适用了

    kubernetes笔记.rar

    - **自动伸缩**:Horizontal Pod Autoscaler(HPA)根据资源利用率自动调整Pod副本数量。 - **日志和监控**:使用Kubernetes的logging和metrics API,配合Prometheus和Grafana等工具进行集群监控。 4. **...

    kubernetes-in-action.pdf.zip

    Kubernetes的持续集成/持续部署(CI/CD)实践,如Jenkins、Spinnaker等工具的集成,以及如何通过Kubernetes的Horizontal Pod Autoscaler(HPA)实现动态扩缩容。 最后,书中会探讨Kubernetes在生产环境中的最佳实践...

    k8s1.13.3部署电商微服务-kubernetes的实战案例应用-安装包和详细文档笔记整理

    此外,我们还可以通过Horizontal Pod Autoscaler(HPA)实现自动扩缩,根据CPU或内存使用情况动态调整Pod的数量。 网络是微服务架构中的关键部分。Kubernetes提供了一种名为“服务网格”的概念,它允许服务之间进行...

Global site tag (gtag.js) - Google Analytics