Skip to main content
AutoMQ BYOC(Bring Your Own Cloud)环境支持部署到 AWS、Google Cloud、Azure、阿里云、华为云和腾讯云提供的托管 Kubernetes 平台。本文介绍 AutoMQ 部署到 Kubernetes 平台的基本概念和约束。
本文中提及 AutoMQ 产品服务方、AutoMQ 服务方、AutoMQ,均特指 AutoMQ HK Limited 及其附属公司。

约束和限制

将 AutoMQ 部署到 Kubernetes 上,用户需要遵循如下约束和限制,因用户操作不当,会导致集群部署和变更失败。

约束 1: 用户需提供符合要求的独占 Kubernetes 集群

AutoMQ 要求独占的 Kubernetes 集群,不得和其他应用系统共享 Kubernetes 集群,原因如下:
  • Kubernetes 的网络隔离风险: AutoMQ 面向高吞吐数据传输场景,集群对网络吞吐要求高。Kubernetes 集群内不同 Pod 间网络隔离并不彻底。AutoMQ 需要独立的 Kubernetes 集群,以避免和用户的其他业务系统相互影响。
  • 运维授权隔离: AutoMQ 所在的 Kubernetes 集群需要提供代运维授权(授权 AutoMQ 服务方访问该集群)。AutoMQ 需要独立的 Kubernetes 集群,以避免应用系统越权。
一个 Kubernetes 集群可以部署多个 AutoMQ 实例。仅建议同一业务域且位于同一云网络的工作负载共享 Kubernetes 集群。

约束 2:用户需提供符合要求的专属计算资源

AutoMQ 要求使用专属计算资源。您可以通过托管节点池或 Karpenter 等自动扩缩容组件提供计算资源。计算资源池必须允许创建 AutoMQ 实例时选择的机型和可用区。
AutoMQ 需要专属计算资源,因此还需要为 Kubernetes 系统组件准备独立、稳定的计算资源池。
  • 添加专属标签和污点: 为防止 Kubernetes 集群内其他工作负载占用 AutoMQ 节点资源,可以为计算资源池添加自定义标签(例如 node-type=automq)和污点 dedicated=automq:NoSchedule,并通过 SchedulingSpec 配置对应的节点亲和性和污点容忍。
  • 机型符合要求: 计算资源池必须允许 AutoMQ 在所选云厂商上支持的机型。截至 2026 年 8 月,支持的机型如下:
  • 工作负载身份授权要求: AutoMQ 集群在运行时需要访问对象存储、云盘等服务。为 AutoMQ 工作负载 ServiceAccount 关联的云身份或角色授予所需权限,并确保不会修改或取消授权。
  • 可用区(子网要求): AutoMQ 同时支持单可用区实例和三可用区实例。托管节点池或 Karpenter NodePool 必须允许实例选择的可用区。
举例:用户需要创建三个 AutoMQ 实例,分别是实例 1(可用区 A),实例 2(可用区 B),实例 3(可用区 A、B、C)。计算资源池需要分别允许可用区 A、可用区 B 和可用区 A+B+C。

SchedulingSpec

创建实例时的 调度配置 YAML 为可选字段。当 AutoMQ Pod 需要调度到专属 Kubernetes 节点,或需要容忍专属节点的污点时,填写该字段。

支持的字段

YAML 支持以下根级字段: 节点亲和性存在以下限制:
  • 最多配置一个 nodeSelectorTerm
  • nodeSelectorTerm 只能包含非空的 matchExpressions
  • 每个表达式必须使用 In 操作符,并包含 key 和至少一个 value。
调度配置 YAML 不支持 nodeSelectortopologySpreadConstraintsmatchFields、Pod affinity 和 Pod anti-affinity。

配置专属节点

以下样例同时适用于托管节点池和 Karpenter NodePool。为计算资源池配置:
  • 自定义标签:node-type=automq
  • 污点:dedicated=automq:NoSchedule
创建 AutoMQ 实例时填写以下调度配置 YAML:
使用 Karpenter NodePool 时,在 spec.template 中添加该标签和污点,并确保 spec.template.spec.requirements 允许 AutoMQ 控制台中选择的实例机型和可用区。 也可以不添加自定义标签,直接匹配云厂商托管 Kubernetes 服务或节点池实现提供的节点池标签。不同云厂商和节点池实现使用的标签不同,请根据目标节点上的实际标签,将上述 matchExpressions 中的 key 和 value 替换为对应的节点池标签。

系统管理的调度条件

不要在 matchExpressions 中填写以下 key:
  • node.kubernetes.io/instance-type
  • topology.kubernetes.io/zone
AutoMQ 根据创建表单中的 实例机型可用区 自动生成这两个条件。如果调度配置 YAML 包含其中任意 key,请求会被拒绝。 负载均衡子网也通过创建表单单独选择。选择覆盖工作负载可用区的子网,不要在调度配置 YAML 中填写子网 ID。

排查 Pod Pending

如果 AutoMQ Pod 长时间处于 Pending,检查以下配置:
  • 目标节点包含 node affinity 使用的标签。
  • 目标节点的每个 NoSchedule 污点都有匹配的 toleration。
  • 托管节点池或 Karpenter NodePool 允许选择的实例机型和可用区。
  • 计算资源池未达到资源上限,并且云厂商在目标可用区有可用容量。
使用以下命令检查调度状态:
使用 Karpenter 时,继续检查 NodePool 和 NodeClaim 状态: