跳转到主要内容
参考 概述▸,AutoMQ 支持部署到 Kubernetes 上。本文介绍 AutoMQ 部署到AWS EKS 平台的安装过程。
AutoMQ 将在产品的完整生命周期 内,始终保持与 Amazon Elastic Kubernetes Service (EKS) 及 EKS Anywhere (EKS-A) 的深度、持续集成。为践行该承诺,我们保证:持续的版本兼容: 我们确保 AutoMQ 的每一个新版本,都能兼容当前及未来的 EKS 与 EKS-A 版本。同时,我们主动适配 AWS 平台的更新,为用户提供无缝的、前向兼容的流畅体验。及时的响应与修复: 我们建立了清晰的响应机制,能够快速定位并修复由客户或 AWS 报告的任何配置、安全及非安全问题。

安装环境控制台

参考概述▸,AutoMQ 支持部署到 EKS 集群。在 EKS 部署模式下,首先仍然需要安装 AutoMQ 控制台,再通过控制台界面操作 EKS,将集群部署到 EKS。安装控制台的操作文档请参考准备 AWS BYOC 环境▸

准备 EKS 集群和必要的节点池等资源

如果您期望将在 Kubernetes 上运行 AutoMQ 集群,您需要准备一个 EKS 集群以供 AutoMQ 使用。如果期望在 EC2 上部署 AutoMQ 集群,则无需准备 EKS 集群。

步骤 1:创建所需的 IAM Role

在创建 EKS 集群及节点组之前,需要先创建专用的 IAM Role。此 Role 用于 EKS 集群自身的服务授权。
  1. 访问 IAM 控制台,点击创建 Role。
  2. Trusted entity type:选择 AWS Service
  3. Service Use case:选择 EKS-Cluster
  4. 点击下一步,输入自定义的角色名称,并创建 IAM Role。
在创建 EKS 集群使用的 IAM 角色后,还需要为 EKS 节点池创建一个 IAM Role,参考 AWS 节点池文档《Amazon EKS 节点组 IAM 角色》的步骤,创建节点池 IAM Role。

步骤 2:创建 EKS 集群

  1. 登录 AWS EKS 控制台,点击创建集群,选择自定义创建模式。
  2. 配置集群基础信息
    • 绑定上一步创建的 EKS 集群 IAM Role。
    • 选择 Kubernetes 版本,选择1.32 版本
AutoMQ 集群需要通过访问 EC2 Node 的 Metadata 服务,默认需要 AL2(Amazon Linux 2)版本的节点池才能正常工作。EKS 1.33 版本开始,AWS 默认不再支持 AL2 节点池,因此建议选择 1.32 版本的 EKS 集群。
  1. 配置 VPC 网络
    • 选择您为 AutoMQ 准备的 VPC,这个 VPC 应该与应用所在的 VPC 保持一致。
    • 选择用于部署集群的私网子网。
    • 安全组建议选择 VPC 的默认安全组。
  2. 保持其他默认配置,创建 EKS 集群。
  3. 授权控制台访问。 为了让 AutoMQ 控制台能够管理 EKS 集群,您需要为其授权。
    1. 前往 EKS 集群的 Access 菜单,点击 Create Access Entry
    2. 选择 AutoMQ 控制台使用的 IAM Role(通常在安装控制台时创建)。
    3. Type 设置为 Standard
    4. 点击下一步,在 Add access policy 页面,选择 AmazonEKSClusterAdminPolicy 策略。
    5. Scope 选择 Cluster,点击添加。
    6. 完成创建。
  4. 设置安全组规则,允许 EKS 集群外访问 Pod 以及 EKS API Server 服务。
    AutoMQ 控制台组件需要调用 EKS 集群的 API Server,因此需要确保控制台所在的安全组可以访问 EKS 集群的 API Server 端口(443 端口)。此外,AutoMQ 集群的 Broker 需要对外暴露服务端口,如果集群外的组件(包括控制台以及 Producer/Consumer 等应用)需要访问 AutoMQ,您需要为 EKS 集群的安全组添加入站规则。
    • 端口: 443, 9090, 9092, 9102, 9122, 9112, 8083
    • 来源: 根据您的应用所在的 CIDR 范围进行设置。至少需要确保 AutoMQ 控制台所在的 EC2 可以访问。

步骤 3:创建 EKS 节点组

您需要为 EKS 集群创建至少两种节点组:一个用于运行系统组件的公共节点组,一个用于运行 AutoMQ 工作负载的专用节点组。

1. 创建公共节点组

  1. 进入 EKS 集群详情页,点击计算菜单,创建节点组
  2. IAM Role:选择您在步骤 1中创建的节点组 IAM Role。
  3. AMI Type:选择 Amazon Linux2。
  4. 机型配置:建议选择 t3.medium 或同等规格的机型,数量建议 2-3 台。
  5. 子网:选择 EKS 部署所需的所有私网子网。
  6. 完成节点组创建。

2. 创建 AutoMQ Broker 专用节点组

  1. 再次进入计算菜单,创建节点组
  2. IAM Role:选择您在步骤 1中创建的节点组 IAM Role。
  3. 污点(Taints):为该节点组配置污点,以确保只有 AutoMQ 的 Pod 可以调度上来。请使用以下配置:
    • dedicated
    • automq
    • 效果NO_SCHEDULE
  4. 机型配置:请参考 AutoMQ 的机型建议选择机型。
  5. AMI Type:选择 Amazon Linux2。
  6. 子网:根据您的 AutoMQ 集群规划,选择一个三个可用区的私网子网。
  7. 数量:建议起步 3 节点,并根据业务规模合理评估最大节点数。
  8. 完成节点组创建。
