参考 概述▸,AutoMQ 支持部署到 Kubernetes 上。本文介绍 AutoMQ 集群部署到 Google Cloud GKE 平台的安装过程。
本文中提及 AutoMQ 产品服务方、AutoMQ 服务方、AutoMQ,均特指 AutoMQ HK Limited及其附属公司。

操作流程

步骤 1: 安装环境控制台

参考概述▸,AutoMQ 支持部署到 GKE 集群。在 GKE 部署模式下,首先仍然需要安装 AutoMQ 控制台,再通过控制台界面操作 GKE,将集群部署到 GKE。 在 Google Cloud 上,同时支持基于 Marketplace 和 Terraform 安装环境控制台。 AutoMQ 控制台安装完成后,需要从控制台界面或者 Terraform output 输出菜单获取环境控制台地址、初始用户名、密码。

步骤 2:创建 IAM 服务账号

AutoMQ 数据面集群使用专用节点池部署,因此需要为 AutoMQ 节点池绑定专用的 IAM 服务账号以便访问 GCP 云服务。创建 IAM 服务账号参考如下步骤:
  1. 前往 IAM 控制台,点击 Service Accounts创建 Service Accounts 。填写自定义服务账号名称。
  1. 授予服务账号必要的系统角色,系统角色列表如下:
    • roles/resourcemanager.tagUser
    • roles/artifactregistry.reader
    • roles/autoscaling.metricsWriter
    • roles/monitoring.metricWriter
    • roles/stackdriver.resourceMetadata.writer
    • roles/monitoring.viewer
    • roles/logging.logWriter
  1. 完成服务账号创建,记录服务账号的名称和 ID,后续创建节点池需要填写。

步骤 3: 创建 GKE 集群

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

设置 GKE 集群类型和地域

  1. 登录 Google Cloud GKE 控制台。点击创建集群
  1. 选择集群类型为Standard: You manage your cluster。
  1. 填写集群名称、地域信息:
    • Location Type: 选择 Regional ,这样后续可以创建三可用区的 AutoMQ 实例。
    • Target Release Channel: 建议选择稳定版本。

设置 GKE 集群网络

  1. 切换至Networking 配置 ,选择目标 VPC子网
注意:Google Cloud 中多个子网之间默认的 Fire Wall 策略是默认无法互通。因此建议将 GKE 和 AutoMQ 环境控制台安装在相同的子网内。如果 GKE 和 AutoMQ 环境控制台以及 Kafka 客户端应用不在相同的子网,则需要前往 VPC 设置防火墙策略如需手工添加防火墙策略,建议对 AutoMQ 环境控制台所在的子网 IP 范围全部放行。端口列表为:9090,9092-9093,9102-9103,22。
  1. 修改网络配置。需要确保设置如下选项:
    1. 开启 VPC-native traffic routing
    2. 开启 Dataplane V2

设置 GKE 集群公共节点池

切换到NODE POOLS 配置项, 配置默认节点池,用于部署GKE 系统组件。调整节点数量每个可用区 1 个节点,保证总节点数大于等于 3 即可。作为 GKE 系统组件部署的节点池除了图上展示的配置需要调整以外,其他选项可以采用默认配置。

添加 AutoMQ 专用节点池

参考概述▸,用户需要创建 AutoMQ 独享的节点池,以便后续部署实例申请机器。因此,在创建 GKE 集群时,需要创建 2 个节点池,一个是公共节点池用于部署 GKE 系统组件;一个是 AutoMQ 专用节点池,用于部署 AutoMQ 集群。
重要:如果 GKE 集群开启了Workload Identity 特性,则默认会使用 GKE 元数据服务器,此时会影响 AutoMQ 的 Pod 访问节点的服务账号。此时需要在节点池创建完成后,关闭 GKE 元数据服务器。
  1. 点击上方添加节点池 按钮,配置 AutoMQ 专用节点池。
  1. 开启 Cluster AutoScaler。 并配置为Balanced 类型均衡**,** 大小限制设置为 Total limits ,设置合适的上限(建议上限设置 50-100)。
  1. Nodes 标签页中,参考概述▸配置符合 AutoMQ 要求的机型列表。
  1. Security 标签页中,绑定步骤 2 创建的 AutoMQ 节点池专用的服务账号
节点安全配置设置如下:
  1. 在元数据标签页中,设置 AutoMQ 独占使用的污点。污点的键是dedicated,值是 automq,效果是 NO_SCHEDULE。

点击创建 GKE 集群

  1. 检查所有配置无误后,点击下方 Create,创建 GKE 集群
  2. GKE 集群创建完成后,复制集群 Name 。用于步骤 3 配置使用。
  1. 查看 GKE 集群列表找到集群,对该集群添加 Tag,用于约定后续 AutoMQ 控制台的管理权限。
AutoMQ 控制台仅支持管理包含 automqAssigned: automq 的 GKE 集群。因此,需要对 GKE 集群添加上述标签。

关闭 GKE 元数据服务器(GKE 集群开启 Workload Identity 时需要)

