4.7. 为基于 Operator 的代理部署配置资源限值和请求
在创建基于 Operator 的代理部署时,部署中的代理 Pod 在 OpenShift 集群中节点上的 StatefulSet 中运行。您可以为部署配置自定义资源(CR)实例,以指定每个 Pod 中运行的代理容器所使用的 host-node 计算资源。通过为 CPU 和内存(RAM)指定限制和请求值,您可以确保代理 Pod 的性能令人满意。
- 首次部署 CR 之前,您必须为代理部署添加限制和请求的配置。您无法将 配置添加到已在运行的代理部署中。
- 红帽无法为限制和请求推荐值,因为这些基于您的特定消息传递系统用例和您实现的结果架构。但是 , 建议您在生产环境中测试并调整这些值,然后再为生产环境配置它们。
- 在初始化每个代理 Pod 时,Operator 会运行一个名为 Init Container 的容器。您为每个代理容器配置的任何资源限值和请求也适用于每个 Init 容器。有关在代理部署中使用初始容器的更多信息,请参阅 第 4.1 节 “Operator 如何生成代理配置”。
您可以指定以下限制和请求值:
CPU 限制- 对于在 Pod 中运行的每个代理容器,这个值是容器可消耗的主机节点 CPU 的最大数量。如果代理容器尝试超过指定的 CPU 限制,OpenShift 会节流容器。这样可确保容器具有一致的性能,无论节点上运行的 Pod 数量是什么。
内存限制- 对于在 Pod 中运行的每个代理容器,这个值是容器可以使用的最大主机节点内存量。如果代理容器尝试超过指定的内存限值,OpenShift 会终止容器。代理 Pod 重启。
CPU 请求对于在 Pod 中运行的每个代理容器,这个值是容器请求的主机节点 CPU 的数量。OpenShift 调度程序在 Pod 放置过程中考虑 CPU 请求值,将代理 Pod 绑定到具有足够计算资源的节点。
CPU 请求值是代理容器需要运行 的最小 CPU 量。但是,如果节点上没有 CPU 争用,则容器可以使用所有可用的 CPU。如果您指定了 CPU 限制,容器不能超过该数量的 CPU 用量。如果节点上有 CPU 争用,则 CPU 请求值提供了一种方法,供 OpenShift 用于权衡所有容器的 CPU 使用量。
内存请求对于在 Pod 中运行的每个代理容器,这个值是容器请求的主机节点内存量。OpenShift 调度程序在 Pod 放置过程中考虑内存请求值,将代理 Pod 绑定到具有足够计算资源的节点。
内存请求值是代理容器需要运行的 最小内存量。但是,容器可以尽可能消耗可用内存。如果指定了内存限制,则代理容器不能超过该内存用量。
CPU 以名为 millicores 的单位来衡量。OpenShift 集群中的每个节点检查操作系统,以确定节点上的 CPU 内核数。然后,节点会将该值乘以 1000 以表示总容量。例如,如果某个节点有两个内核,节点的 CPU 容量表示为 2000m。因此,如果您想要使用单个核心的一处,您可以指定 100m 的值。
内存以字节为单位。您可以使用字节表示法(E、P、T、G、M、K)或二进制等效(Ei、Pi、Gi、Mi Ki)来指定值。您指定的值必须包含单位。
4.7.1. 配置代理资源限值和请求 复制链接链接已复制到粘贴板!
以下示例演示了如何为代理部署配置主自定义资源(CR)实例,以便为部署 Pod 中运行的每个代理容器设置限制和请求。
- 首次部署 CR 之前,您必须为代理部署添加限制和请求的配置。您无法将 配置添加到已在运行的代理部署中。
- 红帽无法为限制和请求推荐值,因为这些基于您的特定消息传递系统用例和您实现的结果架构。但是 , 建议您在生产环境中测试并调整这些值,然后再为生产环境配置它们。
先决条件
- 您熟悉如何使用 CR 实例创建基本代理部署。请参阅 第 3.4.1 节 “部署基本代理实例”。
流程
-
编辑用于代理部署的
ActiveMQArtemis(CR)实例。 在 CR 的
deploymentPlan部分中,添加一个resources部分。添加limits和requests子项。在每个子部分中,添加一个cpu和memory属性并指定值。例如:spec: deploymentPlan: size: 1 image: placeholder requireLogin: false persistenceEnabled: true journalType: nio messageMigration: true resources: limits: cpu: "500m" memory: "1024M" requests: cpu: "250m" memory: "512M"limits.cpu- 在部署中的 Pod 中运行的每个代理容器都不能超过此主机节点 CPU 用量。
limits.memory- 在部署中的 Pod 中运行的每个代理容器都不能超过此主机节点内存用量。
requests.cpu- 在部署中运行的每个代理容器都会请求这个主机节点 CPU。这个值是 代理容器 运行所需的最小 CPU 量。
requests.memory在部署中运行的每个代理容器都会请求这个主机节点内存。这个值是代理容器运行所需的 最小内存量。
注意如果您为资源指定
限制,但没有指定请求,则代理容器会请求该资源配置的限值值。例如,在以下配置中,代理容器请求配置的限值值500mcpu 和1024M内存。spec: deploymentPlan: size: 3 ... resources: limits: cpu: "500m" memory: "1024M"重要在不设置
请求的情况下设置限制,以控制请求的内存和 CPU 准确量,并确保如果部署有多个代理,为每个代理容器请求相同的值。
- 保存 CR。