首页 > 解决方案 > 在 Kubernetes 中调度和扩展 Pod

问题描述

我在 GKE 上运行 k8s 集群

它有 4 个不同配置的节点池

节点池:1(单节点coroned状态)

运行Redis 和 RabbitMQ

节点池:2(单节点coroned状态)

运行监控和普罗米修斯

节点池:3(大单节点)

应用程序 pod

节点池:4(启用自动缩放的单节点)

应用程序 pod

目前,我正在为 GKE 上的每个服务运行单个副本

然而,主要服务的 3 个副本主要管理一切。

当使用 HPA 扩展此主要服务时,有时会看到 Node 崩溃或kubelet frequent restartPOD 进入 Unkown 状态的问题。

如何处理这种情况?如果节点崩溃,GKE 需要时间进行自动修复并导致服务停机。

问题2

节点池:3 -4 个正在运行的应用程序 POD。在应用程序内部,有 3-4 个内存密集型微服务,我也想使用节点选择器并将其修复在一个节点上。

而只有小型节点池将运行具有 HPA 和节点自动缩放自动为该节点池工作的主服务。

但是我觉得使用节点选择器并不是最好的方法。

最好为每个服务运行多个副本,但目前,我们只运行每个服务的单个副本,因此请建议考虑该部分。

标签: dockerkubernetesgoogle-cloud-platformgoogle-kubernetes-engine

解决方案


正如Patrick W在他的评论中正确建议的那样:

如果你只有一个节点,你就会给自己留下一个单点故障。还要记住,自动缩放需要时间来启动,并且基于资源请求如果您的节点由于内存密集型工作负载而遭受 OOM,您需要重新调整您的内存请求和限制– Patrick W Oct 10 at

您可能需要重新设计一些基础设施,以便在每个节点池中拥有多个节点,并重新调整内存请求和限制

您可能想查看官方 kubernetes 文档Google Cloud 博客中的以下部分:

如何处理这种情况?如果节点崩溃,GKE 需要时间进行自动修复并导致服务停机。

这就是为什么为单个节点池拥有多个节点可能是更好的选择。它大大降低了您最终陷入上述情况的可能性。GKE autorapair功能需要花费一些时间(通常是几分钟),如果这是您唯一的节点,您将无能为力,需要接受可能的停机时间。

节点池:3 -4 个正在运行的应用程序 POD。在应用程序内部,有 3-4 个内存密集型微服务,我也想使用节点选择器并将其修复在一个节点上。

而只有小型节点池将运行具有 HPA 和节点自动缩放自动为该节点池工作的主服务。

但是我觉得使用节点选择器并不是最好的方法。

您还可以在节点亲和性和反亲和性以及污点和容忍度方面获得战利品


推荐阅读