2.7. 配置 pod 调度
当两个应用调度到同一个 OpenShift 节点时,这两个应用可能使用相同的资源,如磁盘 I/O 并影响性能。这可能会导致性能下降。以避免与其他关键工作负载共享节点的方式,仅为 Kafka 使用正确的节点或专用一组节点是如何避免这些问题的最佳方法,调度 Kafka pod 是避免这些问题的最佳方法。
2.7.1. 指定关联性、容限和拓扑分布约束
使用关联性、容限和拓扑分布约束将 kafka 资源的 pod 调度到节点上。关联性、容限和拓扑分布约束使用以下资源中 的关联性
、容限
和 topologySpreadConstraint
属性进行配置:
-
Kafka.spec.kafka.template.pod
-
Kafka.spec.zookeeper.template.pod
-
Kafka.spec.entityOperator.template.pod
-
KafkaConnect.spec.template.pod
-
KafkaConnectS2I.spec.template.pod
-
KafkaBridge.spec.template.pod
-
KafkaMirrorMaker.spec.template.pod
-
KafkaMirrorMaker2.spec.template.pod
关联性
、容限
和 topologySpreadConstraint
属性的格式遵循 OpenShift 规范。关联性配置可以包含不同类型的关联性:
- pod 关联性和反关联性
- 节点关联性
在 OpenShift 1.16 和 1.17 中,对 topologySpreadConstraint
的支持会被默认禁用。要使用 topologySpreadConstraint
,您必须在 Kubernetes API 服务器和调度程序中启用 EvenPodsSpread
功能门。
2.7.1.1. 使用 pod 反关联性以避免关键应用程序共享节点
使用 pod 反关联性来确保关键应用永远不会调度到同一磁盘上。运行 Kafka 集群时,建议使用 pod 反关联性来确保 Kafka 代理不与其他工作负载(如数据库)共享节点。
2.7.1.2. 使用节点关联性将工作负载调度到特定的节点上
OpenShift 集群通常包含许多不同类型的工作程序节点。些已针对 CPU 繁重工作负载优化,有些则用于内存,另一些则可能针对存储(快速本地 SSD)或网络进行了优化。使用不同的节点有助于优化成本和性能。要获得最佳性能,务必要允许调度 AMQ Streams 组件以使用正确的节点。
OpenShift 使用节点关联性将工作负载调度到特定的节点上。通过节点关联性,您可以为要在其上调度 pod 的节点创建调度约束。约束指定为标签选择器。您可以使用内置节点标签(如 beta.kubernetes.io/instance-type)
或自定义标签来指定标签,以选择正确的节点。
2.7.1.3. 对专用节点使用节点关联性和容限
使用污点来创建专用节点,然后通过配置节点关联性和容限将 Kafka pod 调度到专用节点上。
集群管理员可以将选定的 OpenShift 节点标记为污点。具有污点的节点不在常规调度中,一般的 pod 不会调度到它们上运行。只有可以容许节点上设置的污点的服务才可以调度到其中。此类节点上运行的唯一其他服务是系统服务,如日志收集器或软件定义型网络。
在专用节点上运行 Kafka 及其组件可能会有许多优点。同一节点上运行的其他应用程序不会造成干扰或消耗 Kafka 所需的资源。这可提高性能和稳定性。