水平豆荚自动播放器

水平吊舱自动播放器根据观察到的CPU利用率自动缩放复制控制器,部署,副本集或状态集中的吊舱数(或者自定义指标支持某些其他应用程序提供的指标)。请注意,水平POD自动播放不适用于无法缩放的对象,例如守护程序。

水平吊舱自动阶段被实现为Kubernetes API资源和控制器。资源确定控制器的行为。控制器周期性地调整复制控制器中的副本数量或部署,以匹配观察到的指标,例如平均CPU利用率,平均内存利用率或用户指定的目标的任何其他自定义度量。

卧式豆荚自动驾驶员如何工作?

水平Pod自动缩放图

水平Pod自动缩放器实现为一个控制循环,周期由控制器管理器控制- horizo​​ntal-pod-autoscaler-sync-sumper标志(默认值为15秒)。

在每个时段期间,控制器管理器查询对每个StumplePodautosder定义中指定的度量的资源利用率。控制器管理器从资源度量标准API(针对每个POD资源度量)或自定义度量标准API(对于所有其他度量)来获得指标。

  • 对于每个POD资源指标(如CPU),控制器从资源度量标准API获取来自水平划分器的每个POD的资源度量标准API。然后,如果设置了目标利用率值,则控制器将利用值计算为每个POD中的容器上的等效资源请求的百分比。如果设置了目标原始值,则直接使用原始度量标准值。然后,控制器采用来自所有目标豆荚的利用率或原始值的平均值(取决于指定的目标类型),并产生用于缩放所需副本的数量的比率。

    请注意,如果某些Pod的容器没有相关的资源请求集,则不会定义POD的CPU利用率,并且自动播放器不会对该度量进行任何操作。看看算法细节关于自动缩放算法如何工作的更多信息,请参见下面的部分。

  • 对于PER-POD自定义指标,控制器功能类似于每个POD资源指标,除了它与原始值合适,而不是利用率。

  • 对于对象指标和外部指标,获取单个度量标准,其描述了有问题的对象。将该度量与目标值进行比较,以产生与上述比率。在里面自动定量/ v2beta2API版本,该值可以可选地除以比较之前的POD数。

HorizontalPodAutoscaler通常从一系列聚合的api (metrics.k8s.iocustom.metrics.k8s.io,external.metrics.k8s.io).这metrics.k8s.ioAPI通常由Metrics-Server提供,需要单独启动。看Metrics-Server.有关说明。ThealThealPodautoscaler还可以直接从HeaPster获取指标。

笔记:
特征状态: Kubernetes v1.11 [已弃用]

从Heapster获取指标在Kubernetes 1.11中被弃用。

支持度量标准API为更多的细节。

AutoScaler通过使用刻度子资源访问相应的可伸缩控制器(例如复制控制器,部署和副本集)。Scale是一个允许您动态设置副本的数量并检查其当前状态的界面。可以找到关于比例子资源的更多细节在这里

算法细节

从最基本的角度来看,水平POD自动播放器控制器在所需度量值和电流度量值之间的比率上运行:

LavenceReplicas = CEIL [CurrentReplicas *(CurrentMetricValue / QuanceMetricValue)]

例如,如果当前的度量标准值是200万,期望值为100米,复制品的数量将增加一倍,因为200.0 / 100.0 == 2.0如果当前值是替代的50米,我们会把复制品的数量减半,因为50.0 / 100.0 == 0.5.如果比率足够接近1.0(在全球可配置的公差范围内,我们将跳过缩放- horizo​​Ntal-pod-autoscaler宽容标志,默认为0.1)。

当一个targetAverageValuetargetAverageUtilization是指定的,CurrentMetricvalue.是通过取HorizontalPodAutoscaler的缩放目标中所有pod的给定度量的平均值来计算的。然而,在检查公差和决定最终值之前,我们要考虑吊舱准备情况和缺失的度量。

所有带有删除时间戳集的Pods(即正在关闭的Pods)和所有失败的Pods都将被丢弃。

如果特定的POD缺少指标,则会留出来留出来;具有缺失指标的POD将用于调整最终的缩放金额。

在CPU上缩放时,如果任何POD还没有准备就绪(即它仍然初始化)豆荚的最新度量点是在准备好之前,豆荚也被搁置。

