3.2. 自动化控制器 pod 容器的大小建议
从概述部分查看 图 1.1 “自动化控制器架构”,您会注意到 control pod 包含 4 个容器:
- web
- ee
- redis
- task
这些容器在 Ansible 自动化控制器中执行一个唯一功能,了解资源配置如何影响控制 pod 至关重要。默认情况下,Red Hat OpenShift 提供了适用于最小测试安装的低值,但不建议在生产环境中运行 Ansible Automation Platform。
Ansible Automation Platform 的 Red Hat OpenShift 默认值是:
- cpu: 100m
- 内存:128Mi
默认情况下,Red Hat OpenShift 不会配置任何最大资源限值,并将尝试分配 Ansible Automation Platform 控制 pod 请求的所有可能资源。此配置可能会导致资源不足,并影响在 Red Hat OpenShift 集群上运行的其他应用程序。
要演示控制 Pod 中容器的资源请求和限值的起点,我将使用以下假设:
- 3 个 worker 节点在 Red Hat OpenShift 集群中可用,每个都有 4 个 vCPU 和 16GiB RAM
- 为自动化作业最大化资源比高可用性更重要
- 用于运行自动化控制器的专用 worker 节点
- 剩余的两个 worker 节点用于运行自动化作业
在调整控制 pod 中的容器大小时,务必要考虑具体工作负载。虽然我进行了性能测试,它们为这个参考环境提供特定建议,但这些建议可能不适用于所有类型的工作负载。
作为起点,我决定利用 性能集合 playbook,特别是 chatty_tasks.yml。
性能基准包括:
- 使用 1 个主机创建清单
-
创建运行
chatty_tasks.yml
文件的作业模板
chatty_tasks
作业模板使用 ansible.builtin.debug
模块来生成每个主机的一组调试消息,并生成必要的清单。通过使用 ansible.builtin.debug
模块,我可以在不引入任何其他开销的情况下获得自动化控制器性能的准确表示。
作业模板使用指定的并发级别执行,范围从 10 到 50,表示作业模板的同时调用数量。
以下 资源请求和资源限制 是性能基准的结果,可用作使用类似资源的 Red Hat OpenShift 集群运行 AAP 的起始基准。
spec: ... ee_resource_requirements: limits: cpu: 500m memory: 400Mi requests: cpu: 100m memory: 400Mi task_resource_requirements: limits: cpu: 4000m memory: 8Gi requests: cpu: 1000m memory: 8Gi web_resource_requirements: limits: cpu: 2000m memory: 1.5Gi requests: cpu: 500m memory: 1.5Gi redis_resource_requirements: limits: cpu: 500m memory: 1.5Gi requests: cpu: 250m memory: 1.5Gi
内存资源请求和限值匹配以防止在 Red Hat OpenShift 集群中利用内存资源,这可能会导致 Pod 的 Out Of Memory (OOM) Kill。如果资源限值大于资源请求,可能会导致一个场景,允许过度使用 Red Hat OpenShift 节点。
CPU 资源请求和限值与内存不同,因为 CPU 资源被视为可压缩。这意味着,Red Hat OpenShift 会在达到资源限值时尝试节流容器的 CPU,但不会终止容器。在以上控制 pod 中的容器中,提供了 CPU 请求,这些请求对于给定的工作负载有足够的 CPU,但允许将其阈值(CPU 限值)设置为更高的值,允许在负载下激增。
上面的场景假设,没有其他应用程序在 control pod 所在的 worker 节点上使用资源,因为它使用了专用的 Red Hat OpenShift worker 节点。更多详情请参阅 第 3.7 节 “为自动化控制器 pod 指定专用节点”。