K8S限制同时启动pod的数量

K8S限制同时启动pod的数量

我在使用 K8S 时遇到了问题,我有大约 30 个微服务(在 Spring Boot 上运行 Java)。微服务仅在启动时就需要大量 CPU,因为有很多库。当我同时部署所有微服务时,它会在 K8S 节点上产生非常大的 CPU 负载,并且它们被标记为不可用。我需要以某种方式限制同时启动的 pod 数量,以避免节点上的 CPU 负载过高。有什么办法可以做到这一点吗?

答案1

您可以设置CPU限制和要求

一旦设置了这些,即使限制很宽松,kubelet 和容器运行时也会协同执行 CPU 限制。除此之外,您还可以为 Kubernetes 本身保留资源这样工作量就不会让整个节点面临风险。

定义这些后,Linux 内核将负责执行限制并确保公平分配可用资源。如果集群中有 DaemonSet,请确保它们也有资源和限制。您可以考虑将 DaemonSet 运行为保证,以便他们的资源得到保护。参见为 Pod 配置服务质量

综合起来,这些措施应该可以保护您的节点免受工作负载的影响,同时仍允许应用程序 Pod 在启动期间爆发到可用的 CPU。

如果发现仍有问题,您可以采取额外的步骤:随机延迟每次启动。您可以在不更改应用的情况下通过运行自定义初始化容器在主应用启动之前。这种随机延迟有助于避免惊群效应每个 JVM 同时以相同的资源访问模式运行时的问题。

答案2

如果你确定要限制部署期间运行的 Pod 数量,可以通过部署来扩展 Kubernetes 集群Argo 推出

通过努力,你可以定义自己的部署机制,通过设置来限制同时部署的数量短暂元数据然后制作自己的机制(验证准入 webhook 或调度插件)来限制创建或启动具有这些标签的 pod 的速率。

我不推荐这个:虽然 Kubernetes 可以实现这一点,但工作量很大。我的另一个答案是采用更简单的方法来实现类似的总体结果。

相关内容