Horizontal Pod Autoscaling

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

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

如果你不想看下面的文章可以直接看下面的示例图,组件交互、组件的配置、命令示例,都画在图上了。

Horizontal Pod Autoscaling由API server和controller共同实现。

Metrics支持

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

  • autoscaling/v1
    • CPU
  • autoscaling/v2alpha1
    • 内存
    • 自定义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的值,并将最大的那个指作为扩容的最终结果。

使用kubectl管理

Horizontal Pod Autoscaling作为API resource也可以像Pod、Deployment一样使用kubeclt命令管理,使用方法跟它们一样,资源名称为hpa

kubectl create hpa
kubebectl get hpa
kubectl describe hpa
kubectl delete hpa

有一点不同的是,可以直接使用kubectl autoscale直接通过命令行的方式创建Horizontal Pod Autoscaler。

用法如下:

kubectl autoscale (-f FILENAME | TYPE NAME | TYPE/NAME) [--min=MINPODS] --max=MAXPODS
[--cpu-percent=CPU] [flags] [options]

举个例子:

kubectl autoscale deployment foo --min=2 --max=5 --cpu-percent=80

为Deployment foo创建 一个autoscaler,当Pod的CPU利用率达到80%的时候,RC的replica数在2到5之间。该命令的详细使用文档见https://kubernetes.io/docs/user-guide/kubectl/v1.6/#autoscale

注意 :如果为ReplicationController创建HPA的话,无法使用rolling update,但是对于Deployment来说是可以的,因为Deployment在执行rolling update的时候会自动创建新的ReplicationController。

参考

HPA设计文档:https://github.com/kubernetes/community/blob/master/contributors/design-proposals/horizontal-pod-autoscaler.md

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

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

kubectl autoscale命令详细使用说明:https://kubernetes.io/docs/user-guide/kubectl/v1.6/#autoscale

自定义metrics开发:https://github.com/kubernetes/metrics

© w564791 all right reserved,powered by Gitbook文件修订时间: 2019-04-28 06:26:58

results matching ""

    No results matching ""