如果 AWS 控制台无法创建 AL2 系统,则可以通过 CLI 工具或者 Terraform 创建。以下是 CLI 工具的执行命令参考:
aws eks create-nodegroup \
  --region {regionId} \
  --cluster-name {EKS Cluster Name} \
  --nodegroup-name {EKS Node Group Name} \
  --subnets {Subnet list} \
  --node-role {Node Group Role ARN} \
  --instance-types {EC2 VM Type} \
  --ami-type AL2_x86_64 \
  --disk-size 20 \
  --scaling-config {minSize=3,maxSize=3,desiredSize=3}

3. 创建 Kafka Connector 节点组(可选)

如果期望使用 AutoMQ 提供的托管 Kafka Connect 服务,您还需要为运行 Connector 准备节点资源。建议参考公共节点池的操作方法创建节点池,或者直接在公共节点池扩容,确保拥有充足的计算资源即可。

步骤 4:初始化本地工具并配置 EKS 插件

新创建的 EKS 集群需要安装一些必要的系统插件才能配合 AutoMQ 工作。

1. 初始化本地工具

  1. 在您的本地环境安装并配置 AWS CLIkubectlHelm
  2. 执行以下命令,生成 KubeConfig 配置文件,以便 kubectl 可以连接到您的 EKS 集群。
    # 将 <region> 和 <cluster-name> 替换为您的实际值
    aws eks update-kubeconfig --region <region> --name <cluster-name>
    

2. 配置 EKS AutoScaler(可选)

为了让 EKS 节点组能够按需自动扩缩容,需要配置 Cluster Autoscaler。如果您不需要使用自动扩缩容,可以跳过此步骤。
  1. 下载链接下载 AutoScaler 的配置文件。
  2. 修改配置文件,将其中的 <YOUR CLUSTER NAME> 替换为您的 EKS 集群名称。
  3. 执行安装命令:
    kubectl apply -f cluster-autoscaler-autodiscover.yaml
    

3. 创建 IAM OIDC Provider

AutoMQ 数据面 Pod 需要访问 S3 等云资源,并且需要扮演 IAM Role 来获得临时访问授权。在 EKS 中,要使 Pod 能够扮演 IAM Role,必须先将 EKS 集群注册为 IAM 的一个可信身份提供商(Identity Provider)。此外安装 EBS CSI 插件以及 Load Balancer Controller 插件也需要 OIDC Provider。 您可以参考 AWS 官方文档《为您的集群创建 IAM OIDC 提供商》,前往 IAM 控制台为您的 EKS 集群创建一个 OIDC Identity Provider。

4. 配置 Amazon EBS CSI Driver

EKS 集群需要此插件来管理存储卷。
  1. 参考 AWS 官方文档《Amazon EBS CSI driver》的步骤,在上述创建 OIDC Provider 后,创建一个专用于 CSI Driver 的 IAM Role。
  2. 完成 IAM Role 和 Trust Policy 的配置后,进入 EKS 集群控制台的 Add-ons 标签页,添加 Amazon EBS CSI Driver,并选择上一步创建的 IAM Role。

5. 安装 AWS Load Balancer Controller

此插件用于管理 Load Balancer,为 AutoMQ 提供 EKS 集群外部访问入口。安装 Load Balancer Controller 可以参考官方文档
  1. 执行以下命令,生成 IAM Policy。
    curl -o iam-policy.json https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/v2.10.0/docs/install/iam_policy.json
    aws iam create-policy --policy-name AWSLoadBalancerControllerIAMPolicy --policy-document file://iam_policy.json
    
  2. 创建一个 IAM Role,并将上一步创建的 Policy 附加到该 Role。
    eksctl create iamserviceaccount \
      --cluster=<cluster-name> \
      --namespace=kube-system \
      --name=aws-load-balancer-controller \
      --attach-policy-arn=arn:aws:iam::<AWS_ACCOUNT_ID>:policy/AWSLoadBalancerControllerIAMPolicy \
      --override-existing-serviceaccounts \
      --region <region-code> \
      --approve
    
  3. 添加 Helm 仓库并安装 CRD:
    helm repo add eks https://aws.github.io/eks-charts
    kubectl apply -k "github.com/aws/eks-charts/stable/aws-load-balancer-controller/crds?ref=master"
    
  4. 执行安装命令,注意将 <eks-cluster-id> 替换为您的集群名称,将 <Your RegionID> 替换为您的区域 ID,将 <Your VPCID> 替换为您的 VPC ID:
    helm upgrade -i aws-load-balancer-controller eks/aws-load-balancer-controller -n kube-system --set clusterName=<eks-cluster-id> --set region=<Your RegionID> --set vpcId=<Your VPCID>
    

创建 AutoMQ 实例,选择部署到 kubernetes

登录 AutoMQ 控制台,创建实例,部署类型选择 Kubernetes,并按要求配置好如下信息。
  1. 部署类型:选择 Kubernetes。
  2. Kubernetes 集群:填写 EKS 集群的集群名称。
  3. 节点池:填写用于部署 AutoMQ 的节点池名称。需要注意节点池的机型规格和数量需满足环境要求▸
  4. 命名空间(仅在自行管理 IAM 权限时,需要指定):填写用于部署 AutoMQ 的命名空间。
  5. ServiceAccount (仅在自行管理 IAM 权限时,需要指定):填写用于部署 AutoMQ 的 ServiceAccount。需要注意该 ServiceAccount 必须和对应的 IAM Role 关联(通过 EKS OIDC Provider 或 AWS EKS IRSA)。
  6. 预览配置信息,完成创建