一、核心概念

Horizontal Pod Autoscaling,简称HPA,是Kubernetes中实现POD水平自动伸缩的功能。云计算具有水平弹性的特性,这个是云计算区别于传统IT技术架构的主要特性。对于Kubernetes中的POD集群来说,HPA可以实现很多自动化功能,比如当POD中业务负载上升的时候,可以创建新的POD来保证业务系统稳定运行,当POD中业务负载下降的时候,可以销毁POD来提高资源利用率。

HPA控制器默认每隔30秒就会运行一次,如果要修改间隔时间,可以设置horizontal-pod-autoscaler-sync-period参数。

二、1.7新特性

1、HPA触发条件新特性(α特性)

在Kubernetes1.7中,对HorizontalPodAutoscalerStatus结构体,新增加了Conditions属性。

Conditions属性是一个HorizontalPodAutoscalerCondition结构体,在这个结构体中包括Type、Status、LastTransitionTime、Reason和Message五个属性,每个属性的含义如下:

•       Type属性:包含三个可选类型,ScalingActive、AbleToScale和ScalingLimited。

•       Status属性:表示Type属性是true还是false。取值为true和false,只有当HPA控制器检查的目标指标运行正常的时候才会设置ScalingActive为true。在其他情况下会将ScalingActive设置成false。如果Type是AbleToScale类型,那么取值为true的时候有三种情况,第一种是当HPA控制器可以获取当前目标自动伸缩,第二种是HPA控制器可以扩展或者收缩目标到指定的副本数,第三种是HPA控制器发现已经到了可以启动一次新的自动伸缩时间了,在其他情况下会设置成false。如果Type是ScalingLimited,那么只有当副本数在配置范围内的时候才被设置成false,否则都是true。

•       LastTransitionTime:记录上一次事务运行时间。

•       Reason:记录上一次事务产生的原因。

•       Message:记录上一次事务产生的详细信息。

通过kubectl describe hpa命令可以看到HorizontalPodAutoscalerStatus结构体新增的Conditions属性。

$kubectl describe hpa cm-test
Name:                           cm-test
Namespace:                      prom
Labels:                         <none>
Annotations:                    <none>
CreationTimestamp:              Fri, 16 Jun 2017 18:09:22 +0000
Reference:                     ReplicationController/cm-test
Metrics:                        ( current / target )
  "http_requests" on pods:      66m / 500m
Minreplicas:                   1
Maxreplicas:                   4
ReplicationControllerpods:     1 current / 1 desired
Conditions:
  Type                  Status  Reason                  Message
  ----                  ------  ------                  -------
  AbleToScale           True    ReadyForNewScale        the last scale time was sufficientlyold as to warrant a new scale
  ScalingActive         True   ValidMetricFound        the HPAwas able to successfully calculate a replica count from pods metrichttp_requests
  ScalingLimited        False  DesiredWithinRange      thedesired replica count is within the acceptible range
Events:

2、增加了两个HPA参数(α特性)

在Kubernetes1.7中,对HPA控制器,在原先horizontal-pod-autoscaler-sync-period参数基础上,新增加了horizontal-pod-autoscaler-upscale-delay和horizontal-pod-autoscaler-downscale-delay两个参数,默认值分别是3分钟和5分钟,分别代表自动伸展后的延迟时间和自动收缩后的延迟时间。

HPA控制器通过这两个新增参数来加以辅助控制是否进行自动伸缩,同时也会根据这两个参数来设置HorizontalPodAutoscalerCondition结构体的Conditions属性。

