• Kubernetes Horizontal Pod Autoscaling


    HPA介绍

    Horizo​​ntal Pod Autoscaler基于观察到的CPU利用率(或借助自定义指标 支持,基于其他一些应用程序提供的指标)自动缩放复制控制器,部署或副本集中的Pod数量 请注意,自动伸缩不适用于无法缩放的对象,例如DaemonSets。

    Horizo​​ntal Pod Autoscaler被实现为Kubernetes API资源和控制器。该资源确定控制器的行为。控制器会定期调整复制控制器或部署中副本的数量,以使观察到的平均CPU利用率与用户指定的目标相匹配。

    简单的理解:自动水平伸缩,是指运行在k8s上的应用负载(POD),可以根据资源使用率进行自动扩容、缩容;我们知道应用的资源使用率通常都有高峰和低谷,所以k8s的HPA特性应运而生;它也是最能体现区别于传统运维的优势之一,不仅能够弹性伸缩,而且完全自动化!

    工作原理图

     下面我们进行实验:

    # 创建deploy和service

    $ kubectl run php-apache --image=pilchard/hpa-example --requests=cpu=200m --expose --port=80
    

    # 创建autoscaler
    $ kubectl autoscale deploy php-apache --cpu-percent=50 --min=1 --max=10
    

    # 等待3~5分钟查看hpa状态
    $ kubectl get hpa php-apache
    

    # 增加负载 
    $ kubectl run --rm -it load-generator --image=busybox /bin/sh 
    $ while true; do wget -q -O- http://php-apache; done; 
    

    # 等待约5分钟查看hpa显示负载增加,且副本数目增加
    # 注意k8s为了避免频繁增删pod,对副本的增加速度有限制
    # 实验过程可以看到副本数目从1到4到8到10,大概都需要4~5分钟的缓冲期
    $ kubectl get hpa php-apache -w
    

    # 清除负载,CTRL+C 结束上述循环程序,稍后副本数目变回1
    

     

     通过注解annotations添加自动伸缩例子:

    Deployment / StatefulSet:

     apiVersion: extensions/v1beta1
     kind: Deployment
     metadata:
       name: example
       labels:
       annotations:
         hpa.autoscaling.banzaicloud.io/minReplicas: "1"
         hpa.autoscaling.banzaicloud.io/maxReplicas: "3"
         cpu.hpa.autoscaling.banzaicloud.io/targetAverageUtilization: "70"

    chart模板:https://github.com/helm/charts/blob/master/stable/nginx-ingress/templates/controller-hpa.yaml

    参考:

    https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale/

    https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale-walkthrough/

  • 相关阅读:
    Mysql 库表
    Mysql (二)
    SQLAlchemy
    Mysql 测试题
    jquery
    抽屉 演示
    前端项目
    JavaScript
    Html Css  练习
    Pandas之DataFrame——Part 3
  • 原文地址:https://www.cnblogs.com/Dev0ps/p/11885662.html
Copyright © 2020-2023  润新知