autoscaler 插件简介 autoscaler是Kubernetes中非常重要的一个Controller,它提供了微服务的弹性能力,并且和Serverless密切相关。 弹性伸缩是很好理解的一个概念,当微服务负载高(CPU/内存使用率过高)时水平扩容,增加pod的数量以降低负载,当负载降低时减少pod的数量,减少资源的消耗,通过这种方式使得微服务始终稳定在一个理想的状态。 云容器引擎简化了Kubernetes集群的创建、升级和手动扩缩容,而集群中应用的负载本身是会随着时间动态变化的,为了更好的平衡资源使用率以及性能,kubernetes引入了autoscaler插件,它可以根据部署的应用所请求的资源量自动的动态的伸缩集群。 开源社区地址: 插件说明 autoscaler可分成扩容和缩容两个方面: 自动扩容 当集群中的Pod由于工作节点资源不足而无法调度时,会触发集群扩容,扩容节点与所在分组资源配额一致。详情请参见创建节点伸缩策略。 当前该插件使用的是最小浪费策略,即若pod创建需要3核,此时有4核、8核两种规格,优先创建规格为4核的节点。 说明: 自动扩容策略在满足如下条件时才会执行: 1. 节点上的资源不足。 2. Pod的调度配置中不能包含节点亲和的策略(即Pod若已经设置亲和某个节点,则不会自动扩容节点),节点亲和策略设置方法请参见节点亲和性。 自动缩容 当集群节点处于一段时间空闲状态时(默认10min),会触发集群缩容操作(即节点会被自动删除)。当节点存在以下几种状态的pod时,不可缩容: − pod有设置PodDisruptionBudget,当移除pod不满足对应条件时,节点不会缩容。 − pod由于一些限制,如亲和、反亲和等,无法调度到其他节点,节点不会缩容。 − pod拥有clusterautoscaler.kubernetes.io/safetoevict: 'false'这个annotations时,节点不缩容。 − 节点上存在kubesystem namespace下的Pod(除kubesystem daemonset创建的Pod),节点不缩容。 − 节点上有非controller(deployment/replica set/job/stateful set)创建的Pod,节点不缩容。 约束与限制 集群为1.9.7r1及以上版本时,才支持此功能。 安装时请确保有足够的资源安装本插件。 该插件功能仅支持通过按需计费 方式购买的虚拟机节点 。 安装插件 步骤 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拥有clusterautoscaler.kubernetes.io/safetoevict: 'false'这个annotations时,节点不缩容。 e、节点上存在kubesystem命名空间下的Pod(除kubesystem 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)。 自动扩容 部分版本无此参数 未调度实例扩容:默认选中。 启用集群使用率扩容:可选,扩容能力增强。 cpu扩容使用率:当节点池CPU达到所设置的使用上限,将扩容当前预置节点池的节点数。 内存扩容使用率:当节点池内存达到所设置的使用上限,将扩容当前预置节点池的节点数。 磁盘 部分版本无此参数 系统盘和数据盘:设置节点磁盘空间。 系统盘:规格为[40,1024]GB,用户可以配置,缺省值为40GB。 数据盘:规格为[100,32678]GB,用户可以配置,缺省值为100GB。 勾选“资源分配自定义”后,您可以对数据盘中的Docker和Kubelet资源占比进行自定义设置。 须知 磁盘使用directlvm模式,移除将使用looplvm模式,有影响系统稳定性的风险。 Docker资源包含Docker镜像数据以及镜像元数据,Kubelet资源包含Pod配置文件、密钥以及临时存储EmptyDir等挂载数据。 数据盘:单击“新增数据盘”,您可以增加一块数据盘。 系统盘和数据盘均可提供以下性能规格的云硬盘: 普通IO:是指由SATA存储提供资源的磁盘类型。提供可靠的块存储,单个云硬盘的最大IOPS可达到1000,可运行关键应用程序。 高IO:是指由SAS存储提供资源的磁盘类型。提供可达到3000的高IO和低至1 ms的读写延时,支持NoSQL/关系型数据库,数据仓库,文件系统等应用。 超高IO:是指由SSD存储提供资源的磁盘类型。提供可达到20000的超高IO和低至1 ms超低读写时延,支持NoSQL/关系型数据库,数据仓库等应用。 命令行注入 部分版本无此参数 请输入脚本命令。 说明: 脚本命令大小限制:0~1000字符。 步骤 4 配置完成后,单击“安装”。 待插件安装完成后,单击“返回”,在“插件实例”页签下,选择对应的集群,可查看到运行中的实例,这表明该插件已在当前集群的各节点中安装。 升级插件 步骤 1 在CCE控制台中,单击左侧导航栏的“插件管理”,在“插件实例”页签下,选择对应的集群,单击autoscaler下的“ 升级”。 说明: 如果升级按钮处于冻结状态,则说明当前插件版本是最新的版本,不需要进行升级操作; 若升级按钮可单击,则单击升级按钮即可升级autoscaler插件。 升级autoscaler插件时,会替换原先节点上的旧版本的autoscaler插件,安装最新版本的autoscaler插件以实现功能的快速升级。 步骤 2 在弹出的窗口中,配置参数后,升级该插件。配置参数可参考安装插件中的参数说明。 卸载插件 步骤 1 登录CCE控制台,在左侧导航栏中选择“插件管理”,在“插件实例”页签下,选择对应的集群,单击autoscaler下的“卸载”。 步骤 2 在弹出的窗口中,单击“是”,可卸载该插件。