kubernetes/openshift 中的请求与限制 cpu

2024-05-07

我在为 Openshift 中的 pod 选择正确的请求和限制设置时遇到一些困境。一些数据:

  1. 在启动期间,应用程序需要至少 600 毫核才能在 150 秒内完成就绪检查。
  2. 启动后,200 毫核应该足以让应用程序保持空闲状态。

所以我从文档中的理解:

CPU 请求

Pod 中的每个容器都可以指定它在节点上请求的 CPU 量。调度程序使用 CPU 请求来查找适合容器的节点。 CPU 请求代表容器可能消耗的最小 CPU 量,但如果不存在 CPU 争用,则它可以使用节点上的所有可用 CPU。如果节点上存在 CPU 争用,CPU 请求会提供系统上所有容器的相对权重,以了解容器可以使用多少 CPU 时间。 在节点上,CPU 请求映射到内核 CFS 共享以强制执行此行为。

需要注意的是,调度器会参考请求CPU对节点进行分配,一旦分配完毕就是保证资源。 另一方面,我可能会分配额外的 CPU,因为仅在启动期间可能需要 600 毫核。

所以我应该去

resources:
    limits:
      cpu: 1
    requests:
      cpu: 600m

为保证资源或

resources:
    limits:
      cpu: 1
    requests:
      cpu: 200m 

为了更好地节省CPU


我认为你没有明白请求与限制,我建议您看一下docs https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/#how-pods-with-resource-limits-are-run在你做出决定之前。

在简短的解释中,

Request是虚拟地分配给容器多少资源,它保证您需要时可以使用它,并不意味着它保留独占给容器。也就是说,如果您请求 200mb RAM 但只使用了 100mb,则其他 100mb 将在其他容器消耗完所有请求的内存时被“借用”,并在您的容器需要时“收回”。

Limit很简单,就是在因消耗过多资源而关闭之前,容器可以消耗多少、请求+从其他容器借用的量。

  1. 如果容器超出其内存limit, 它会probably被终止。
  2. 如果容器超出其内存request, it is likely每当节点内存不足.

简单来说,限制是一个绝对值,它应该等于或高于请求,好的做法是避免限制高于所有容器的请求,只有在某些工作负载可能需要它的情况下,这是因为大多数容器突然会消耗比它们请求的更多的资源(即:内存) POD 将开始以一种不可预测的方式从节点中逐出,这使得情况比每个 POD 都有固定限制更糟糕。

里面还有一个不错的帖子码头工人文档 https://docs.docker.com/config/containers/resource_constraints/关于资源限制。

The 调度CPU 和内存的规则相同,如果节点有足够的 CPU 和内存可分配以适应所有资源,K8s 只会将 POD 分配给该节点要求的通过 pod 内的容器。

The 执行规则有点不同:

内存是节点中的有限资源,容量是绝对限制的,容器消耗的容量不能超过节点的容量。

另一方面,CPU 是以 CPU 时间来衡量的,当您预留 CPU 容量时,您就告诉容器可以使用多少 CPU 时间,如果容器需要的时间比请求的时间多,则可以对其进行限制并执行排队直到其他容器耗尽分配的时间或完成工作。总而言之,与内存非常相似,但容器不太可能因消耗过多 CPU 而被杀死。当其他容器未使用分配给它们的完整 CPU 时间时,该容器将能够使用更多 CPU。主要问题是,当容器使用的 CPU 多于分配的 CPU 时,限制会降低应用程序的性能,并且在某些时候可能会停止正常工作。如果不提供限制,容器将开始影响节点中的其他资源。

关于要使用的值,没有正确的值或正确的公式,每个应用程序都需要不同的方法,只有多次测量才能找到正确的值,我给您的建议是确定最小值和最大值并进行调整在中间的某个地方,然后继续监视以查看其行为,如果您觉得浪费\缺乏资源,您可以减少\增加到最佳值。如果服务至关重要,请从较高的值开始,然后减少。

对于准备情况检查,您不应将其用作指定这些值的参数,您可以使用以下命令延迟准备情况initialDelaySeconds探针中的参数,以提供额外的时间来启动 POD 容器。

PS:我引用了“借用”和“收回”这两个术语,因为容器实际上并不是从另一个容器借用的,一般来说,节点有一个内存池,并在容器需要时将大块内存提供给容器,因此从技术上讲,内存不是从容器借来的,而是从池中借来的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

kubernetes/openshift 中的请求与限制 cpu 的相关文章

