【问题标题】:Overprovision Pods resources in Kubernetes HPA在 Kubernetes HPA 中过度配置 Pod 资源
【发布时间】:2018-05-14 12:10:27
【问题描述】:

目前,如果我们想在 kubernetes 中使用 Horizo​​ntal Pod 自动缩放,我们需要为我们想要做的服务指定以下内容:

   Limits:
      cpu:  150m
      memory:   150Mi
    Requests:
      cpu:      42m
      memory:       50Mi

我有一些服务都可以使用 HPA 进行扩展。

我们能否过度供应这些服务? 像这些服务一样,资源添加超出了 VM 可用的总资源。

更新:: 1.对问题的更多解释,2.添加图片

考虑一种情况:假设 pod 的请求在总可用 CPU 范围内,但超出限制

例如:

总可用 CPU 为 1000m 内核,2 个 pod,每个 500m 内核 requestslimit 1000m。

如果总长度只有 1000m,我可以将这个限制设置为每个 1000m 吗?

如果是? Update2:

现在,如果 pod 2 没有使用其全部 500m 的 CPU 内核,并且 pod 1 有 达到其总请求限制 500m,

这个 pod 现在可以使用超过 500m 的核心,而这些核心没有被 第二个作为限制设置为 1000 ?

如果不是? Update2:我猜这不再有效

那我猜无法完成过度配置?

【问题讨论】:

  • 如果 pod 的资源消耗请求比节点多,则不会在该节点上调度。 K8s 调度器了解所有节点及其资源能力。
  • 您的 pod 将处于 pending 状态,直到调度程序找到具有足够资源的正确节点。

标签: kubernetes horizontal-pod-autoscaling


【解决方案1】:

先简单解释一下Autoscaling Algorithm

每 30 秒一次(--horizontal-pod-autoscaler-sync-period 默认值),自动缩放器控制循环将 Pod 排队并收集它们的 CPU 利用率。然后,它将该值的算术平均值与配置的阈值进行比较,并调整副本数以匹配所需的 CPU 利用率目标。 CPU 利用率是 pod 过去 1 分钟 CPU 使用率除以 pod 请求的 CPU 的平均值。目前,CPU 使用率取自 Heapster 服务(应该存在于 kube-system 命名空间中)。

在这部分,资源请求、资源限制和 pod 亲和性都没有用处。我们只得到了所需数量的副本。 然后调度器参与自动伸缩过程,并根据副本数开始调度 Pod。此时会考虑资源请求、资源限制和 pod 亲和性来决定下一个 pod 副本将部署到哪个节点。

根据上面提到的,您可以有多个部署不能同时扩展到最大副本数。但是在资源不足的情况下,首先谁扩容 - 消耗资源,任何其他不适合剩余资源的 Pod 将不会被调度,直到资源再次空闲。

在 GCP 或 GKE 上,您可以在需要更多计算能力时使用autoscaler 向集群添加新节点,并在负载下降时移除它们。这将有助于避免“过度配置”,因为您始终可以拥有所需数量的计算能力,不多也不少。

更新: 调度程序根据可用资源、命名空间上设置的默认或配置限制以及 pod 亲和性来决定是否运行 pod。

限制每个特定 pod 的工作,限制其资源消耗;它们并非旨在限制多个 pod 的汇总资源消耗。

使用请求中提到的资源量启动 pod。

例如,如果您在节点上有 1000 个 CPU,并且 Pod 请求 500 个限制为 1000,则调度程序知道其他 500 个可用,即使 Pod 消耗所有资源达到限制。因此,在具有 1000 个 CPU 可用的节点上,您可以启动两个 pod,每个请求 500 和限制 1000。

【讨论】:

  • 是的,这是正确的,但考虑一下我在更新问题时写的情况
猜你喜欢
  • 1970-01-01
  • 2020-04-16
  • 2019-05-06
  • 2020-10-02
  • 1970-01-01
  • 2020-04-14
  • 1970-01-01
  • 2023-02-24
  • 1970-01-01
相关资源
最近更新 更多