HPA(Horizontal Pod Autoscaler)是Openshift中的一个非常重要的对象,它定义了系统如何根据收集对应的Pod的状态(CPU/Memory)对DeploymentConfig、ReplicationController对象进行扩容与缩容。
HPA依赖于收集到的Pod资源的使用状态,要监控的指定的pod必须 安装cluster metrics应用和设置spec.containers.resources.requests属性。
支持对象:DeploymentConfig、ReplicationController、Deployment、Replica Set
指标:内存使用率,cpu使用率
HPA创建一个水平Pod自动缩放器,以指定要运行的Pod的最小和最大数量,以及Pod应该定位的CPU利用率或内存利用率。因此。可以使用水平容器自动缩放器(HPA)来指定OpenShift容器平台如何根据从属于该复制控制器或部署的容器中收集的指标自动增加或减少复制控制器或部署配置的规模和组态。
HPA进行伸缩过程
收集该HPA控制下所有Pod最近的cpu使用情况(CPU utilization)
对比在扩容条件里记录的cpu限额(CPUUtilization)
调整实例数(必须要满足不超过最大/最小实例数)
每隔30s做一次自动扩容的判断
CPU utilization的计算方法是用cpu usage(最近一分钟的平均值,通过heapster可以直接获取到)除以cpu request(这里cpu request就是我们在创建容器时制定的cpu使用核心数)得到一个平均值,这个平均值可以理解为:平均每个Pod CPU核心的使用占比。
最重要的步骤为3,这里即为HPA的算法,计算当前需要启动几个Pod
HPA进行伸缩算法
启动Pod数量计算方式
TargetNumOfPods = ceil(sum(CurrentPodsCPUUtilization) / Target)
ceil()表示取大于或等于某数的最近一个整数
举个例子:
我们有一个集群实例数是3 pods,同时Pod的cpu资源的Request为1.4。cpu限额,即Target是CPU使用率为80%,当cpu的使用量CurrentPodsCPUUtilization为1.1,1.4,1.3时,ceil((1.1+1.4+1.3)/1.4/0.8)= 4
所以扩容成四个实例。
实例刚启动时及刚完成扩容/缩容,会有一段冷却时间
由于启动实例时cpu的使用度会陡增,所以自动扩容会等待一段时间以收集准确的运行时监控数据。每次扩容后冷却3分钟才能再次进行扩容,而缩容则要等5分钟后。这是因为自动扩容使用保守的方法,尽可能满足pods业务的正常使用,所以扩容的优先级要大于缩容。
当前Pod Cpu使用率与目标使用率接近时,不会触发扩容
当满足以下条件才会真正触发扩容/缩容:
avg(CurrentPodsConsumption) / Target >1.1 或 <0.9这是为了避免出现频繁的扩容缩容。
扩容条件的相对与绝对度量
创建水平容器自动缩放器后,OpenShift容器平台开始查询容器上的CPU和/或内存资源指标。当这些指标可用时,水平吊舱自动缩放器将计算当前指标利用率与所需指标利用率的比率,并相应地进行缩放。查询和扩展以固定的时间间隔进行,但是可能需要一到两分钟才能使用度量。
对于复制控制器,此缩放比例直接对应于复制控制器的副本。对于部署配置,扩展直接对应于部署配置的副本数。请注意,自动缩放仅适用于该Complete阶段中的最新部署。
OpenShift容器平台会自