计划在 Kubernetes 中扩展 PODs

Scheduled scaling for PODs in Kubernetes

我有一个扩展部署,可预测负载变化取决于时间。如何让我的部署为负载做好准备(例如,我想每晚将 pods 数字从 16:00 加倍到 23:00)。 Kubernetes 有提供这样的工具吗?

我知道 Kubernetes pods 正在使用 Horizontal Pod Autoscaler 扩展,它根据 CPU 利用率或自定义指标扩展 pods 的数量。但这是被动的方法,我正在寻找主动的方法。

快速 google 搜索会将您引导至此处:https://github.com/kubernetes/kubernetes/issues/49931

从本质上讲,目前最好的解决方案是 运行 作为 Pod 主容器的边车容器,它可以使用 kubernetes api 根据时间段自行扩展使用一个简单的 bash 脚本,或者自己编写一个 CRD 来响应基于时间的事件(现在是下午 6 点),就像这样:

https://github.com/amelbakry/kube-schedule-scaler

它在部署时使用类似 cron 的规范监视注释并做出相应的反应。

Kubernetes的Horizo​​ntal Pod Autoscaler并不是一种被动的方式,而是一种主动的方式。让我用它的默认设置来解释它的算法:

  • 冷却时间为5分钟
  • 每 15 秒跟踪一次资源利用率

这意味着系统每 15 秒跟踪一次资源利用率(取决于最终用户设置的指标,例如 CPU、存储...等)。 直到每冷却5分钟(无缩放动作),控制器会计算过去5分钟的资源利用率(使用上面每15秒的历史数据轨迹)。然后它通过以下等式估计下一个 5 分钟时间 window 所需的资源数量(即副本数量):

desiredReplicas = ceil[currentReplicas * ( currentMetricValue / desiredMetricValue )]

其他主动自动缩放器也以类似的方式工作。不同点在于他们可能会应用不同的技术(队列理论、机器学习或时间序列模型)来估计 desiredReplicas,就像上面等式中所做的那样。