docker - 在 Kubernetes 中调度和扩展 Pod
问题描述
我在 GKE 上运行 k8s 集群
它有 4 个不同配置的节点池
节点池:1(单节点coroned状态)
运行Redis 和 RabbitMQ
节点池:2(单节点coroned状态)
运行监控和普罗米修斯
节点池:3(大单节点)
应用程序 pod
节点池:4(启用自动缩放的单节点)
应用程序 pod
目前,我正在为 GKE 上的每个服务运行单个副本
然而,主要服务的 3 个副本主要管理一切。
当使用 HPA 扩展此主要服务时,有时会看到 Node 崩溃或kubelet frequent restart
POD 进入 Unkown 状态的问题。
如何处理这种情况?如果节点崩溃,GKE 需要时间进行自动修复并导致服务停机。
问题2
节点池:3 -4 个正在运行的应用程序 POD。在应用程序内部,有 3-4 个内存密集型微服务,我也想使用节点选择器并将其修复在一个节点上。
而只有小型节点池将运行具有 HPA 和节点自动缩放自动为该节点池工作的主服务。
但是我觉得使用节点选择器并不是最好的方法。
最好为每个服务运行多个副本,但目前,我们只运行每个服务的单个副本,因此请建议考虑该部分。
解决方案
正如Patrick W在他的评论中正确建议的那样:
如果你只有一个节点,你就会给自己留下一个单点故障。还要记住,自动缩放需要时间来启动,并且基于资源请求。如果您的节点由于内存密集型工作负载而遭受 OOM,您需要重新调整您的内存请求和限制– Patrick W Oct 10 at
您可能需要重新设计一些基础设施,以便在每个节点池中拥有多个节点,并重新调整内存请求和限制
您可能想查看官方 kubernetes 文档和Google Cloud 博客中的以下部分:
如何处理这种情况?如果节点崩溃,GKE 需要时间进行自动修复并导致服务停机。
这就是为什么为单个节点池拥有多个节点可能是更好的选择。它大大降低了您最终陷入上述情况的可能性。GKE autorapair功能需要花费一些时间(通常是几分钟),如果这是您唯一的节点,您将无能为力,需要接受可能的停机时间。
节点池:3 -4 个正在运行的应用程序 POD。在应用程序内部,有 3-4 个内存密集型微服务,我也想使用节点选择器并将其修复在一个节点上。
而只有小型节点池将运行具有 HPA 和节点自动缩放自动为该节点池工作的主服务。
但是我觉得使用节点选择器并不是最好的方法。
您还可以在节点亲和性和反亲和性以及污点和容忍度方面获得战利品
推荐阅读
- shiny - 如何根据公式而不是单元格值更改 Shiny DT 表的单元格颜色?
- javascript - 如何使 JavaScript 忽略对象字段中的转义字符
- angular - Ionic 5 在构建期间将文件导出到 www
- excel - Excel:我可以在“真”时使用“如果”公式,而不必将公式复制到 [value-if-true]?
- java - Java - 带有 Integer.valueOf() 的空格导致 java.lang.NumberFormatException
- jquery - Select2 显示闪烁的“多个”滚动条,直到 ready()
- pyspark - PySpark 自定义 TimestampType 列转换
- javascript - Javascript new Date 自动添加一天
- powershell - 您如何为任务序列变量设置编写 Pester 模拟
- javascript - 如何设置自动完成结果的样式