68 lines
3.3 KiB
Markdown
68 lines
3.3 KiB
Markdown
# 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共同实现。
|
||
|
||
![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 |