Skip to main content

部署到AWS EKS

参考 概述▸,AutoMQ 支持部署到 Kubernetes 上。本文介绍 AutoMQ 部署到AWS EKS 平台的安装过程。

本文中提及 AutoMQ 产品服务方、AutoMQ 服务方、AutoMQ,均特指 AutoMQ HK Limited及其附属公司。

操作流程

步骤 1:安装环境控制台

参考概述▸,AutoMQ 支持部署到 EKS 集群。在 EKS 部署模式下,首先仍然需要安装 AutoMQ 控制台,再通过控制台界面操作 EKS,将集群部署到 EKS。

在 AWS 上,同时支持基于 Marketplace 和 Terraform 安装环境控制台。

注意:

在上述安装环境控制台时,从 AWS Marketplace 安装环境▸ 集群部署类型必须设置为 Kubernetes 。这样才能支持后续的步骤 2-4,将 AutoMQ 集群安装到 EKS 上。

AutoMQ 控制台安装完成后,需要从控制台界面或者 Terraform output 输出菜单获取环境控制台地址、初始用户名、密码以及 AutoMQ 所需的 IAMRoleforAutoMQEnvironmentConsole 和 IAMRoleforAutoMQDedicatedNodeGroup 。前者用于配置控制台的访问权限,后者用于创建 AutoMQ 独享节点组。

步骤 2:创建 EKS 集群 IAM Role

参考 AWS EKS 文档,每个 EKS 集群需要绑定 IAM Role,以实现被授权访问用户的 AWS 云资源。因此,创建 EKS 集群前需要先创建 EKS 集群专用的 IAM Role。

  1. 访问 IAM 控制台。点击创建 Role。选择如下参数:
  • Trusted entity type:选择 AWS Service。

  • Service Use case:选择 EKS和 EKS-Cluster。

  1. 点击下一步,输入自定义的角色名称,并创建 IAM Role

步骤 3:创建 EKS 集群

参考概述▸,用户需要提前创建独立的 EKS 集群分配给 AutoMQ 使用。用户可访问AWS EKS 产品控制台按下方步骤操作。

  1. 登录AWS EKS 控制台。点击创建集群
  1. 配置集群基础信息 ,需要关注的配置项,其他配置项保持默认即可。

    1. 选择自定义配置模式。

    2. 关闭 EKS Auto Mode。

    3. 绑定步骤 1 创建的 EKS 集群 IAM Role。

  1. 配置 VPC 网络。 选择目标 VPC 和子网。

安全组建议选择 VPC 默认安全组,子网选择所有需要部署集群的私网子网。

  1. 保持其他默认配置,创建 EKS 集群。
  1. EKS 集群创建完成后,需要将 AutoMQ 控制台所在的安全组加入 EKS 集群安全组入站规则。以便 AutoMQ 控制台调用访问 EKS 集群。

编辑入站规则,将 AutoMQ 控制台所在的安全组加入入站规则中,协议选全部流量。

步骤 4:创建 EKS 公共节点组

参考概述▸,用户需要为 EKS 集群创建一个公共节点组,用于部署 EKS 系统组件。参考以下步骤创建符合要求的节点组。

  1. 进入步骤 3 创建的 EKS 集群详情,点击计算菜单创建节点组
  1. 选选择节点组 IAM Role, 参考下方截图,选择 IAM Role(可以复用 AutoMQ 控制台创建的IAMRoleforAutoMQDedicatedNodeGroup, 也可以按照 EKS 推荐创建 Role)。
  1. 选择默认节点组的机型、数量和可用区子网。完成节点组创建。

    1. 机型:建议选择 2C4G 的默认机型即可。

    2. AMI Type:修改为 Amazon Linux 2(AL2_x86_64)。

    3. 数量:建议 2-3 台。满足 EKS 系统组件消耗即可。

    4. 子网:建议填写 EKS 部署需要的子网。

注意:AMI Type 务必选择Amazon Linux 2,默认的 Amazon Linux 2023 暂不支持。

步骤 5:创建 AutoMQ 专用 EKS 节点组

参考概述▸,用户需要为 AutoMQ 创建符合要求的专用节点组,以便后续部署实例申请机器。参考以下步骤创建符合要求的节点组,并完成 IAM 授权。

  1. 进入步骤 3 创建的 EKS 集群详情,点击计算菜单创建节点组
  1. 选选择节点组 IAM Role, 参考下方截图,选择 AutoMQ 控制台创建的IAMRoleforAutoMQDedicatedNodeGroup, 并配置污点。污点的键是dedicated ,值是 automq ,效果是 NO_SCHEDULE
  1. 选择 AutoMQ 专享节点组的机型、数量和可用区子网。完成节点组创建

创建节点组时,只支持单可用区 或者三可用区 ,如果选择了其他数量的可用区,后期无法创建实例。

设置参数
取值说明
机型配置
  • 说明:指定节点组的机型,请参考文档概述▸。填写机型。

注意:AutoMQ 必须运行在指定机型的 VM 中,创建节点组如果选择了非预设的机型,后续无法使用该节点组。

AMI Type

注意:AMI Type 务必选择Amazon Linux 2,默认的 Amazon Linux 2023 暂不支持。

子网
  • 说明:根据实际 AutoMQ 集群的需求,选择一个三个可用区子网

