「Kubernetes」- Scaling

  CREATED BY JENKINSBOT

伸缩分为两种:

	集群的伸缩 - 基础设置级别的伸缩。根据集群的利用率向集群内添加或删除工作节点。
	应用的伸缩 - 也成为Pod的伸缩。根据各项数据指标调整Pod特征的处理。
		- 横向自动伸缩(HPA)。根据指标增加或减少Pod的副本数。
		- 纵向自动伸缩(VPA)。指的是增加或减少Pod内运行的容器的资源。截止201801时,该功能尚在开发。参阅「[[https://hackernoon.com/container-resource-consumption-too-important-to-ignore-7484609a3bb7|Container resource consumption—too important to ignore]]」一文。

9.1. Scaling a Deployment

可以通过命令行手动对部署进行伸缩:

	# kubectl scale deployment fnacyapp --replicas=3

如果不想手动伸缩,可以自动伸缩。

9.2. Automatically Resizing a Cluster in GKE

GKE – Google Kubernetes Engine

对集群进行伸缩,跳过……

9.3. Automatically Resizing a Cluster in AWS

AWS – Amazon Web Services

对集群进行伸缩,跳过……

9.4. Using Horizontal Pod Autoscaling on GKE

在GKE上使用Pod的横向自动伸缩。

(1)首先创建一个要被HPA的对象。

(2)为部署定义HPA对象:

	# kubectl autoscale deployment "deploy-appserver" --cpu-percetn=40 --min=1 max=5

(3)开始观察他们的行为:

	# kubectl get hpa --watch # 观察HPA
	# kubectl get deploy "deploy-appserver" --watch # 观察部署
	# kubectl run -i -t loadgen --image=busybox /bin/sh # 生成负载
		> while true; do wget -q -O- http://deploy-appserver.default.svc.cluster.local; done

可以在Dashboard上观察到HPA的效果。

!!!这里的地动伸缩是通过「HPA控制器」自动增加或减少副本数目,其会受到HPA资源的影响。作为k8s控制层内的控制器管理器的一部分,「HPA控制器」将通过集群中各个节点上运行的cAdvisor检查Pod的指标,然后由Heapster进行汇总。然后「HPA控制器」计算副本的数目是否符合HPA资源中定义的目标指数。最后HPA根据这个计算结果,调整目标资源的副本数。

Node cAdvisor -> HPA Controller -> Pod

!!!自动伸缩比较复杂,而且调节CPU和RAM的利用率等底层的指标可能会有意想不到的影响。如果可以应该尽量使用应用程序及的自定义指标(「Kubernetes 1.8: Now with 100% Daily Value of Custom Metrics」)。

Horizontal Pod Autoscaling