Skip to main content
参考 概述,AutoMQ 支持部署到 Kubernetes。本文介绍在 Azure Kubernetes Service(AKS)上部署 AutoMQ 8.x 的准备和配置流程。

安装环境控制台

开始前,请先按照 在 Azure 上安装 AutoMQ 使用 Docker 安装 AutoMQ 控制台,并完成 System Initialization。 如果希望通过 Terraform 快速准备控制台、AKS 和示例资源,可参考 AutoMQ Azure Terraform 示例。

准备 AKS 集群和节点池

步骤 1:创建 AKS 集群

创建 Standard AKS 集群。AutoMQ 控制台需要访问 AKS Kubernetes API,才能创建和管理 Instance。

Console UAMI 访问 AKS 集群

控制台应使用与自身关联的身份访问 AKS,避免依赖共享的静态管理员凭据。 推荐启用 Microsoft Entra integration:
  • 控制台使用 Console UAMI 通过 Microsoft Entra token 进行认证。
  • 控制台使用 clusterUser kubeconfig,使 Kubernetes 请求携带控制台的具体身份。
如果未启用 Microsoft Entra integration,控制台将通过 Azure API 获取静态 clusterAdmin kubeconfig 访问 AKS。此时需要为 Console UAMI 授予 Azure Kubernetes Service Cluster Admin Role。

Console Kubernetes 权限

身份认证配置完成后,还需要确定 Kubernetes 权限的管理位置。推荐在 Azure IAM 中统一管理控制台权限,避免额外维护 Kubernetes RBAC 配置。 启用 Microsoft Entra integration 后,推荐启用 Azure RBAC for Kubernetes Authorization:
  • 在目标 AKS cluster scope 为 Console UAMI 授予 Azure Kubernetes Service RBAC Cluster Admin。
  • 授予 System Initialization 页面生成的 AKS access 权限。该权限至少应包含 Microsoft.ContainerService/managedClusters/listClusterUserCredential/action,用于获取 clusterUser kubeconfig;它本身不授予 Kubernetes 管理权限。
如果未启用 Azure RBAC for Kubernetes Authorization,AKS 将使用 Kubernetes 原生 RBAC。此时需要授予 System Initialization 页面生成的 AKS access 权限,再由集群管理员为 Console UAMI 对应的 principal 创建并维护 Kubernetes ClusterRoleBinding。具体以该页面生成的 Azure 授权命令为准。

数据面访问 Azure 资源

AutoMQ 数据面 Pod 使用 Azure Workload Identity 访问 Azure 资源。要使用该认证机制,请同时启用 AKS 的 OIDC issuer 和 Workload Identity 功能。

网络和出站

控制台需要能够访问集群,节点需要能够拉取镜像并调用 Azure APIs,AutoMQ 服务端口也必须可达:
  • 使用 Azure CNI Node Subnet。创建 AKS 集群时必须显式配置 --network-plugin azure,且不要配置 --network-plugin-mode overlay。确保 Pod IP 可以从 AKS 集群外的控制台直接访问。
  • 确保控制台能够访问 AKS API Server 和 AutoMQ 服务端口。
  • 确保节点能够访问容器镜像仓库、Azure APIs 和 AutoMQ 所需外部服务。

生产环境的可用区

生产环境将节点分布在 3 个 Availability Zone,降低单个可用区故障的影响。

步骤 2:检查网络访问路径

在创建 Instance 前,检查 NSG、route、firewall 和 DNS 配置,确保以下路径可用:
  • AutoMQ 控制台可以访问 AKS API Server。
  • AutoMQ 控制台可以访问 AutoMQ 数据面的 Pod 或 Service 端口。
  • Kafka client 所在网络可以按业务需要访问 AutoMQ service。
  • AKS node 可以访问容器镜像仓库、Azure APIs 和 AutoMQ 所需外部服务;无 Public IP 时需要 NAT Gateway 或其他出站路径。
  • 对于 private AKS API Server,控制台 VM 必须能够连接 AKS VNet,并能够解析 AKS private DNS name。
  • 对于启用 authorized IP ranges 的 public AKS API Server,该范围必须包含控制台的出口地址。