注意:
AutoMQ 要求后续创建集群的可用区和节点组必须完全一致。因此,如果需要创建单可用区的 AutoMQ 集群,则此处创建单可用区节点组;如果需要创建三可用区 AutoMQ 集群,则此处同样创建三可用区节点组,两者不可混用。

数量
  • 说明:建议起步 3 节点,最小节点数设置为 3,最大节点数需要根据 AutoMQ 集群规模合理评估。

步骤 6:初始化本地 Kubectl 和 AWS CLI 工具

AWS EKS 集群创建完成后,一些系统插件例如 CSI、NetworkPolicy 组件默认并不安装,需要手工配置,按照 EKS 插件之前。需要在本地安装 AWS CLI 和 Kubectl 工具。

  1. 安装 AWS CLI 和 Kubectl 工具。参考文档如下:

    1. 安装 AWS CLI 工具

    2. 安装 Kubectl 工具

    3. 安装 Helm 工具。

  2. 输入下方命令生成 KubeConfig 配置文件,这会生成配置文件到默认路径( ~/.kube/config )。用户也可以指定生成的配置文件路径,但需要注意配置环境变量 KUBECONFIG。


// replace the region and cluster-name param
aws eks update-kubeconfig --region <region> --name <cluster-name>

步骤 7:配置 EKS AutoScaler

在创建 AutoMQ 实例以及扩缩容场景下自动扩展 EKS Node,需要配置 EKS AutoScaler 实现节点按需扩展。配置方式如下:

  1. 下载链接 下载 AutoScaler 的配置文件。

  2. 修改配置文件中的,EKS 集群名称参数,保存并执行安装命令。

  1. 执行安装命令,安装 AutoScaler。

// Check the config yaml path
kubectl apply -f cluster-autoscaler-autodiscover.yaml

安装完成后,可以检查 EKS AutoScaler 组件的运行状态,如果找到对应的 Running Deployment 则说明安装成功。

步骤 8:配置 EKS CSI 存储插件

创建 EKS 集群时默认不创建 EKS CSI 存储插件,需要用户手工配置。配置文档参考链接

  1. 参考 EKS 文档,复制 EKS 集群的 OIDC Connect Provider URL。
  1. 前往 IAM 控制台创建 OIDC Provider,用于 EKS 获取 IAM 身份。填写配置信息如下:

    1. Provider Type:选择 OpenID Connect。

    2. Provider URL:填写上一步复制的 URL。

    3. Audience:填写 sts.amazonaws.com

  1. 基于该Web Identity 创建 CSI 专用的 IAM Role。填写配置项如下:

    1. Trusted entity type: 选择 Web identity。

    2. Identity Provider:选择上一步创建的 Identity Provider。

    3. Audience:填写 sts.amazonaws.com

    4. Policy:选择 AmazonEBSCSIDriverPolicy

  2. 创建 IAM Role 后,进入该 Role 详情页,点击 Edit trust policy,在原有的 json 文件中添加如下一行。

需要注意修改其中的 RegionCode 和 ProviderID,ProviderID 类似EXAMPLED539D4633E53DE1B7XXXXAMPLE。


"oidc.eks.{RegionCode}.amazonaws.com/id/{ProviderID}:sub": "system:serviceaccount:kube-system:ebs-csi-controller-sa"

  1. 进入 EKS 集群,选择 AddOn Tab,添加 Amazon EBS CSI Driver。注意 IAM Role 选择上一步创建的 IAM Role。

步骤 9: 开启 EKS NetworkPolicy

AutoMQ 支持集群访问来源控制,即限定特定 IP 来源的客户端访问集群,该功能基于 NetworkPolicy 实现,因此需要开启 EKS NetworkPolicy。

  1. 在 EKS 控制台 Add-on 标签内选择 AWS VPC CNI 并点击编辑
  1. 展开 Optional configuration settings,在 Configuration values 中添加如下 JSON,选择 Override 模式并保存。

{
"enableNetworkPolicy": "true"
}

步骤 10:安装 AWS Load Balancer Controller

AWS 默认不提供 Load Balancer Controller 的安装,需要用户手动安装插件。安装步骤如下:

  1. 添加 Helm 仓库,并安装 AWS Load Balancer 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"

  1. 修改下方命令中的 eks-cluster-id,设置为实际的集群 ID,并执行。

helm upgrade -i aws-load-balancer-controller eks/aws-load-balancer-controller -n kube-system --set clusterName=<eks-cluster-id>

  1. 验证安装效果。

步骤 11:进入环境控制台,配置 Kubernetes 集群信息

首次进入 AutoMQ BYOC 控制台,需要配置 Kubernetes 集群信息和授权才可正常使用。按照控制台指引页面填写步骤 2 创建的 EKS 集群 ID 以及 Kubeconfig ,完成环境初始化。

  1. 前往 EKS 集群,点击 Access 菜单,创建 Access Entry。
  1. 选择步骤 1 安装环境控制台生成的 AutoMQ 专用的 IAM Role,类型设置为 Standard。

选择授权的 Policy 为 AmazonEKSClusterAdminPolicy ,范围为 Cluster ,创建。

  1. 复制步骤3 创建的 EKS 集群的集群 Name 。录AutoMQ 控制台,录入集群 Name ,完成初始化。