总览
Watermark Pod Autoscaler (WPA) 控制器是一个自定义控制器,相比Horizontal Pod Autoscaler (HPA),扩展了很多功能。
特性
- 设置上限和下限以防止异常。
- 指定缩放速度。
- 指定时间窗口以限制放大或缩小事件。
- 支持不同的算法来计算所需副本数。
目标
该项目旨在解决上游 pod autoscaler控制器面临的内部限制。许多团队需要花费大量的人工来自动缩放。他们不能依赖HPA,因为逻辑太简单了。
WPA扩展了HPA。我们认为,WPA控制器的许多(如果不是全部)功能应该包含在HPA中。
虽然我们在内部使用WPA,但我们也想提交KEP,以建议上游功能并将其提供给社区。
使用场景
如果要自动缩放某些应用程序,但是:
- HPA的单一阈值逻辑还不够。
- 您需要指定特定于您的应用程序的禁止窗口。
- 您想限制缩放速度。
WPA旨在解决HPA的限制。
用法
伸缩算法
有两个选项可以计算所需的副本数。根据您的用例,您可能需要考虑以下之一:
-
average
来自外部度量提供者的值/当前副本数得出的比率,并与水位进行比较。推荐的副本数是来自外部指标提供的值/水位的值(根据当前值,低或高)。如果您使用的度量标准不取决于副本数,则平均算法非常适合。通常,假设我们知道单个Web服务器应处理n个rqs,则ELB收到的请求数可以指示我们要拥有多少个Web服务器。添加副本不会增加或减少收到的请求数量。
-
absolute
默认值为绝对值。我们比较了来自外部指标提供商的原始平均指标,并考虑了其利用率。推荐的副本数计算为当前副本数*外部度量标准提供者/水位中的值。绝对算法是默认算法,因为它代表最常见的用例。例如,如果您希望应用程序在60%到80%的CPU之间运行,而avg:cpu.usage为85%,则需要扩展。度量必须与副本数相关。
PS: 在上游控制器中,仅math.Ceil函数用于舍入建议数量的副本。
这意味着,如果您将阈值设置为10,则需要达到8.999 ...的利用率(从外部度量标准提供程序降低一个副本的规模)。但是,利用率10.001将使您按一个副本进行扩展。
如果该值在较低的水位之下,则WPA控制器将使用math.Floor。这样可以确保对称行为。结合其他缩放比例选项,可以更好地控制何时缩小比例。
操作
在与目标部署相同的名称空间中创建WPA。
Datadog Cluster Agent将接管创建/更新/删除事件。它解析WPA规范,以提取指标和范围以从Datadog获得。
示例
在本示例中,我们将使用一下配置:
downscaleForbiddenWindowSeconds: 60
upscaleForbiddenWindowSeconds: 30
scaleDownLimitFactor: 30
scaleUpLimitFactor: 50
minReplicas: 4
maxReplicas: 9
metrics:
- external:
highWatermark: 400m
lowWatermark: 150m
metricName: custom.request_duration.max
metricSelector:
matchLabels:
kubernetes_cluster: mycluster
service: billing
short_image: billing-app
type: External
tolerance: 0.01
界线
从水位开始,在watermarkpodautoscaler.wpa_controller_low_watermark
和watermarkpodautoscaler.wpa_controller_high_watermark
边界之间,从Datadog收集的度量值(watermarkpodautoscaler.wpa_controller_value
)以紫色显示,将指示控制器不要触发缩放事件。它们被指定为数量,因此您可以使用m | "" | k | M | G | T | P | E
轻松代表您要使用的值。
我们可以使用指标watermarkpodautoscaler.wpa_controller_restricted_scaling {reason:within_bounds}
来验证它是否确实受到限制。注意:度量标准乘以1000是为了使其更加明确,在此期间,控制器不会触发任何定标事件。
速率
第二组配置选项与部署的扩缩速度有关,由scaleDownLimitFactor
和scaleUpLimitFactor
控制。这些是介于0到100之间的整数。在给定当前副本数的情况下,它们分别表示按比例缩小和按比例放大的最大比率。
在这种情况下,如果我们有10个副本,并且建议的副本数量为14(建议的更多详细信息,请参见“算法”部分),而scaleUpFactor
为30(%),那么我们将限制为13个副本。
在下图中,我们可以看到,由指标watermarkpodautoscaler.wpa_controller_replicas_scaling_proposal
表示的建议的副本数(紫色)与当前副本数相比过高。这将触发高级上限逻辑,可以使用度量标准watermarkpodautoscaler.wpa_controller_restricted_scaling {reason:upscale_capping}
进行监视(注意:与上面相同,该度量标准被相乘以使其更加明确)。因此,副本watermarkpodautoscaler.wpa_controller_replicas_scaling_effective
的有效数量将按比例缩放,但要根据scaleUpLimitFactor进行扩展。
在这个类似的示例中,我们避免了过度缩减规模,并且可以使用同一组指标来保证我们仅缩减合理数量的副本。
- 如果
scaleUpLimitFactor
为29%:如果我们有10个副本并建议使用13个副本,那么我们会将其扩展到12个。 -
scaleDownLimitFactor
为29%:如果我们有10个副本并建议使用7,则将缩小为8。 - 我们建议添加或删除的副本的最小数量为一(而不是零)。这是为了避免使用少量副本时出现边缘情况。
- 请注意,选项
minReplicas
和maxReplicas
优先。请参阅“优先级”部分。
冷却期
最后,可用的最后一个选项是downscaleForbiddenWindowSeconds和upscaleForbiddenWindowSeconds。它们分别表示在缩放事件发生后要等待多少时间(以秒为单位),然后再进行缩放。我们仅保留上一个缩放事件,并且不将upscaleForbiddenWindowSeconds与仅上次缩放的时间进行比较。
在下面的示例中,我们可以看到,如果处于冷却期,建议的副本数将被忽略。降级的冷却时间可以使用watermarkpodautoscaler.wpa_controller_transition_countdown {transition:downscale}
进行可视化,并在下图中以黄色表示。我们可以看到它显着高于图表中橙色的冷却时间(transition:upscale)。建议缩放后,只有在适当的冷却时间结束后才缩放。这将重置两个倒数计时。
优先顺序
检索外部度量标准的值时,我们首先将其与 highWatermark
+ tolerance
之和与lowWatermark
-tolerance
之差进行比较。如果超出范围,我们将计算建议的副本数。然后,我们将该值与当前副本数进行比较,以潜在地限制建议的副本数。最后,考虑给定downscaleForbiddenWindowSeconds和upscaleForbiddenWindowSeconds,我们看看是否允许缩放。
限制
- 仅用于外部指标。
- 每个WPA仅正式支持一种度量标准。
- 不考虑将CPU标准化的副本数。
- 在目标部署中不考虑Pod的就绪状态。
- 与HPA相似,控制器每15秒轮询一次外部指标提供程序,每30秒刷新一次指标。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。