插件简介
autoscaler是Kubernetes中非常重要的一个Controller,它提供了微服务的弹性能力,并且和Serverless密切相关。
弹性伸缩是很好理解的一个概念,当微服务负载高(CPU/内存使用率过高)时水平扩容,增加pod的数量以降低负载,当负载降低时减少pod的数量,减少资源的消耗,通过这种方式使得微服务始终稳定在一个理想的状态。
云容器引擎简化了Kubernetes集群的创建、升级和手动扩缩容,而集群中应用的负载本身是会随着时间动态变化的,为了更好的平衡资源使用率以及性能,kubernetes引入了autoscaler插件,它可以根据部署的应用所请求的资源量自动的动态的伸缩集群。
开源社区地址:https://github.com/kubernetes/autoscaler
插件说明
autoscaler可分成扩容和缩容两个方面:
- 自动扩容
当集群中的Pod由于工作节点资源不足而无法调度时,会触发集群扩容,扩容节点与所在分组资源配额一致。详情请参见创建节点伸缩策略。
当前该插件使用的是最小浪费策略,即若pod创建需要3核,此时有4核、8核两种规格,优先创建规格为4核的节点。
说明:
自动扩容策略在满足如下条件时才会执行:
- 节点上的资源不足。
- Pod的调度配置中不能包含节点亲和的策略(即Pod若已经设置亲和某个节点,则不会自动扩容节点),节点亲和策略设置方法请参见节点亲和性。
- 自动缩容
当集群节点处于一段时间空闲状态时(默认10min),会触发集群缩容操作(即节点会被自动删除)。当节点存在以下几种状态的pod时,不可缩容:
− pod有设置PodDisruptionBudget,当移除pod不满足对应条件时,节点不会缩容。
− pod由于一些限制,如亲和、反亲和等,无法调度到其他节点,节点不会缩容。
− pod拥有cluster-autoscaler.kubernetes.io/safe-to-evict: 'false'这个annotations时,节点不缩容。
− 节点上存在kube-system namespace下的Pod(除kube-system daemonset创建的Pod),节点不缩容。
− 节点上有非controller(deployment/replica set/job/stateful set)创建的Pod,节点不缩容。
约束与限制
- 集群为1.9.7-r1及以上版本时,才支持此功能。
- 安装时请确保有足够的资源安装本插件。
- 该插件功能仅支持通过按需计费方式购买的虚拟机节点。
安装插件
步骤 1 登录CCE控制台,在左侧导航栏中选择“插件管理”,在“插件市场”页签下,单击autoscaler插件下的“安装插件”。
步骤 2 在安装插件页面,选择您要安装插件的集群和插件版本,单击“下一步:规格配置”。
步骤 3 参照下表配置插件安装参数。
表-autoscaler基本配置
参数 | 支持的插件版本 | 参数说明 |
插件规格 | 所有版本 | 插件部署可选择“单实例”和“高可用”两种规格。 单实例:以单实例部署插件。 高可用:以多实例部署插件,具有高可用能力,需占用更多的计算资源。 |
实例数 | 所有版本 | 选择上方插件规格后,显示插件中的实例数,此处仅作显示。 |
容器 | 所有版本 | 选择插件规格后,显示插件容器的CPU和内存配额,此处仅作显示。 |
登录方式 | 部分版本无此参数 | 为自动扩容工作节点选择登录方式,当前支持“密码”和“密钥对”两种方式,您可根据需要进行选择。 选择“密码”方式: 密码:自动扩容工作节点密码。通过该密码登录工作节点执行相关操作,用户名为root。 确认密码:再次输入自动扩容工作节点密码。 选择“密钥对”方式: 密钥对:密钥对用于远程登录节点时的身份认证。 |
自动缩容 | 所有版本 | 默认不开启:将不开启自动缩容,只进行自动扩容。 开启:开启自动缩容,且自建节点和插件扩容所创建的节点均可缩容。 空置时间(min):当集群节点处于一段时间的空闲状态时,会触发集群缩容操作,删除节点,默认10min。 百分比:当集群节点资源低于多少百分比时,进行集群缩容扫描(默认0.5,即50%,cpu和mem都要满足的条件下才会缩容)。 扩容后缩容冷却时间:扩容执行后能再次启动缩容评估的时间间隔,默认10min。 节点删除后缩容冷却时间:删除节点后能再次启动缩容评估的时间间隔,默认10min。 缩容失败后缩容冷却时间:缩容失败后能再次启动缩容评估的时间间隔,默认3min。 空节点缩容最大并发数:默认10。 不可移除节点的重检查时间:节点被判定不可移除后能再次启动检查的时间间隔,默认5min。 说明 当节点处于以下几种状态时,不可缩容: a、pod设置为PodDisruptionBudget,当不满足条件时,节点不会缩容。 b、pod设置本地存储时,节点不会缩容。 c、pod由于一些限制,如亲和、反亲和等,无法调度到其他节点,节点不会缩容。 d、pod拥有cluster-autoscaler.kubernetes.io/safe-to-evict: 'false'这个annotations时,节点不缩容。 e、节点上存在kube-system命名空间下的Pod(除kube-system daemonset创建的Pod)。 f、节点上有非controller(deployment/replica set/job/stateful set)创建的Pod。 |
预置节点池配置 | 部分版本无此参数 | 此为默认资源组。集群扩容时,若没有其他可用分组,将使用默认分组的资源规格进行扩容节点。 单击“添加预置节点池配置”进行参数设置: 可用区:选择一个可用区。可用区是指在同一区域下,电力、网络隔离的物理区域。 操作系统:选择节点对应的操作系统。 Taints:可选项,默认为空。 支持给该节点池扩容出来的节点加Taints来设置反亲和性,每个节点池最多配置10条Taints,每条Taints包含以下3个参数: − Key:必须以字母或数字开头,可以包含字母、数字、连字符、下划线和点,最长63个字符;另外可以使用DNS子域作为前缀。 − Value:必须以字母或数字开头,可以包含字母、数字、连字符、下划线和点,最长63个字符。 − Effect:只可选NoSchedule,PreferNoSchedule或NoExecute。 须知: 1、Taints配置时需要配合Pod的toleration使用,否则可能导致扩容失败或者Pod无法调度到扩容节点。 2、配置后无法修改,请您谨慎配置,错误的配置可能会导致扩容失败或pod无法调度。 3、标签管理:通过为资源添加标签,可以对资源进行自定义标记,实现资源的分类。 说明 您可以在TMS中创建“预定义标签”,预定义标签对所有支持标签功能的服务资源可见,通过使用预定义标签可以提升标签创建和迁移效率。 节点规格:节点的CPU配置和内存配置。 |
单击下方的“高级设置”,可以配置更多插件参数:
参数 | 插件版本 | 参数说明 |
节点总数 | 所有版本 | 可扩容的最大节点总数。 |
cpu总数(核) | 所有版本 | 可扩容的最大cpu总数(核)。 |
内存总数(GB) | 所有版本 | 可扩容的最大内存总数(GB)。 |
自动扩容 | 部分版本无此参数 | 未调度实例扩容:默认选中。 启用集群使用率扩容:可选,扩容能力增强。
|
磁盘 | 部分版本无此参数 | 系统盘和数据盘:设置节点磁盘空间。
勾选“资源分配自定义”后,您可以对数据盘中的Docker和Kubelet资源占比进行自定义设置。 须知
系统盘和数据盘均可提供以下性能规格的云硬盘:
|
命令行注入 | 部分版本无此参数 | 请输入脚本命令。 说明:脚本命令大小限制:0~1000字符。 |
步骤 4 配置完成后,单击“安装”。
待插件安装完成后,单击“返回”,在“插件实例”页签下,选择对应的集群,可查看到运行中的实例,这表明该插件已在当前集群的各节点中安装。
升级插件
步骤 1 在CCE控制台中,单击左侧导航栏的“插件管理”,在“插件实例”页签下,选择对应的集群,单击autoscaler下的“ 升级”。
说明:
- 如果升级按钮处于冻结状态,则说明当前插件版本是最新的版本,不需要进行升级操作;
- 若升级按钮可单击,则单击升级按钮即可升级autoscaler插件。
- 升级autoscaler插件时,会替换原先节点上的旧版本的autoscaler插件,安装最新版本的autoscaler插件以实现功能的快速升级。
步骤 2 在弹出的窗口中,配置参数后,升级该插件。配置参数可参考安装插件中的参数说明。
卸载插件
步骤 1 登录CCE控制台,在左侧导航栏中选择“插件管理”,在“插件实例”页签下,选择对应的集群,单击autoscaler下的“卸载”。
步骤 2 在弹出的窗口中,单击“是”,可卸载该插件。