kubernetes-handbook/concepts/horizontal-pod-autoscaling.md

68 lines
3.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# Horizontal Pod Autoscaling
应用的资源使用率通常都有高峰和低谷的时候如何削峰填谷提高集群的整体资源利用率让service中的Pod个数自动调整呢这就有赖于Horizontal Pod Autoscaling了顾名思义使Pod水平自动缩放。这个Object跟Pod、Deployment一样都是API resource也是最能体现kubernetes之于传统运维价值的地方不再需要手动扩容了终于实现自动化了还可以自定义指标没准未来还可以通过人工智能自动进化呢
Horizontal Pod Autoscaling仅适用于Deployment和ReplicationControllerReplicaSet已经被ReplicationController取代在V1版本中仅支持根据Pod的CPU利用率扩所容在v1alpha版本中支持根据内存和用户自定义的metric扩缩容。
如果你不想看下面的文章可以直接看下面的示例图,组件交互、组件的配置、命令示例,都画在图上了。
Horizontal Pod Autoscaling由API server和controller共同实现。
![horizontal-pod-autoscaler](../images/horizontal-pod-autoscaler.png)
## 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](https://github.com/kubernetes/kube-aggregator)也可以使用heapster来实现通过在启动heapster的时候指定`--api-server=true`。查看[kubernetes metrics](https://github.com/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。
用法如下:
```b
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