> ## Documentation Index
> Fetch the complete documentation index at: https://docs.automq.com/llms.txt
> Use this file to discover all available pages before exploring further.

# 部署到 Google Cloud GKE

> AutoMQ 快速在 Google Cloud GKE 上部署，提供云原生 Kafka 兼容性、灵活扩展和高效成本。详细指南确保无缝操作。

参考 [概述▸](/zh/automq-cloud/deploy-automq-on-kubernetes/overview)，AutoMQ 支持部署到 Kubernetes 上。本文介绍 AutoMQ 集群部署到 Google Cloud GKE 平台的安装过程。

<Info>
  本文中提及 AutoMQ 产品服务方、AutoMQ 服务方、AutoMQ，均特指 AutoMQ HK Limited 及其附属公司。
</Info>

## 安装环境控制台

参考[概述▸](/zh/automq-cloud/deploy-automq-on-kubernetes/overview)，AutoMQ 支持部署到 GKE 集群。在 GKE 部署模式下，首先仍然需要安装 AutoMQ 控制台，再通过控制台界面操作 GKE，将集群部署到 GKE。

在 Google Cloud 上，8.x 版本的 AutoMQ 控制台通过 Docker 镜像安装和启动。安装控制台的操作文档请参考[在 Google Cloud 上安装 AutoMQ▸](/zh/automq-cloud/getting-started/install-byoc-environment/google-cloud/install-automq-on-gcp)。

AutoMQ 控制台安装完成后，请使用控制台地址、初始用户名和密码登录控制台，并按页面提示完成权限初始化。

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

如果您期望在 Kubernetes 上运行 AutoMQ 集群，需要提前准备一个 GKE 集群。如果只期望在 IaaS 模式下部署 AutoMQ 集群，则无需准备 GKE 集群。

### 步骤 1：创建 GKE Standard 集群

