云服务器内容精选

  • Cluster Autoscaler工作原理 Cluster Autoscaler主要流程包括两部分: ScaleUp流程: Autoscaler会每隔10s检查一次所有未调度的Pod,根据用户设置的策略,选择出一个符合要求的节点池进行扩容。 Autoscaler检测未调度Pod进行扩容时,使用的是与Kubernetes社区版本一致的调度算法进行模拟调度计算,若应用调度采用非内置kube-scheduler调度器或其他非Kubernetes社区调度策略,此类应用使用Autoscaler扩容时可能因调度算法不一致出现无法扩容或多扩风险。 ScaleDown流程:Autoscaler每隔10s会扫描一次所有的Node,如果该Node上所有的Pod Requests少于用户定义的缩容百分比时,Autoscaler会模拟将该节点上的Pod是否能迁移到其他节点,如果可以的话,当满足不被需要的时间窗以后,该节点就会被移除。 当集群节点处于一段时间空闲状态时(默认10min),会触发集群缩容操作(即节点会被自动删除)。当节点存在以下几种状态的Pod时,不可缩容: Pod有设置Pod Disruption Budget(即干扰预算),当移除Pod不满足对应条件时,节点不会缩容。 Pod由于一些限制,如亲和、反亲和等,无法调度到其他节点,节点不会缩容。 Pod拥有cluster-autoscaler.kubernetes.io/safe-to-evict: 'false'这个annotations时,节点不缩容。 节点上存在kube-system命名空间下的Pod(除kube-system命名空间下由DaemonSet创建的Pod),节点不缩容。 节点上如果有非controller(Deployment/ReplicaSet/Job/StatefulSet)创建的Pod,节点不缩容。 当节点符合缩容条件时,Autoscaler将预先给节点打上DeletionCandidateOfClusterAutoscaler污点,限制Pod调度到该节点上。当autoscaler插件被卸载后,如果节点上依然存在该污点请您手动进行删除。
  • AutoScaler重试扩容的周期说明 当节点池扩容因为资源售罄、配额不足、节点安装过程中错误等原因失败时,AutoScaler 能够重试同一节点池或者切换其他节点池扩容,重试扩容的周期如下: 当节点池资源售罄或者用户配额不足时,AutoScaler将按照5min、10min、20min对节点池进行冷却,最多冷却30min。 同时AutoScaler将在下一个10s切换其他节点池进行扩容,直到扩容出期望的节点或者所有节点池都进入冷却。 当节点池在节点安装过程中发生错误时,节点池会进入5min冷却期。 冷却期过后,AutoScaler才可以重新触发该节点池扩容。 当安装过程中的错误节点被自动回收后,Cluster AutoScaler将在1min内重新评估集群状态,按需触发节点池扩容。 在节点池扩容时,如果节点池节点长时间处于安装中状态,Cluster AutoScaler将最多容忍此类节点15min,超过容忍时间后,将重新评估集群状态,按需触发节点池扩容。
  • 冷却时间说明 节点池中配置的两个冷却时间之间的影响和关系如下: 弹性扩容中的冷却时间 弹性缩容冷却时间:当前节点池扩容出的节点多长时间不能被缩容,作用范围为节点池级别。 弹性缩容中的冷却时间 扩容后缩容冷却时间:autoscaler触发扩容后(不可调度、指标、周期策略)整个集群多长时间内不能被缩容,作用范围为集群级别。 节点删除后缩容冷却时间:autoscaler触发缩容后整个集群多长时间内不能继续缩容,作用范围为集群级别。 缩容失败后缩容冷却时间:autoscaler触发缩容失败后整个集群多长时间内不能继续缩容,作用范围为集群级别。
  • 配置节点池弹性伸缩策略 在CCE控制台,单击集群名称进入集群。 单击左侧导航栏的“节点管理”,在目标节点池所在行右上角单击“弹性伸缩”。 若未安装autoscaler插件,请根据业务需求配置插件参数后单击“安装”,并等待插件安装完成。插件配置详情请参见CCE集群弹性引擎。 若已安装autoscaler插件,则可直接配置弹性伸缩策略。 配置节点池弹性伸缩策略。 伸缩配置 自定义扩容规则:单击“添加规则”,在弹出的添加规则窗口中设置参数。您可以设置多条节点弹性策略,最多可以添加1条CPU使用率指标规则、1条内存使用率指标规则,且规则总数小于等于10条。 规则类型可选择“指标触发”或“周期触发”,两种类型区别如下: 表1 自定义规则类型 规则类型 参数设置 指标触发 触发条件:请选择“CPU分配率”或“内存分配率”,输入百分比的值。该百分比应大于autoscaler插件中配置的缩容百分比。 说明: 分配率 = 节点池容器组(Pod)资源申请量 / 节点池Pod可用资源量 (Node Allocatable) 。 如果多条规则同时满足条件,会有如下两种执行的情况: 如果同时配置了“CPU分配率”和“内存分配率”的规则,两种或多种规则同时满足扩容条件时,执行扩容节点数更多的规则。 如果同时配置了“CPU分配率”和“周期触发”的规则,当达到“周期触发”的时间值时CPU也满足扩容条件时,较早执行的A规则会将节点池状态置为伸缩中状态,导致B规则无法正常执行。待A规则执行完毕,节点池状态恢复正常后,B规则也不会执行。 配置了“CPU分配率”和“内存分配率”的规则后,策略的检测周期会因autoscaler每次循环的处理逻辑而变动。只要一次检测出满足条件就会触发扩容(还需要满足冷却时间、节点池状态等约束条件)。 当集群中的节点数已到达集群规模上限时,或CPU、内存达到autoscaler插件设置的上限时,将不会触发指标扩容。 执行动作:达到触发条件后所要执行的动作。 自定义:为节点池增加指定数量的节点。 自动计算:当达到触发条件时,自动扩容节点,将分配率恢复到触发条件以下。计算公式如下: 扩容节点数 = 节点池容器组(Pod)资源申请值 / (单节点可用资源值 * 目标分配率) - 当前节点数 + 1 周期触发 触发时间:可选择每天、每周、每月或每年的具体时间点。 执行动作:达到触发时间值后所要执行的动作,为节点池增加指定数量的节点。 节点数范围:弹性伸缩时节点池下的节点数量会始终介于节点数范围内。 冷却时间:指当前节点池扩容出的节点多长时间不能被缩容。 伸缩对象 规格选择:对节点池中的节点规格单独设置是否开启弹性伸缩。 查看集群级别的弹性伸缩配置,集群级别的配置对所有节点池生效。当前页面仅支持查看集群级别的弹性伸缩策略,如需修改请前往“配置中心”进行设置,详情请参见配置集群弹性伸缩策略。 设置完成后,单击“确定”。
  • 约束限制 仅按需计费节点池支持弹性伸缩。 当节点池中节点为0时,autoscaler插件无法获取节点CPU/内存数据,指标触发的节点弹性规则将不会生效。 GPU/NPU节点驱动未安装成功时,autoscaler插件会认为该节点未完全可用,通过CPU/内存指标触发的节点弹性规则将不会生效。 缩容节点会导致与节点关联的本地持久卷类型的PVC/PV数据丢失,无法恢复,且PVC/PV无法再正常使用。缩容节点时使用了本地持久存储卷的Pod会从缩容的节点上被驱逐,并重新创建Pod,Pod会一直处于pending状态,因为Pod使用的PVC带有节点标签,由于冲突无法调度成功。 使用autoscaler插件时,部分污点/注解可能会影响弹性伸缩功能,因此集群中应避免使用以下污点/注解: 节点避免使用ignore-taint.cluster-autoscaler.kubernetes.io的污点:该污点作用于节点。由于autoscaler原生支持异常扩容保护策略,会定期评估集群的可用节点比例,非Ready分类节点数统计比例超过45%比例会触发保护机制;而集群中任何存在该污点的节点都将从自动缩放器模板节点中过滤掉,记录到非Ready分类的节点中,进而影响集群的扩缩容。 Pod避免使用cluster-autoscaler.kubernetes.io/enable-ds-eviction的注解:该注解作用于Pod,控制DaemonSet Pod是否可以被autoscaler驱逐。详情请参见Kubernetes原生的标签、注解和污点。
  • 操作步骤 在CCE控制台,单击左侧导航栏的“弹性伸缩”,在“节点伸缩”页签下,单击“创建节点伸缩策略”按钮。 进入创建节点伸缩策略页面,在“插件检测”步骤中: 若插件名称后方显示,请单击插件后方的“现在安装”按钮,根据业务需求配置插件参数后单击“立即安装”,等待插件安装完成。 若插件名称后方显示,则说明插件已安装成功。 确认插件已安装成功后,单击“下一步:策略配置”。 如果插件已提前安装成功,单击“创建节点伸缩策略”按钮后,在“插件检测”步骤中经过短暂检测后将直接进入“策略配置”步骤。 在打开的“创建节点伸缩策略”页面中,参照如下参数设置策略。 策略名称:新建策略的名称,请自定义。 关联节点池:请单击“添加节点池”后选择要操作的节点池。您可以关联多个节点池,以使用相同的伸缩策略。 节点池新增了优先级功能,弹性扩容时CCE将按照如下策略来选择节点池进行扩容: 通过预判算法判断节点池是否能满足让Pending的Pod正常调度的条件,包括节点资源大于Pod的request值、nodeSelect、nodeAffinity和taints等是否满足Pod正常调度的条件;另外还会过滤掉扩容失败(因为资源不足等原因)还处于15min冷却时间的节点池。 有多个节点池满足条件时,判断节点池设置的优先级(优先级默认值为0,取值范围为0-100,其中100为最高,0为最低),选择优先级最高的节点池扩容。 如果有多个节点池处于相同的优先级,或者都没有配置优先级时,通过最小浪费原则,根据节点池里设置的虚拟机规格,计算刚好能满足Pending的Pod正常调度,且浪费资源最少的节点池。 如果还是有多个节点池的虚拟机规格都一样,只是AZ不同,那么会随机选择其中一个节点池触发扩容。 如果出现优先选择的节点池资源不足,会按照优先级顺序自动选择下一个节点池。 节点池优先级功能详情请参见弹性扩缩容。 执行规则:单击“添加规则”,在弹出的添加规则窗口中设置如下参数: 规则名称:请输入规则名称,可自定义。 规则类型:可选择“指标触发”或“周期触发”,两种类型区别如下: 指标触发: 触发条件:请选择“CPU分配率”或“内存分配率”,输入百分比的值。该百分比应大于autoscaler插件中配置的缩容百分比。 分配率 = 节点池容器组(Pod)资源申请量 / 节点池Pod可用资源量 (Node Allocatable) 。 如果多条规则同时满足条件,会有如下两种执行的情况: 如果同时配置了“CPU分配率”和“内存分配率”的规则,两种或多种规则同时满足扩容条件时,执行扩容节点数更多的规则。 如果同时配置了“CPU分配率”和“周期触发”的规则,当达到“周期触发”的时间值时CPU也满足扩容条件时,较早执行的A规则会将节点池状态置为伸缩中状态,导致B规则无法正常执行。待A规则执行完毕,节点池状态恢复正常后,B规则也不会执行。 配置了“CPU分配率”和“内存分配率”的规则后,策略的检测周期会因autoscaler每次循环的处理逻辑而变动。只要一次检测出满足条件就会触发扩容(还需要满足冷却时间、节点池状态等约束条件)。 执行动作:与上述“触发条件”相对应,达到触发条件值后所要执行的动作。如图1中所示,当内存分配率超过40%时将增加5个节点。 图1 指标触发-执行动作 周期触发: 触发时间:可选择每天、每周、每月或每年的具体时间点,如图2所示,则为每天15:00触发。 图2 周期触发时间 执行动作:与上述“触发时间”相对应,达到触发时间值后所要执行的动作。如图3中所示,即每天15:00时将执行增加5个节点的动作。 图3 定时触发-执行动作 您可以单击“添加规则”,设置多条节点伸缩策略。您最多可以添加1条CPU使用率指标规则、1条内存使用率指标规则,且规则总数小于等于10条。 设置完成后,单击“创建”,在“完成”步骤中若显示“创建节点伸缩策略***任务提交成功”,可单击“返回节点策略”。 在“节点伸缩”页签下,可以看到刚创建的节点伸缩策略。 图4 节点伸缩策略