运行以下命令检查 AKS 网络配置:
确认 networkPlugin 为 azure,且 networkPluginMode 不是 overlay。 AKS Subnet 建议至少提供 512 个 IP 地址。AutoMQ 常用服务端口包括 8083、9090、9092、9093、9102、9103、9112 和 9113。控制台所在 Subnet 是必需来源;仅在 Kafka client 需要业务访问时添加对应 client CIDR。请使用 NSG 或等价网络策略将来源限制在实际需要的 CIDR,并允许节点完成 DNS 解析和 TCP 443 出站访问。

步骤 3:准备 AutoMQ 专用节点池

为 AutoMQ Broker 创建独立 User node pool,并配置:
  • 根据 概述 选择 VM size 和节点数量。
  • 建议跨 3 个 Availability Zone,并启用 Cluster Autoscaler。
  • 添加 taint:dedicated=automq:NoSchedule。
AutoMQ 8.x 数据面使用 Azure Workload Identity。不要将 workload UAMI 绑定到 node pool VMSS,节点身份不再承载 AutoMQ 数据面权限。

步骤 4:准备 AutoMQ workload identity

AutoMQ 数据面 Pod 通过 Azure Workload Identity 访问 Blob Storage、Private DNS 和 Managed Disk。创建 Instance 时选择以下模式之一: Customer-Provided 模式需要提供 workload UAMI 的完整 ARM resource ID,而不是 client ID 或 principal ID。KSA 的 azure.workload.identity/client-id annotation 使用 UAMI client ID。控制台会检查身份配置,但用户仍需确保该身份可以访问目标 Blob container、Private DNS Zone 和 Managed Disk 资源。

创建 AutoMQ Instance

步骤 1:在控制台创建实例

登录 AutoMQ 控制台,创建 Instance,选择 Kubernetes 部署,并配置以下资源: 不要使用 display name、Resource Group/name tuple、UAMI client ID 或 principal ID 替代 ARM ID。当前支持 Azure Public Cloud 中的 AKS,以及同一 tenant、同一 Subscription 内的资源;允许资源位于不同 Resource Group。不支持 Azure IaaS、cross-subscription、cross-tenant 或 Public DNS lifecycle。
  1. AKS cluster:选择目标集群。API 或自动化场景使用完整 ARM ID:/subscriptions/<subscription-id>/resourceGroups/<resource-group>/providers/Microsoft.ContainerService/managedClusters/<aks-name>。
  2. Node pool:填写所选 AKS cluster 内的 node pool short name。
  3. Virtual Network:填写 selected VNet 的完整 ARM ID。Kubernetes 部署不将 Subnet 作为 workload placement 输入。
  4. Data bucket:选择 Managed resource,或输入 Customer-Provided Blob container。Azure Bucket ID 格式为 <storage-account>:<container>。
  5. Private DNS Zone:选择 Managed resource,或输入 Customer-Provided Private DNS Zone 的完整 ARM ID。Customer-Provided Zone 必须已有指向 selected VNet 的 resolution-only VNet Link。
  6. Instance identity:选择 Managed identity,或输入 Customer-Provided UAMI 的完整 ARM ID。
  7. Namespace 和 ServiceAccount:使用 Customer-Provided identity 时,填写 Federated Identity Credential 中 subject 对应的值。
  8. 预览配置并完成创建。
AKS、VNet 和 node pool 始终是 Customer-Provided dependency。Data bucket、Private DNS Zone 和 workload UAMI 可以选择 Managed 或 Customer-Provided。控制台不会修改或删除 Customer-Provided root resource,但仍会按 Instance lifecycle 读写 Blob object,并维护和清理 Instance-owned DNS records。

步骤 2:检查并配置 Placeholder

实例创建后,使用 Placeholder 检查脚本准备故障恢复所需的 Placeholder。生产环境应在接入业务流量前完成此步骤。 需要 Python 3.9+ 和 kubectl。执行身份需要读取所有命名空间的 Controller StatefulSet、Deployment 及集群级 PriorityClass,创建或更新生成文件中的 Namespace、PriorityClass、Deployment,并读取 automq-placeholders 命名空间中的 Pod。 按注释分步执行以下命令:
同一 Kubernetes 集群内,脚本按单个可用区复用 Placeholder。该可用区的节点匹配条件、机型、tolerations 和 Controller requests 等配置一致时,不同实例可共用已有 Deployment,即使实例使用的其他可用区不同。

后续步骤

Instance 创建完成后,确认 Instance 状态为健康、AutoMQ Pods 调度到专用节点池、Private DNS 可以从目标 VNet 解析,并从预期 client network 验证 Kafka 连接。