0

目前,如果我们想在 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 核,每个限制1000m。

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

如果是? 更新2: <我认为我们可以做到,就像我在下图中所做的实验一样>

过度配置集群

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

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

如果不? Update2:我想这不再有效

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

4

1 回答 1

0

让我们从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 上,您可以在需要更多计算能力时使用自动扩缩器向集群添加新节点,并在负载下降时移除它们。这将有助于避免“过度配置”,因为您始终可以拥有所需数量的计算能力,不多也不少。

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

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

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

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

于 2018-05-14T15:11:47.383 回答