我在使用 K8S 时遇到了问题,我有大约 30 个微服务(在 Spring Boot 上运行 Java)。微服务仅在启动时就需要大量 CPU,因为有很多库。当我同时部署所有微服务时,它会在 K8S 节点上产生非常大的 CPU 负载,并且它们被标记为不可用。我需要以某种方式限制同时启动的 pod 数量,以避免节点上的 CPU 负载过高。有什么办法可以做到这一点吗?
答案1
您可以设置CPU限制和要求。
一旦设置了这些,即使限制很宽松,kubelet 和容器运行时也会协同执行 CPU 限制。除此之外,您还可以为 Kubernetes 本身保留资源这样工作量就不会让整个节点面临风险。
定义这些后,Linux 内核将负责执行限制并确保公平分配可用资源。如果集群中有 DaemonSet,请确保它们也有资源和限制。您可以考虑将 DaemonSet 运行为保证,以便他们的资源得到保护。参见为 Pod 配置服务质量。
综合起来,这些措施应该可以保护您的节点免受工作负载的影响,同时仍允许应用程序 Pod 在启动期间爆发到可用的 CPU。
如果发现仍有问题,您可以采取额外的步骤:随机延迟每次启动。您可以在不更改应用的情况下通过运行自定义初始化容器在主应用启动之前。这种随机延迟有助于避免惊群效应每个 JVM 同时以相同的资源访问模式运行时的问题。