GKE Standard 集群的创建方式请参考 Google Cloud 官方文档[《Creating a regional cluster》](https://docs.cloud.google.com/kubernetes-engine/docs/how-to/creating-a-regional-cluster)。本文不重复展开 GKE 的完整创建步骤，仅列出 AutoMQ 部署所需的关键配置。

AutoMQ 当前仅支持 GKE Standard 集群，不支持 GKE Autopilot。创建集群时建议确认以下配置：

* **集群类型**：选择 GKE Standard。
* **集群位置**：建议选择 Regional 集群，以便后续创建跨多个可用区的 AutoMQ 实例。
* **网络模式**：启用 VPC-native traffic routing，并为 Pod 和 Service 准备 Secondary IP range。
* **Dataplane**：建议启用 Dataplane V2。
* **身份模型**：启用 [Workload Identity Federation for GKE](https://docs.cloud.google.com/kubernetes-engine/docs/how-to/workload-identity)。
* **节点 metadata**：不要关闭 GKE Metadata Server。AutoMQ Pod 通过 Kubernetes ServiceAccount 绑定到 Google Service Account（GSA）时，需要依赖 GKE Metadata Server。

如果使用 Shared VPC，建议采用如下项目边界：

* **Service Project**：创建 GKE 集群、Console VM、AutoMQ 实例、数据 Bucket、实例 GSA 等资源。
* **Host Project**：承载 VPC、子网、路由、NAT、防火墙等网络资源。

在 Shared VPC 模式下，GKE service agent 还需要在 Host Project 上具备使用共享网络所需的权限。可参考 Google Cloud 官方文档[《使用 Shared VPC 设置集群》](https://docs.cloud.google.com/kubernetes-engine/docs/how-to/cluster-shared-vpc)完成授权。

### 步骤 2：配置网络和防火墙

AutoMQ 控制台需要访问 GKE API Server，并在实例创建、升级、扩缩容等流程中操作 Kubernetes 资源。AutoMQ 控制台还需要访问 AutoMQ 数据面暴露的服务端口，用于执行生命周期管理、状态检查和运维操作。Kafka 客户端是否需要访问这些端口，取决于您的业务接入方式。

如果 AutoMQ 控制台、GKE 集群和 Kafka 客户端不在同一个子网或默认无法互通，需要在 VPC 防火墙中放行必要流量。建议至少确认以下访问关系：

* AutoMQ 控制台可以访问 GKE API Server。
* AutoMQ 控制台可以访问 AutoMQ Pod 或 Service 暴露的端口。这是必需访问路径。
* Kafka 客户端网络可以访问业务需要的 AutoMQ 服务端口，例如 Kafka Bootstrap、Broker 或相关代理端口。
* 如果 GKE 节点不配置公网 IP，且需要访问 Cloud Storage、IAM、Cloud DNS 等 Google APIs，请为节点所在子网开启 Private Google Access，并确认访问 Google APIs 所需的路由和 DNS 配置正确。访问外部镜像仓库等非 Google 端点仍需要 Cloud NAT 或其他出网路径。

常见需要放行的 AutoMQ 服务端口包括：`8083`、`9090`、`9092`、`9093`、`9102`、`9103`、`9112`、`9113`。其中控制台所在子网是必要来源；Kafka 客户端来源网段按业务接入需要添加。实际来源 CIDR 应根据控制台所在子网和客户端所在网络范围收敛。如果 AutoMQ 工作负载节点池使用专用的节点 VM Service Account，也可以通过目标 Service Account 收敛到该节点池；否则应使用网络标签等方式收敛目标范围。

如下命令演示如何为控制台来源网段以及可选的客户端来源网段放行常见 AutoMQ 端口，并在使用专用节点 VM Service Account 的前提下收敛目标。Shared VPC 模式下，防火墙规则应创建在 Host Project。

```bash theme={null}
HOST_PROJECT_ID="<host-project-id>"
VPC_NAME="<vpc-name>"
AUTOMQ_NODE_SA_EMAIL="<dedicated-automq-node-service-account-email>"
# 如果暂不需要放行 Kafka 客户端网段，可以只保留控制台所在子网 CIDR。
SOURCE_CIDRS="<console-subnet-cidr>,<client-cidr>"

gcloud compute firewall-rules create "automq-gke-allow-automq-service" \
  --project="${HOST_PROJECT_ID}" \
  --network="${VPC_NAME}" \
  --direction=INGRESS \
  --action=ALLOW \
  --source-ranges="${SOURCE_CIDRS}" \
  --target-service-accounts="${AUTOMQ_NODE_SA_EMAIL}" \
  --rules=tcp:8083,tcp:9090,tcp:9092,tcp:9093,tcp:9102,tcp:9103,tcp:9112,tcp:9113
```

### 步骤 3：准备 AutoMQ 工作负载节点池

<Tip>
  创建 GKE Standard 集群时会具备可用于运行 GKE 系统组件的节点池。请另外准备 AutoMQ 工作负载节点池，并只为 AutoMQ 工作负载节点池增加 `dedicated=automq:NoSchedule` 污点。
</Tip>

AutoMQ Broker 应运行在专用节点池上。请提前准备该节点池，并在创建实例时选择或填写对应节点池名称。

准备 AutoMQ 工作负载节点池时，请确认以下配置：

* **GKE Metadata Server**：必须启用。
* **污点**：设置 `dedicated=automq:NoSchedule`，确保只有 AutoMQ 工作负载调度到该节点池。
* **机型和数量**：参考[概述▸](/zh/automq-cloud/deploy-automq-on-kubernetes/overview)中的节点池要求选择机型，并根据业务规模设置最小、期望和最大节点数。
* **自动扩缩容**：建议开启 Cluster Autoscaler，并使用 Balanced 策略。

<Tip>
  AutoMQ 在 GKE 上通过 Kubernetes ServiceAccount 与 Google Service Account（GSA）的 Workload Identity 绑定访问 Google Cloud 资源。请确保 AutoMQ 工作负载节点池启用 GKE Metadata Server。节点池 VM Service Account 和 access scopes 会影响节点自身，但不再承载 AutoMQ 数据面权限。
</Tip>

### 步骤 4：确认 AutoMQ 工作负载身份

AutoMQ 数据面 Pod 需要访问 GCS、Cloud DNS、Compute 等 Google Cloud 资源。创建实例时，您可以选择以下任一种身份模式：

| 身份模式 | 适用场景                               | 您需要准备什么                                                                                                | AutoMQ 控制台会做什么                                              |
| ---- | ---------------------------------- | ------------------------------------------------------------------------------------------------------ | ----------------------------------------------------------- |
| 托管身份 | 推荐用于新环境。希望由 AutoMQ 控制台统一创建和维护实例身份。 | 确认控制台初始化权限已通过。                                                                                         | 创建实例 GSA，并为 GCS、Cloud DNS、Workload Identity 等资源配置所需 IAM 绑定。 |
| 已有身份 | 企业已有 GSA 命名、审计或权限审批流程。             | 提前创建 GSA，并按控制台展示的权限说明完成授权。GSA 资源名称格式为 `projects/<project-id>/serviceAccounts/<service-account-email>`。 | 校验 GSA 可读，并在实例配置中使用该身份。                                     |

如果使用已有身份，请同时准备 Kubernetes namespace 和 Kubernetes ServiceAccount，并确保该 ServiceAccount 可以通过 Workload Identity 使用对应 GSA。可参考[附录：为 AutoMQ 工作负载配置 GKE Workload Identity](#附录为-automq-工作负载配置-gke-workload-identity)。

## 创建 AutoMQ 实例，选择部署到 Kubernetes

登录 AutoMQ 控制台，创建实例，部署类型选择 Kubernetes，并按要求配置如下信息。

1. **部署类型**：选择 Kubernetes。

2. **Kubernetes 集群**：选择目标 GKE 集群。通过 API 或自动化工具传参时，GKE 集群 ID 使用完整资源名称，格式为 `projects/<project-id>/locations/<location>/clusters/<cluster-name>`。

3. **节点池**：选择或填写用于部署 AutoMQ Broker 的节点池名称。节点池需要满足[概述▸](/zh/automq-cloud/deploy-automq-on-kubernetes/overview)中的节点池要求。

4. **数据 Bucket**：选择由 AutoMQ 托管创建，或填写已有 GCS Bucket。

5. **Private DNS Zone**：选择由 AutoMQ 托管创建，或填写已有 Cloud DNS private managed zone。

6. **实例身份**：
   * 选择托管身份时，AutoMQ 控制台会创建实例 GSA 并配置所需 IAM 绑定。
   * 选择已有身份时，填写已有 GSA 的完整资源名称，并确认权限已按控制台展示内容完成配置。

7. **命名空间和 ServiceAccount**：仅在自行管理 Kubernetes 身份时需要指定。该 ServiceAccount 需要和实例 GSA 完成 Workload Identity 绑定。

8. 预览配置信息，**完成创建**。

## 附录：为 AutoMQ 工作负载配置 GKE Workload Identity

完整说明请参考 Google Cloud 官方文档[《从 GKE 工作负载向 Google Cloud API 进行身份验证》](https://docs.cloud.google.com/kubernetes-engine/docs/how-to/workload-identity)。

如果您选择使用已有 GSA，需要确保 Kubernetes ServiceAccount 可以模拟该 GSA。示例步骤如下：

1. 创建 namespace 和 Kubernetes ServiceAccount。

   ```bash theme={null}
   kubectl create namespace <automq-namespace>
   kubectl create serviceaccount <automq-service-account> -n <automq-namespace>
   ```

2. 为 GSA 添加 `roles/iam.workloadIdentityUser` binding。

   ```bash theme={null}
   gcloud iam service-accounts add-iam-policy-binding <gsa-email> \
     --role roles/iam.workloadIdentityUser \
     --member "serviceAccount:<project-id>.svc.id.goog[<automq-namespace>/<automq-service-account>]"
   ```

3. 为 Kubernetes ServiceAccount 添加 GSA 注解。

   ```bash theme={null}
   kubectl annotate serviceaccount <automq-service-account> \
     -n <automq-namespace> \
     iam.gke.io/gcp-service-account=<gsa-email>
   ```

创建 AutoMQ 实例时，填写上述 namespace、ServiceAccount 和 GSA 资源名称。

## 附录：部署 AutoMQ Placeholder Deployment（可选）

如果您希望在 AutoMQ 工作负载节点池中预留故障恢复容量，可以为 AutoMQ 节点池部署 Placeholder Deployment。它会在节点池中运行低优先级的占位 Pod，预先占用一定资源；当 AutoMQ Broker 所在节点故障时，低优先级 Pod 可以被抢占，为 Broker 快速调度恢复让出资源。

部署 Placeholder Deployment 可以通过 `kubectl` 或 Kubernetes 控制台完成。

1. 下载并创建低优先级声明。

   ```bash theme={null}
   curl -fLO https://download.automq.com/k8s-placeholder/automq-low-priority.yaml
   kubectl apply -f automq-low-priority.yaml
   ```

2. 下载 GKE Placeholder Deployment 示例。

   ```bash theme={null}
   curl -fLO https://download.automq.com/k8s-placeholder/automq-gke-placeholder.yaml
   ```

3. 根据实际 AutoMQ 工作负载节点池修改 `automq-gke-placeholder.yaml` 中的关键参数：

   * `metadata.name`：建议修改为有业务含义的名称，例如 `placeholder-for-automq-nodepool-a`。
   * `replicas`：预留的 Placeholder Pod 数量。多可用区部署时，可按每个可用区 1 个 Pod 评估。
   * `affinity.nodeAffinity`：用于匹配 AutoMQ 工作负载节点池。GKE 上常用 `cloud.google.com/gke-nodepool` 匹配节点池名称，也可以用 `node.kubernetes.io/instance-type` 匹配节点机型。
   * `resources`：`limits` 可按节点规格配置，`requests` 建议略小于节点规格，避免 Placeholder 自身无法调度。

4. 应用 Placeholder Deployment。

   ```bash theme={null}
   kubectl apply -f automq-gke-placeholder.yaml
   ```

5. 检查 Placeholder Pod 是否运行在预期节点池。

   ```bash theme={null}
   kubectl get pods -l app=low-priority-placeholder -o wide
   ```