如果 GKE 集群开启了Workload Identity 特性,则默认会使用 GKE 元数据服务器,此时会影响 AutoMQ 的 Pod 访问节点的服务账号。此时需要在节点池创建完成后,关闭 AutoMQ 节点池的 GKE 元数据服务,使用默认的 GCE 服务。
  1. 查看 AutoMQ 专用节点池,点击编辑。
  2. 查看安全选项,关闭 GKE 元数据服务器
  1. 点击保存提交,GKE 会重新更新所有节点的配置。

部署 AutoMQ Placeholder Deployment

为 AutoMQ 使用的节点组创建 Placeholder Deployment 用于加速节点故障场景的 Failover 速度。
工作原理:Placeholder Deployment 的作用是在 Kubernetes 集群的节点上部署一个低优先级的“占位符”应用,预先占用若干节点。当 AutoMQ 集群的 Pod 所在节点出现故障时,可以快速抢占该 Placeholder 的节点,实现快速恢复。
部署 Placeholder Deployment 可以通过 kubectl 命令或者 Kubernetes 控制台进行操作。 首先点击链接,下载名为 automq-low-priority.yaml 的优先级申明文件,执行以下命令,创建优先级申明。

kubectl apply -f automq-low-priority.yaml

然后点击链接,下载 automq-gke-placeholder.yaml 文件。需要根据实际部署的节点池,修改其中的参数:
  • metadata.name : 建议修改成具有意义的 Placeholder 名称,例如 placeholder-for-nodegroup-A
  • replicas : Placeholder pod 预留数量,默认为 1,如果是多可用区部署,建议每个可用区保留 1 台机器,即数量设置为可用区的数量。
  • affinity.nodeAffinity : 用于选择 Placeholder 部署的节点,需要修改 matchExpressions 中的 keyvalues 来精确匹配 AutoMQ 的节点池。在示例的 yaml 文件中提供 2 个选项筛选节点。
    • cloud.google.com/gke-nodepool :在 GKE 上使用 cloud.google.com/gke-nodepool 标签筛选指定的节点池。
    • node.kubernetes.io/instance-type :在 GKE 上使用 node.kubernetes.io/instance-type 标签筛选指定的节点机型。
  • resources :
    • limits 的 cpu/memory 与 Node Group 具体的规格保持一致,比如2C16G 。
    • requests 的 cpu/memory 略小于 Node Group 具体的规格,比如实际占用 3/4 比例,确保 Placeholder Pod 能调度到额外 Node 并保证独占效果,避免集群其他 Pod 非预期占用导致实际 Failover 时因资源不足调度失败。
需要修改的参数片段,参考以下 yaml 文件:

metadata:
  # TODO: Replace with your custom name
  name: {Replace with your custom placeholder deployment name}
spec:
  # TODO: Replace with your custom node nums
  replicas: 1
    spec:
      affinity:
        nodeAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
            nodeSelectorTerms:
              - matchExpressions:
                - key: cloud.google.com/gke-nodepool
                  operator: In
                  values:
                  # TODO: Replace with your custom Node Pool Name
                  - "Replace with your custom Node Pool Name"
                - key: node.kubernetes.io/instance-type
                  operator: In
                  values:
                  # TODO: Replace with your custom Node Pool VM Size
                  - "Replace with your custom Node Pool VM Size"
      containers:
        - name: placeholder
          resources:
          # TODO: Replace with your custom Memory and CPU size
            limits:
              cpu: 2000m
              memory: 16Gi
            requests:
              cpu: 1000m
              memory: 12Gi               

修改完成后,执行以下命令,安装 Placeholder。

kubectl apply -f automq-gke-placeholder.yaml

执行完成后,调用以下命令检查 Placeholder Pod 的状态,确保 Placeholder Pod 状态为 Running ,并观察它是否被调度到了期望的节点上。

kubectl get pods -l app=low-priority-placeholder -o wide

步骤 4:进入环境控制台,创建部署配置

首次进入 AutoMQ BYOC 控制台,需要创建部署配置,用于设置 Kubernetes 集群信息、GCS Bucket 等信息,之后才可创建实例。
注意:如果AutoMQ 环境控制台(Kafka 客户端应用)和 GKE 集群 部署在不同的 VPC 子网 ,则需要用户前往 VPC 防火墙页面添加通行规则。否则因网络不通,会影响实例的创建和使用。添加的防火墙策略,建议将环境控制台所在的子网 IP 来源全部放行。端口列表为:9090,9092-9093,9102-9103,22。
  1. 复制步骤3 创建的 GKE 集群的集群名称
  2. 登录控制台,录入集群名称等配置,点击下一步。
    1. 部署类型:选择 Kubernetes。
    2. Kubernetes 集群:填写 GKE 集群的集群名称。
    3. DNS ZoneId:填写用于部署 AutoMQ 的 Private DNS 的 ZoneId。
    4. Bucket 名称:填写用于部署 AutoMQ 存储消息的数据 Bucket,支持添加多个 GCS Bucket。
  1. 填写云资源信息后,生成数据面 GKE 节点池需要授权的权限。参考控制台指引,创建自定义授权策略 。然后将授权策略绑定到步骤 2 创建的 AutoMQ IAM 委托,并录入该节点池委托名称点击下一步预览
  1. 预览部署配置信息,完成创建 。即可前往实例管理页面创建实例。