我有一个"同类" Kubernetes设置。我的意思是我只运行单一类型的pod(一个http服务器)的实例,其中负载均衡器服务向它们分配流量。
根据我的推理,为了充分利用我的群集(编辑:具体 - 获得对http请求的最佳平均响应时间)我应该:
这意味着每个节点应该只有一个pod。我使用DaemonSet实现了这一点。
另一种方法是配置部署并对其应用HorizontalPodAutoscaler,让Kubernetes处理pod和pod to node映射的数量。与此相比,我的方法有什么不利之处吗?
我的评估是,HorizontalPodAutoscaler主要与异构情况相关,其中一个HorizontalPodAutoscaler可以以另一个部署为代价扩展部署。但由于我只有一种类型的pod,我只有一个部署,我会以牺牲自身为代价来扩展该部署,这是没有意义的。
答案 0 :(得分:0)
HorizontalPodAutoscaler实际上是满足您需求的有效解决方案。解决您的两个问题:
<强> 1。每个节点上至少有一个pod
这不是你真正关心的问题。担心的是你的集群利用不足。但是,即使您在每个节点上都运行了pod,也可能未充分利用群集。考虑一个三节点集群:
即使方案A在每个节点上都有一个窗格,但实际上集群的利用率低于场景B,其中只有一个节点有一个窗格。
<强> 2。每个节点上最多运行一个pod
Kubernetes调度程序尝试传播pod,以便您不会在单个节点上使用相同类型的多个pod。由于在您的情况下其他节点应为空,因此调度程序在其他节点上启动pod时应该没有问题。此外,如果您具有与节点资源等效的pod请求资源,则会阻止调度程序在已有节点的节点上安排新pod。
现在,无论你使用DaemonSet还是HPA,你都可以达到同样的效果,但我个人会选择HPA,因为我觉得它更适合你的语义,如果你最终决定添加其他类型的pod到群集
使用DamonSet意味着pod必须在每个节点(或某个子集)上运行。这非常适合像记录器或每个节点的度量收集器。但是你真的只是想根据需要使用可用的群集资源为你的pod提供支持,这与HPA的意图相匹配。
另外,我相信GKE支持群集自动缩放,因此您永远不应该为不需要的节点付费。