随机推荐

  • 如何以编程方式获取 Android 项目(非设备)中支持的语言列表

    在一些项目中我们可能会出现这种情况 如何以编程方式获取此应用程序 项目支持的语言列表 结果我需要这样的字符串数组 en bg bs da de hr it nl pl pt sk sr tr 当然 我可以通过键入它来对其进行硬编码 但我认为
  • 在 Bootstrap 导航栏后添加一些空间的最佳方法是什么?

    以下代码始终在页面顶部显示导航栏 我需要将第二个容器 内容 放置在导航栏的末尾而不是其下方 目前第二个容器位于导航栏下方 我可以在内容顶部添加一些空白 但我不确定这是一个好方法 知道如何解决吗 div class container div
  • 将 CSS 类应用于 asp:Hyperlink 中的图像?

    我使用 asp Hyperlink 根据 URL 中的参数动态呈现链接图像 我需要能够将 CSS 类添加到渲染的 img 中 但不知道如何做到这一点 我知道我可以将 CssClass blah 添加到asp Hyperlink 但在渲染的H
  • CSS3 过渡卡住了

    我们的新网站上正在进行很多转换 有一个特别之前工作得很好 但自从添加谷歌地图后 某种过渡效果不会触发 此外 它还会禁用网站上的所有其他过渡效果 直到触发另一个 javascript 函数 我不知道为什么 但这些就是事实 该问题似乎仅限于 S
  • 我的 QSqlQueryModel 不在列表视图中显示数据

    我正在玩 QSqlQueryModel 但我现在完全陷入困境 我一整天都在寻找解决方案 但到目前为止还没有运气 我所做的工作是它从我的 sqlite 数据库中提取数据 但由于某种原因我无法在列表视图中显示它 我的角色名似乎不存在 对于我从数
  • Typescript 1.8 模块:从文件夹导入所有文件

    我正在使用 Typescript 构建一个大型库 其中包含 100 个独立的 ts 文件 以前我用过导出模块XXX 重命名为导出命名空间 XXX稍后 对于我的所有课程 但正如书籍所说 这不是推荐的方法 我应该使用 import 代替 所以我
  • ActiveSupport 如何计算月度总和?

    我很高兴也很惊讶地发现 ActiveSupport 按照我想要的方式进行月度汇总 无论相关月份中有多少天 添加1 month对特定的Time将使您在该月的同一天着陆Time gt Time utc 2012 2 1 gt Wed Feb 0
  • Solr 您的意思是(拼写检查组件)

    我在我的应用程序中使用 solr 并集成了拼写检查组件 但我遇到了一些问题 第一的 当我输入一个用空格分隔的术语时 他们会给我每个术语的更正 Eg 水 gt 什么术语 但事实是watters 第二 当我输入一些带有错误术语的短语时 尽管其他
  • 向 Windows 服务发送 Windows 消息

    有没有任何工具可以将 WM ENDSESSION 等 Windows 消息发送 模仿 到 Windows 服务 OR 如何使用 C 向进程发送 Windows 消息 我只懂C 编辑 目的 基本上我必须调试 Windows 服务来修复仅在系统
  • 在Java中,如何在每次进入或退出给定对象的监视器时记录一条消息?

    我正在尝试调试一些使用一些自定义引用计数 锁定的 C Java 绑定 我想让 JVM 在每次给定对象进入或退出其监视器时打印一条消息 有什么办法可以做到这一点吗 基本上 我想要这个 synchronized lock System out
  • 使用 FormData 发送 XMLHttpRequest

    我正在尝试使用 JavaScript 制作 XHR 但无法使其正常工作 当我在 Chrome 开发者工具的 网络 选项卡中看到正确的请求时 我看到他们有一个 表单数据 部分其中列出了随请求发送的所有信息 如下所示 现在 我尝试让我的XMLH
  • 什么时候选择Spring框架?

    HI 我想知道什么时候我们必须选择Spring框架 选择spring框架有什么明显的优势吗 我不想知道其中的差异 而是选择其他技术 如 J2EE 等 为什么我们特别选择 Spring 问题是您是在谈论核心 Spring 框架 还是 Spri
  • 使用 PHP DOM 获取子节点的值

    下面是我使用的 XML 示例
  • -bash: gulp: 在 Mac 中找不到命令

    我尝试在 mac 中安装 gulp 如下所示 Is iMac itop npm root Users itop node modules Is iMac itop npm config set prefix usr local Is iMa
  • 如何在 WooCommerce 中添加属性术语图像?

    在 WooCommerce 中 我创建了一个属性 品牌 并添加了一些术语 例如 品牌一 品牌二 等 我想为每个术语添加图像 目前没有在属性项中添加图像的选项 请告诉我如何在属性项中添加图像 管理链接是这样的 wp admin edit ta
  • 查找手动注册(混淆)的本机函数地址

    我试图理解一个 Android 应用程序 其中包含一个名为foo在班上com app Bar 课堂内Bar有一个加载共享对象的静态子句System loadLibrary libfoo so 我认为是用它构建的 f可见性 隐藏 https
  • Matplotlib导入错误ft2font

    我在 64 位 Mac 上的 Canopy 下安装了 Python 2 7 6 Ipython 版本为 2 1 0 这是一个非常奇怪的问题 我不确定这是否是路径文件问题 每当我导入 matplotlib pyplot 不仅仅是 matplo
  • VBA 下标超出工作簿名称范围

    我从网上拉了一些代码来打开文件夹中的最新文件 这似乎工作得很好 然而 在代码的后面 我添加了一行附加行来设置最近打开的同一文件 尝试此操作时 工作簿 subscipt 超出范围 我认为这与语法有关 可能需要在工作簿名称中添加额外的引号 有什
  • JS:如何将此字符串转换为日期对象

    该字符串是 2012 04 13T22 59 33 我努力了Date parse str Y m dTH i s 这对我不起作用 我不确定 T 代表什么 只需将其作为日期的参数即可 var date new Date 2012 04 13T
  • kubernetes/openshift 中的请求与限制 cpu

    我在为 Openshift 中的 pod 选择正确的请求和限制设置时遇到一些困境 一些数据 在启动期间 应用程序需要至少 600 毫核才能在 150 秒内完成就绪检查 启动后 200 毫核应该足以让应用程序保持空闲状态 所以我从文档中的理解