[置顶] Kubernetes1.7新特性:新增自动伸缩条件和参数的更多相关文章

  1. [置顶] kubernetes1.7新特性:新增StorageOS卷插件和Local持久存储

    背景介绍 在Kubernetes中卷的作用在于提供给POD存储,这些存储可以挂载到POD中的容器上,进而给容器提供存储. 从图中可以看到结构体PodSpec有个属性是Volumes,通过这个Volum ...

  2. [置顶] kubernetes1.7新特性:日志审计变化

    背景概念 出于安全方面的考虑,Kubernetes提供了日志审计记录,用来记录不同普通用户.管理员和系统中各个组件的日志信息. Kubernetes日志审计是Kube-apiserver组件的一部分功 ...

  3. [置顶] Kubernetes1.7新特性:支持绕过docker,直接通过containerd管理容器

    背景情况 从Docker1.11版本开始,Docker依赖于containerd和runC来管理容器,containerd是控制runC的后台程序,runC是Docker公司按照OCI标准规范编写的一 ...

  4. [置顶] kubernetes1.7新特性:PodDisruptionBudget控制器变化

    背景概念 在Kubernetes中,为了保证业务不中断或业务SLA不降级,需要将应用进行集群化部署.通过PodDisruptionBudget控制器可以设置应用POD集群处于运行状态最低个数,也可以设 ...

  5. 黑马程序员_Java基础:JDK1.5后的新特性:自动拆装箱,以及注意事项

    ------- android培训.java培训.期待与您交流! ---------- 首先来看一段代码: Integer x = new Integer(4); Integer y = 4; 在JD ...

  6. kubernetes1.5新特性跟踪(续)

    Kubernetes发布历史回顾 Kubernetes 1.0 - 2015年7月发布 Kubernetes 1.1 - 2015年11月发布 Kubernetes 1.2 - 2016年3月发布 K ...

  7. kubernetes1.5新特性跟踪

    Kubernetes发布历史回顾 Kubernetes 1.0 - 2015年7月发布 Kubernetes 1.1 - 2015年11月发布 Kubernetes 1.2 - 2016年3月发布 K ...

  8. jdk1.5新特性之-----自动装箱与自动拆箱

    import java.util.ArrayList; /* jdk1.5新特性之-----自动装箱与自动拆箱. java是面向对象 的语言,任何事物都可以使用类进行描述,sun就使用了 一些类描述j ...

  9. Python - 3.8 新特性之仅位置参数 & 仅关键字参数

    前置知识 Python 函数:https://www.cnblogs.com/poloyy/p/15092393.html 什么是仅限位置形参 仅限位置形参是 Python 3.8 才有的新特性 新增 ...

随机推荐

  1. php RFC兼容的电子邮件地址验证

    php中,进行RFC兼容的电子邮件地址验证的方法,有需要的朋友参考下吧. 分享一个可以验证RFC兼容的电子邮件地址的代码,支持RFC1123,2396,3696,4291,4343,5321等的验证. ...

  2. python16_day12【html、css】

    一.HTML 所有HTML标签操作 <!DOCTYPE html> <html lang="en"> <head> <!--编码--> ...

  3. Javascript中call()和apply()的用法 ----2

    前言 call 和 apply 都是为了改变某个函数运行时的 context 即上下文而存在的,换句话说,就是为了改变函数体内部 this 的指向.call 和 apply二者的作用完全一样,只是接受 ...

  4. 从Redux源码探索最佳实践

    前言 Redux 已经历了几个年头,很多 React 技术栈开发者选用它,我也是其中一员.期间看过数次源码,从最开始为了弄清楚某一部分运行方式来解决一些 Bug,到后来看源码解答我的一些假设性疑问,到 ...

  5. FutureTask、Fork/Join、 BlockingQueue

    我们之前学习创建线程有Thread和Runnable两种方式,但是两种方式都无法获得执行的结果. 而Callable和Future在任务完成后得到结果.   Future是一个接口,表示一个任务的周期 ...

  6. 华为S5700系列交换机AR配置静态IP双链路负载分担

    适用于:有多个以太WAN口的机型. 业务需求: 运营商1分配的接口IP为100.100.1.2,子网掩码为255.255.255.252,网关IP为100.100.1.1. 运营商2分配的接口IP为2 ...

  7. [BZOJ1018]堵塞的交通traffic

    Description 有一天,由于某种穿越现象作用,你来到了传说中的小人国.小人国的布局非常奇特,整个国家的交通系统可以被看成是一个2行C列的矩形网格,网格上的每个点代表一个城市,相邻的城市之间有一 ...

  8. Spring MVC执行原理和基于Java的配置过程

    一.Spring MVC执行原理和基于Java配置的配置过程 (一)Spring MVC执行过程,大致为7步. 所有的请求都会经过Spring的一个单例的DispacherServlet. Dispa ...

  9. java基础(6)--数组和方法

    数组 1. 什么是数组? 数组是相同数据类型的元素组成的集合.这些元素按线性顺序排列.所谓线性顺序是指除第一个元素外,每一个元素都有唯一的前驱元素:除最后一个元素外,每一个元素都有唯一的后继元素.(“ ...

  10. 深入理解MR1与MR2的执行流程

    摘自:Tom White ,<Hadoop.The.Definitive.Guide.3rd.Edition> MR1 MR2