本文中提及 AutoMQ 产品服务方、AutoMQ 服务方、AutoMQ,均特指 AutoMQ HK Limited 及其附属公司。
约束和限制
将 AutoMQ 部署到 Kubernetes 上,用户需要遵循如下约束和限制,因用户操作不当,会导致集群部署和变更失败。约束 1: 用户需提供符合要求的独占 Kubernetes 集群
AutoMQ 要求独占的 Kubernetes 集群,不得和其他应用系统共享 Kubernetes 集群,原因如下:- Kubernetes 的网络隔离风险: AutoMQ 面向高吞吐数据传输场景,集群对网络吞吐要求高。Kubernetes 集群内不同 Pod 间网络隔离并不彻底。AutoMQ 需要独立的 Kubernetes 集群,以避免和用户的其他业务系统相互影响。
- 运维授权隔离: AutoMQ 所在的 Kubernetes 集群需要提供代运维授权(授权 AutoMQ 服务方访问该集群)。AutoMQ 需要独立的 Kubernetes 集群,以避免应用系统越权。
约束 2:用户需提供符合要求的专属计算资源
AutoMQ 要求使用专属计算资源。您可以通过托管节点池或 Karpenter 等自动扩缩容组件提供计算资源。计算资源池必须允许创建 AutoMQ 实例时选择的机型和可用区。-
添加专属标签和污点: 为防止 Kubernetes 集群内其他工作负载占用 AutoMQ 节点资源,可以为计算资源池添加自定义标签(例如
node-type=automq)和污点dedicated=automq:NoSchedule,并通过 SchedulingSpec 配置对应的节点亲和性和污点容忍。 - 机型符合要求: 计算资源池必须允许 AutoMQ 在所选云厂商上支持的机型。截至 2026 年 8 月,支持的机型如下:
- 工作负载身份授权要求: AutoMQ 集群在运行时需要访问对象存储、云盘等服务。为 AutoMQ 工作负载 ServiceAccount 关联的云身份或角色授予所需权限,并确保不会修改或取消授权。
- 可用区(子网要求): AutoMQ 同时支持单可用区实例和三可用区实例。托管节点池或 Karpenter NodePool 必须允许实例选择的可用区。
SchedulingSpec
创建实例时的 调度配置 YAML 为可选字段。当 AutoMQ Pod 需要调度到专属 Kubernetes 节点,或需要容忍专属节点的污点时,填写该字段。支持的字段
YAML 支持以下根级字段:
节点亲和性存在以下限制:
- 最多配置一个
nodeSelectorTerm。 nodeSelectorTerm只能包含非空的matchExpressions。- 每个表达式必须使用
In操作符,并包含 key 和至少一个 value。
nodeSelector、topologySpreadConstraints、matchFields、Pod affinity 和 Pod anti-affinity。
配置专属节点
以下样例同时适用于托管节点池和 Karpenter NodePool。为计算资源池配置:- 自定义标签:
node-type=automq - 污点:
dedicated=automq:NoSchedule
spec.template 中添加该标签和污点,并确保 spec.template.spec.requirements 允许 AutoMQ 控制台中选择的实例机型和可用区。
也可以不添加自定义标签,直接匹配云厂商托管 Kubernetes 服务或节点池实现提供的节点池标签。不同云厂商和节点池实现使用的标签不同,请根据目标节点上的实际标签,将上述 matchExpressions 中的 key 和 value 替换为对应的节点池标签。
系统管理的调度条件
不要在matchExpressions 中填写以下 key:
node.kubernetes.io/instance-typetopology.kubernetes.io/zone
排查 Pod Pending
如果 AutoMQ Pod 长时间处于 Pending,检查以下配置:- 目标节点包含 node affinity 使用的标签。
- 目标节点的每个
NoSchedule污点都有匹配的 toleration。 - 托管节点池或 Karpenter NodePool 允许选择的实例机型和可用区。
- 计算资源池未达到资源上限,并且云厂商在目标可用区有可用容量。