由于技术约束,在确定是否留出某些CPU度量时,TextalyPodautoscaler控制器不能准确地确定POD准备好。相反,如果它是没有较好的,如果它在短,可配置的时间窗口中没有ade,则它会考虑一个“尚未准备就绪”的POD。此值配置为——horizontal-pod-autoscaler-initial-readiness-delay标志,其默认值为30秒。一旦一个圆荚体准备好了,如果它在一个较长的、可配置的时间内发生,它就会考虑成为第一个过渡。此值配置为- horizo​​Ntal-pod-autoscaler-cpu-initialization-句标志,它的默认为5分钟。

currentMetricValue / desiredMetricValue然后使用未被搁置或从上方丢弃的剩余豆荚来计算基尺比率。

如果有任何指标缺失,我们将更保守地重新计算平均值,假设这些荚在缩小规模时消耗100%的期望值,在扩大规模时消耗0%。这抑制了任何潜在尺度的大小。

此外,如果存在任何尚未准备就绪的豆荚,并且我们将在不考虑缺失的指标或尚未准备就绪的豆荚中进行扩展,我们保守地假设尚未准备好的豆荚消耗所需度量的0%,进一步抑制缩放的大小。

在不准备就绪的豆荚和缺少指标中进行编制后,我们重新计算使用率。如果新比率反转尺度方向,或者在公差范围内,我们跳过缩放。否则,我们使用新比率来扩展。

请注意原来的即使在使用新的使用率,也会通过StructalPodautoster状态报告平均利用率的值,而不会在未经尚未准备就绪的窗口或缺少的指标中进行记录。

如果在HorizontalPodAutoscaler中指定了多个指标,则对每个指标执行此计算,然后选择所需副本计数中最大的一个。如果这些指标中的任何一个不能转换成一个想要的副本计数(例如,由于从指标api获取指标的错误),并且根据可以获取的指标建议缩小,缩放将被跳过。这意味着如果一个或多个指标给出一个,HPA仍然能够进行扩展jainingreplicas.大于当前值。

最后,在HPA缩放目标之前,记录了规模推荐。控制器在可配置窗口中考虑所有建议,从而在该窗口中选择最高推荐。可以使用此值使用该值——horizontal-pod-autoscaler-downscale-stabilization标志,默认为5分钟。这意味着缩小尺度将逐渐发生,平滑迅速波动的度量值的影响。

API对象

水平Pod自动缩放器是Kubernetes中的一个API资源自动播放API组。目前稳定的版本,它只包括对CPU自动级别的支持,可以在其中找到自动播放/ v1API版本。

beta版本包括对内存和自定义指标的扩展支持,可以在自动定量/ v2beta2.新的领域介绍自动定量/ v2beta2在使用时保存为注释自动播放/ v1

当您创建一个HorizontalPodAutoscaler API对象时,请确保指定的名称是有效的DNS域名.关于API对象的更多细节可以在下面找到Horizo​​ ntalPodautoscaler对象

支持水平Pod自动scaler在kubectl

水平POD自动播放器,如每个API资源,以标准方式支持kubectl..我们可以创建一个新的自动缩放使用kubectl创建命令。我们可以列出自动阶层kubectl获得HPA.并获得详细说明kubectl描述hpa.最后,我们可以删除一个自动伸缩器使用kubectl删除HPA.

此外,还有一个特殊的kubectl自动定量命令创建一个HorizontalPodAutoscaler对象。例如,执行kubectl自动踏板rs foo -min = 2 --max = 5 - 百分比= 80是否为复制集创建自动缩放程序Foo,目标CPU利用率设置为80%复制数在2到5之间。详细的文件乐动体育是干嘛的kubectl自动定量能够被找到的在这里

滚动更新期间自动播放

目前在Kubernetes中,可以使用Deployment对象来执行滚动更新,该对象管理底层的副本集。Hystaly Pod AutoStaler仅支持后一种方法:水平Pod自动播放器绑定到部署对象,它设置部署对象的大小,并且部署负责设置底层副本集的大小。

水平POD AutoStaler使用Replication Controlser的直接操作不适用于滚动更新,即您不能将水平POD AutoStoper绑定到Replication Controller并进行滚动更新。这不起作用的原因是,当滚动更新创建新的复制控制器时,水平Pod自动播放器将不会绑定到新的复制控制器。

支持冷却/延迟

当使用Horizontal Pod Autoscaler管理一组副本的规模时,由于所评估的度量的动态特性,副本的数量可能不断频繁地波动。这有时被称为捶打

从v1.6开始,群集运算符可以通过调整作为标志的全局HPA设置来降低此问题kube-controller-manager组件:

从V1.12开始,一个新的算法更新删除了对高档延迟的需求。

  • ——horizontal-pod-autoscaler-downscale-stabilization:指定低级稳定时间窗口的持续时间。卧式窗格自动播放器记得历史推荐尺寸,只在此时间窗口中的最大尺寸。默认值为5分钟(5M0s.).
