【问题标题】:Kubernetes release requested cpuKubernetes 发布请求的 cpu
【发布时间】:2019-11-21 17:15:19
【问题描述】:

我们有一个 Java 应用程序分布在 Google Cloud Platform 上的多个 pod 上。我们还设置了内存请求,为 pod 分配了节点上可用内存的一部分,用于堆和非堆空间。

在启动 pod 时,应用程序在 CPU 方面非常占用资源,但在 pod 准备好后不使用 CPU(仅使用了 0.5%)。如果我们使用容器资源“请求”,则 Pod 在启动完成后不会释放这些资源。

Kubernetes 是否允许指定一个 pod 可以在启动期间使用(几乎)所有可用的 cpu 电源并在此之后释放这些资源?由于滚动更新,我们可以防止同时启动两个 pod。

感谢您的帮助。

【问题讨论】:

    标签: kubernetes google-cloud-platform request cpu limit


    【解决方案1】:

    如果您指定没有限制的请求,则该值将用于将 pod 调度到满足请求的可用 CPU 带宽的适当节点。内核调度程序将假定请求与实际资源消耗相匹配,但不会阻止超出使用量。这将从其他容器中“窃取”。 如果您还指定了一个限制,您的容器在尝试超过该值时将受到限制。您可以将两者结合起来以允许突发使用 cpu,超过通常的请求但不从节点分配所有内容,从而减慢其他进程。

    【讨论】:

      【解决方案2】:

      "Kubernetes是否允许指定一个pod允许使用 (几乎)在启动期间可用的所有 cpu 电源并释放那些 之后的资源?”

      这里的关键词是“可用”。答案是“是”,可以通过使用Burstable QoS(服务质量)类来实现。将 CPU 请求配置为容器启动后所需的值,或者:

      • 配置CPU限制高于CPU请求,或者
      • 不要配置 CPU 限制 in which case 如果 defined 或容器“...可以使用所有 CPU 资源可用节点上的任何命名空间的默认 CPU 限制将适用它正在运行”。

      如果节点上没有可用的 CPU 用于突发,容器将不会获得超出请求值的任何值,因此应用程序的启动可能会变慢。

      值得一提的是docs 对具有多个容器的 Pod 的解释:

      Pod 的 CPU 请求是所有 Pod 的 CPU 请求的总和 Pod 中的容器。同样,Pod 的 CPU 限制是 Pod 中所有容器的 CPU 限制。

      如果运行 Kubernetes v1.12+ 并有权配置 kubelet,Node CPU Management Policies 可能会感兴趣。

      【讨论】:

        【解决方案3】:

        在节点中调度 pod 的一个因素是资源可用性,kubernetes 调度程序根据每个 pod 的请求值计算使用的资源。如果您未在请求参数中分配任何值,则此部署请求将为零。请求参数并不能确保 pod 会使用这么多 cpu 或 ram。您可以从“kubectl top pods / nodes”获取资源的当前使用情况。 request 参数将为 pod 缓冲资源。限制限制了 Pod 的资源使用量。 你可以在这里https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/获得更多信息。 这将使您大致了解请求和限制。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-09-03
          • 2019-11-28
          • 2023-03-03
          • 2020-10-19
          • 1970-01-01
          • 2019-06-08
          • 1970-01-01
          • 2011-01-19
          相关资源
          最近更新 更多