美文网首页
Horizontal Pod Autoscaler 初探

Horizontal Pod Autoscaler 初探

作者: Iwishing | 来源:发表于2018-08-17 00:23 被阅读0次

    什么是HPA?

    The Horizontal Pod Autoscaler automatically scales the number of pods in a replication controller, deployment or replica set based on observed CPU utilization (or, with custom metrics support, on some other application-provided metrics). Note that Horizontal Pod Autoscaling does not apply to objects that can’t be scaled, for example, DaemonSets.

    Horizontal Pod Autoscaler根据观察到的CPU利用率自动调整复制控制器,部署或副本集中的容器数量(或者,通过自定义指标支持,根据其他一些应用程序提供的指标)。 请注意,Horizontal Pod Autoscaling不适用于无法缩放的对象,例如DaemonSet。

    The Horizontal Pod Autoscaler is implemented as a Kubernetes API resource and a controller. The resource determines the behavior of the controller. The controller periodically adjusts the number of replicas in a replication controller or deployment to match the observed average CPU utilization to the target specified by user.

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

    Horizontal Pod Autoscaling仅适用于Deployment和ReplicaSet,在V1版本中仅支持根据Pod的CPU利用率扩所容,在v1alpha版本中,支持根据内存和用户自定义的metric扩缩容。

    提问:

    1. Deployment, Replication controller, ReplicaSet的区别?

    2. 为什么DaemonSet不支持?

    为什么HPA

    应用的资源使用率通常都有高峰和低谷的时候,如何削峰填谷,提高集群的整体资源利用率,让service中的Pod个数自动调整呢?这就有赖于Horizontal Pod Autoscaling了,顾名思义,使Pod水平自动缩放。这个Object(跟Pod、Deployment一样都是API resource)也是最能体现kubernetes之于传统运维价值的地方,不再需要手动扩容了,终于实现自动化了,还可以自定义指标,没准未来还可以通过人工智能自动进化呢!例如联动Prometheus实现预测告警和预测伸缩。

    Metrics支持

    在不同版本的API中,HPA autoscale时可以根据以下指标来判断:

    autoscaling/v1

    CPU

    autoscaling/v1alpha1

    内存

    自定义metrics

    kubernetes1.6起支持自定义metrics,但是必须在kube-controller-manager中配置如下两项:

    --horizontal-pod-autoscaler-use-rest-clients=true

    --api-server指向kube-aggregator,也可以使用heapster来实现,通过在启动heapster的时候指定--api-server=true。查看kubernetes metrics

    多种metrics组合

    HPA会根据每个metric的值计算出scale的值,并将最大的那个值作为扩容的最终结果。

    演示根据CPU进行伸缩

    1. 创建一个部署Deployment并把它通过服务暴露出来

    kubectl run php-apache --image=k8s.gcr.io/hpa-example --requests=cpu=200m --expose --port=80

    2. 创建HPA

    kubectl autoscale deployment php-apache --cpu-percent=50--min=1--max=10 

    3. 检查HPA状态

    kubectl get hpa

    4. 加压

    kubectl run -i --tty load-generator --image=busybox /bin/sh

    whiletrue;dowget -q -O- http://php-apache.default.svc.cluster.local;done

    5. 过1分钟左右再次检查HPA状态和部署状态

    kubectl get hpa

    kubectl get deployment php-apache

    6. 停压,等1分钟查看状态

    演示根据自定义指标http_requests实现伸缩

    参考:

    Horizontal Pod Autoscaling · Kubernetes Handbook - Kubernetes中文指南/云原生应用架构实践手册 by Jimmy Song(宋净超)

    GitHub - stefanprodan/k8s-prom-hpa: Kubernetes Horizontal Pod Autoscaler with Prometheus custom metrics

    相关文章

      网友评论

          本文标题:Horizontal Pod Autoscaler 初探

          本文链接:https://www.haomeiwen.com/subject/bkfpxttx.html