笔记:调整这些参数值时,群集运算符应了解可能的后果。如果延迟(冷却时间)值设置得太长,则可能存在抱怨的水平吊舱自动阶段对工作负载变化并不响应。但是,如果延迟值设置得太短,则副本集的规模可能会像往常一样继续扭转。

支持资源指标

可以基于缩放目标中的POD的资源使用来缩放任何HPA目标。定义POD规范时,资源请求中央处理器内存应该指定。这用于确定资源利用率并由HPA控制器使用以向上或向下缩放目标。要使用基于资源利用率的缩放指定如下所示的度量源:

类型资源资源的名字中央处理器目标类型利用平均化60.

使用此度量标准,HPA控制器将保持缩放目标中的POD的平均利用率为60%。利用率是利用资源的当前使用与POD所要求的资源之间的比率。看算法有关如何计算利用率和平均的更多详细信息。

笔记:由于所有容器的资源用法总结了总POD利用率可能无法准确表示单个容器资源使用情况。这可能导致单个容器可能使用高使用率运行的情况,并且HPA不会缩放,因为整体POD使用仍然在可接受的限制范围内。

集装箱资源指标

特征状态: Kubernetes v1.20(α)

Horizo​​ ntalPodautoscaler.还支持一个容器度量源,其中HPA可以跟踪各个容器的资源使用,以便缩放目标资源。这使您可以为最重要的POD配置最重要的容器的缩放阈值。例如,如果您有Web应用程序和日志记录Sidecar,则可以根据Web应用程序的资源使用,忽略Sidecar容器及其资源使用。

如果您修改了具有不同集装箱集的新POD规范,则应修改HPA规范,如果该新添加的容器也应用于缩放。如果度量源中的指定容器不存在或仅存在于POD的子集中,则忽略这些窗口并重新计算推荐。看算法有关计算的更多细节。要使用容器资源进行自动伸缩,请定义如下度量源:

类型containerErsource.containerErsource.的名字中央处理器容器应用目标类型利用平均化60.

在上面的例子中,HPA控制器扩展目标,使cpu的平均利用率应用所有豆荚的容器为60%。

笔记:

如果更改了StructalPodaUtoscaler的容器的名称是跟踪,则可以以特定顺序进行更改以确保缩放仍然可用,并且在应用更改时。在更新定义容器(例如部署)的资源之前,您应该更新关联的HPA以跟踪新的和旧容器名称。这样,HPA能够在整个更新过程中计算缩放推荐。

对工作负载资源进行容器名称更改后,通过从HPA规范中删除旧的容器名称进行整理。

支持多个指标

Kubernetes 1.6增加了基于多个指标的扩展支持。你可以使用自动定量/ v2beta2API版本指定多个指标的水平Pod自动缩放。然后,水平Pod自动缩放控制器将评估每个度量,并提出一个基于该度量的新尺度。拟议比额表中最大的一个将用作新比额表。

支持自定义指标

笔记:Kubernetes 1.2添加了alpha支持,可以使用特殊的注释基于应用特定的度量进行伸缩。为了支持新的自动伸缩API, Kubernetes 1.6删除了对这些注释的支持。虽然收集自定义指标的旧方法仍然可用,但这些指标将不能被Horizontal Pod Autoscaler使用,并且以前用于指定可伸缩的自定义指标的注释不再被Horizontal Pod Autoscaler控制器使用。

Kubernetes 1.6增加了对在水平Pod自动缩放器中使用自定义指标的支持。控件中使用的水平Pod自动缩放器可以添加自定义指标自动定量/ v2beta2API。然后kubernetes查询新的自定义度量标准API以获取相应的自定义度量标准的值。

支持度量标准API对于要求。

支持度量标准API

默认情况下,StricalPodaUtoscaler控制器从一系列API中检索指标。为了让它访问这些API,群集管理员必须确保:

  • API聚合层已启用。

  • 相应的API已注册:

    • 对于资源指标,这是metrics.k8s.ioAPI,通常由Metrics-Server..它可以作为一个集群插件启动。

    • 对于自定义指标,这是custom.metrics.k8s.ioAPI。它由度量解决方案供应商提供的“适配器”API服务器提供。检查您的指标管道,或者已知解决方案列表.如果你想写自己,请查看样板开始。

    • 对于外部指标,这是external.metrics.k8s.ioAPI。它可以由上面提供的自定义度量适配器提供。

  • ——horizontal-pod-autoscaler-use-rest-clients真正的或者未命中。将此设置为FALSE切换到基于Heapster的自动播放,这被推荐为弃用。

