kubernetes - 在Kubernetes中,如何在闲置时将Deployment缩放为零

标签 kubernetes horizontal-pod-autoscaling

我正在Kubernetes集群上运行相当耗费资源的服务,以支持CI事件。仅需要一个副本,但它使用大量资源(16 cpu),并且通常仅在工作时间(工作日,大约上午8点至下午6点)才需要。我的群集在云中运行,并设置了实例自动扩展,因此,如果此服务扩展为零,则可以终止该实例。

该服务是无法修改的第三方代码(不好,很不容易)。这是一个相当典型的HTTP服务,除了它的工作量是CPU密集型的。

有哪些选项可以在闲置时自动将此部署缩小为零?

我宁愿不设置时间表来在工作时间内按比例放大/缩小,因为偶尔会在正常时间之外执行CI事件。我希望缩放是动态的(例如,在空闲时间超过30分钟时缩放为零,或者在传入连接到达时缩放为1)。

最佳答案

实际上,Kubernetes仅通过API调用将缩放比例缩小为零,因为Horizo​​ntal Pod Autoscaler确实仅支持缩小到1个副本。

无论如何,有一些运算符允许您通过拦截到达您的Pod的请求或检查某些指标来克服此限制。

您可以看看KnativeKeda
它们使您的应用程序成为无服务器的,并且它们以不同的方式实现。

Knative ,通过Istio拦截请求,如果有事件的Pod为请求服务,则它将传入的请求重定向到该请求,否则触发扩展。

相比之下, Keda 最适合事件驱动的体系结构,因为它能够检查预定义的度量标准,例如滞后,队列长度或自定义度量标准(例如,从Prometheus收集)并触发扩展。

如果在同等预定义的窗口中满足预定义的条件,则两种支持都将缩放为零。

希望能有所帮助。

关于kubernetes - 在Kubernetes中,如何在闲置时将Deployment缩放为零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61596711/

相关文章:

kubernetes - kubectl:描述与获取 -o <格式>

kubernetes - 定义了 HPA 的 kubernetes 集群是否需要 PDB?

kubernetes - 具有CrashLoopBackOff的metrics-server

java - kubernetes 中服务的 Java 应用程序中的服务器配置

kubernetes - 如何从具有特定标签的命名空间中获取 pod?

kubernetes - Traefik Ku​​bernetes : Expose non Kubernetes service

docker - 使用 https 访问 Docker 私有(private)注册表

kubernetes - HPA 创建的 Pod 数量超出预期

Kubernetes 指标服务器不提供所有指标或扩展 HPA

kubernetes - 基于 Kubernetes 指标的 Google 云 GKE 水平 Pod 自动缩放