【问题标题】:Does HorizontalPodAutoscaler make sense when there is only one Deployment on GKE (Google Container Engine) Kubernetes cluster?当 GKE(Google Container Engine)Kubernetes 集群上只有一个 Deployment 时,Horizo​​ntalPodAutoscaler 是否有意义?
【发布时间】:2016-11-21 14:02:02
【问题描述】:

我有一个“同质”的 Kubernetes 设置。我的意思是我只运行一种类型的 pod(http 服务器)的实例,负载均衡器服务向它们分配流量。

根据我的推理,为了充分利用我的集群(编辑:具体而言——获得对 http 请求的最佳平均响应时间)我应该:

  1. 每个节点上至少运行一个 pod: 没有在节点上运行 pod,意味着我正在为节点付费,但尚未准备好为请求提供服务。
  2. 每个节点上最多运行一个 pod: 这些 pod 是线程化的 http 服务器,因此它们可以最大限度地利用节点,因此在一个节点上运行多个 pod 不会给我带来任何好处。

这意味着我应该每个节点只有一个 pod。我使用 DaemonSet 实现了这一点。

另一种方法是配置一个 Deployment 并对其应用 Horizo​​ntalPodAutoscaler 并让 Kubernetes 处理 pod 的数量和 pod 到节点的映射。与此相比,我的方法有什么缺点吗?

我的评估是,Horizo​​ntalPodAutoscaler 主要适用于异构情况,其中一个 Horizo​​ntalPodAutoscaler 可以以另一个 Deployment 为代价来扩展一个 Deployment。但由于我只有一种类型的 pod,所以我只有一个 Deployment,而且我会以牺牲自身为代价来扩大该部署,这是没有意义的。

【问题讨论】:

    标签: kubernetes autoscaling google-kubernetes-engine


    【解决方案1】:

    Horizo​​ntalPodAutoscaler 实际上是满足您需求的有效解决方案。解决您的两个问题:

    1.每个节点上至少运行一个 pod

    这不是您真正关心的问题。问题是您的集群未充分利用。但是,即使您在每个节点上都运行了一个 pod,您也可能没有充分利用您的集群。考虑一个三节点集群:

    1. 场景 A:pod 在每个节点上运行,每个节点 10% 的 CPU 使用率
    2. 场景 B:pod 仅在一个节点上运行,70% 的 CPU 使用率

    即使场景 A 在每个节点上都有一个 pod,但集群的利用率实际上低于场景 B 中只有一个节点有一个 pod。

    2。每个节点上最多运行一个 pod

    Kubernetes 调度程序会尝试将 pod 分散开来,这样您就不会在单个节点上出现多个相同类型的 pod。由于在您的情况下其他节点应该是空的,因此调度程序在其他节点上启动 pod 应该没有问题。此外,如果您的 pod 请求资源与节点的资源等价,这将阻止调度程序在已有的节点上调度新的 pod。

    现在,无论您使用 DaemonSet 还是 HPA,您都可以达到相同的效果,但我个人会使用 HPA,因为我认为它更符合您的语义,并且如果您最终决定添加其他类型的pod 到你的集群

    使用 DamonSet 意味着 pod 必须在每个节点(或某个子集)上运行。这非常适合每个节点的记录器或指标收集器之类的东西。但是你真的只是想根据需要使用可用的集群资源来为你的 pod 供电,这更符合 HPA 的意图。

    顺便说一句,我相信 GKE 支持集群自动扩展,因此您永远不应该为不需要的节点付费。

    【讨论】:

    • 我应该比说“充分利用我的集群”更具体。我的意思是专门为 http 请求获得最佳平均响应时间。考虑到这个具体的评估措施,你能想到任何传入的 http 请求序列,其中每个节点不只有一个 pod 会更好吗?
    • 我不认为它会做得更好,但我也不明白为什么它会做得更糟。
    • 我同意,如果我正确配置 HPA,它不会变得更糟,任何开销都应该可以忽略不计。但推理起来有点复杂。我必须正确配置 HPA。而且我确实在计算引擎实例组上配置了一个自动缩放器,因此我必须推理 HPA 和计算引擎自动缩放器如何交互。但我承认,HPA 的意图很明确,而使用 DaemonSet 我正在重新利用一个旨在解决不同问题的工具。
    • 是的,我认为总结得很好。由您决定哪些因素更重要。我会说,如果您计划最终向集群中添加不同的 pod,那么使用 HPA 将让您比使用 DaemonSet 更容易进行切换。
    • 旧讨论,但 K8s 文档明确指出“水平 Pod 自动缩放不适用于无法缩放的对象,例如 DaemonSets。” kubernetes.io/docs/tasks/run-application/…
    猜你喜欢
    • 2018-12-25
    • 1970-01-01
    • 2020-09-12
    • 1970-01-01
    • 2015-10-25
    • 1970-01-01
    • 2017-09-11
    • 2020-11-21
    • 1970-01-01
    相关资源
    最近更新 更多