有关这些不同的指标路径以及它们的不同信息,请参阅相关的设计提案HPA V2custom.metrics.k8s.ioexternal.metrics.k8s.io

有关如何使用它们的示例使用自定义指标的演练使用外部指标的演练

支持可配置的缩放行为

从...开始v1.18v2beta2.API允许通过HPA配置缩放行为行为字段。行为是单独指定的,以便上下缩放放大缩小下面的部分行为字段。可以为两个方向指定一个稳定窗口,以防止缩放目标中的副本数量的波动。类似地,指定伸缩策略可以控制伸缩时副本的更改速率。

缩放政策

中可以指定一个或多个伸缩策略行为当指定多个策略时,允许最大更改量的策略是默认选择的策略。下面的例子展示了这种缩比的行为:

行为缩小政策-类型豆荚价值4.期间60.-类型百分价值10期间60.

期间指示过去的策略必须为真的时间长度。第一个政策(舱)允许最多4次副本在一分钟内缩小。第二政策(百分)允许在一分钟内缩小最多10%的当前副本。

由于默认情况下,选择允许最高变更量的策略,因此只有在POD副本的数量超过40时才会使用第二策略。使用40或更少的副本,将应用第一个策略。例如,如果存在80副本,则必须将目标缩小到10副本,然后在第一步骤8期间将减少副本。在下一次迭代时,当副本的数量为72时,10%的POD为7.2,但数字最多舍入8.在自动播放器控制器的每个循环上,待更改的POD数量基于数字重新计算。当前的副本。当副本数量低于40后,第一个政策(舱)应用,一次将减少4件复制品。

属性可以更改策略选择selectPolicy缩放方向的字段。通过将值设置为最小值这将选择允许副本数量最小的策略。将值设置为禁用完全禁止在那个方向缩放。

稳定的窗口

当用于伸缩的指标持续波动时,稳定窗口用于限制副本的波动。自动缩放算法使用稳定窗口来考虑过去计算的期望状态,以防止缩放。在下面的例子中,稳定窗口被指定为缩小

缩小stabilizationWindowSeconds300

当指标表明目标应该缩小时,算法将查看之前计算的所需状态,并使用指定间隔中的最高值。在上面的例子中,过去5分钟的所有期望状态都将被考虑。

默认的行为

要使用自定义缩放,则必须指定所有字段。只能指定需要自定义的值。这些自定义值与默认值合并。默认值与HPA算法中的现有行为匹配。

行为缩小stabilizationWindowSeconds300政策-类型百分价值One hundred.期间15放大stabilizationWindowSeconds0.政策-类型百分价值One hundred.期间15-类型豆荚价值4.期间15selectPolicy马克斯

用于缩小稳定窗口300秒(或价值——horizontal-pod-autoscaler-downscale-stabilization如果提供的标志)。只有单一的策略缩放,允许删除的100%才能删除,这意味着缩放目标可以缩放到允许的最小副本。为了缩放,没有稳定窗口。当指标表明应缩放目标时,目标立即缩放。有2个策略,每15秒将每15秒添加4个POD或100%的当前正在运行的副本,直到HPA达到其稳定状态。

例如:更改下缩稳定窗口

为了提供一个1分钟的自定义降阶稳定窗口,以下行为将被添加到HPA:

行为缩小stabilizationWindowSeconds60.

示例:限制缩放速率

为了将HPA去除豆荚的速度限制在每分钟10%,需要在HPA中添加以下行为:

行为缩小政策-类型百分价值10期间60.

为了确保每分钟删除的Pods不超过5个,您可以添加第二个固定大小为5的缩减策略,并进行设置selectPolicy至少。环境selectPolicy最小值意味着自动伸缩器选择影响最小的Pods数量的策略:

行为缩小政策-类型百分价值10期间60.-类型豆荚价值5.期间60.selectPolicy最小值

示例:禁用缩放

selectPolicy的价值禁用关闭给定方向的缩放。因此,为了防止缩减以下政策,将使用以下政策:

行为缩小selectPolicy禁用

隐式维护模式取消激活

无需更改HPA配置本身,可以隐式地停用目标的HPA。如果目标所需的副本计数设置为0,并且HPA的最小副本计数大于0,则HPA停止调整目标(并设置缩放自身的条件错误的),直到手动调整目标所需的副本数或HPA的最小副本数来重新激活它。

下一步是什么

最后修改3月25日,2021年9月9日PM PST:修复水平POD自动播放器增强的链接(10BE302DC)