在 Google Kubernetes Engine 上托管 n8n#
Google Cloud 提供了多种适合托管 n8n 的选项,包括 Cloud Run(专为容器运行优化)、Compute Engine(虚拟机)以及 Kubernetes Engine(使用 Kubernetes 运行的容器)。 本指南使用 Google Kubernetes Engine (GKE) 作为托管方案。如果你想使用 Cloud Run,请参考这些说明。 本指南中的大多数步骤使用 Google Cloud 用户界面(UI),但你也可以使用 gcloud 命令行工具 来完成所有操作。
先决条件#
- gcloud 命令行工具
- gke-gcloud-auth-plugin(请先安装 gcloud CLI)
自托管知识要求 自托管 n8n 需要具备一定的技术知识,包括:
- 设置和配置服务器与容器
- 管理应用资源及扩展(scaling)
- 保障服务器和应用的安全性
- 配置 n8n
n8n 建议专家用户采用自托管方式。操作失误可能导致数据丢失、安全问题和停机。如果您没有管理服务器的经验,n8n 推荐使用 n8n Cloud。
最新版本与下一个版本
n8n 每周都会发布一个新的次要版本。latest 版本适用于生产环境。next 是最新的发布版本。您应将 next 视为测试版:它可能不稳定。如需报告问题,请使用 论坛。
当前 latest:1.115.2
当前 next:1.116.1
创建项目#
GCP 建议您创建项目以逻辑化地组织资源和配置。请从 Google Cloud Console 中创建一个新项目:选择项目下拉菜单,然后点击 NEW PROJECT(新建项目)按钮。接着选择新创建的项目。在按照本指南后续步骤操作时,请确保已选中正确的项目。
启用 Kubernetes Engine API#
默认情况下 GKE 并未启用。在顶部搜索栏中搜索 "Kubernetes",然后从结果中选择 "Kubernetes Engine"(Kubernetes 引擎)。 点击 ENABLE(启用)以在此项目中启用 Kubernetes Engine API。
创建集群#
进入 GKE 服务页面,选择 Clusters > CREATE(集群 > 创建)。请务必选择“Standard”(标准)集群选项,n8n 不支持“Autopilot”(自动托管)集群。除非有特定需求(例如区域位置),否则您可以保留默认的集群配置。
设置 Kubectl 上下文#
本指南后续步骤要求您将 GCP 实例设置为 Kubectl 的上下文。您可以通过打开集群实例的详情页并点击 CONNECT(连接)来获取连接信息。显示的代码片段包含用于 gcloud CLI 工具的连接字符串。将该代码片段粘贴并在 gcloud CLI 中运行,以更改本地 Kubernetes 配置,使其使用新的 gcloud 集群。
克隆配置仓库#
Kubernetes 和 n8n 需要一系列配置文件。您可以从 此仓库 本地克隆这些文件。以下步骤将解释如何配置文件以及如何添加您的信息。
使用以下命令克隆仓库:
1| ``` git
---|---
然后切换目录:1
| ```
cd---|---
配置 Postgres#
对于大规模的 n8n 部署,Postgres 提供比 SQLite 更稳定的数据库后端。
创建持久化存储卷#
为了在 Pod 重启之间保持数据,Postgres 部署需要一个持久化卷。在 GCP 上运行 Postgres 需要特定的 Kubernetes Storage Class(存储类)。具体细节可参考 本指南,但 storage.yaml 清单文件会为您自动创建。您可能需要修改 allowedTopologies > matchedLabelExpressions > values 键下的区域,以指定存储创建的位置。默认值为 us-central。
1
2
3
4
5
6
7| ``` … allowedTopologies:
- matchLabelExpressions:
- key: failure-domain.beta.kubernetes.io/zone
values:
- us-central1-b
- us-central1-c
- key: failure-domain.beta.kubernetes.io/zone
values:
---|---
Postgres 环境变量#
Postgres 需要设置一些环境变量,以便传递给容器中运行的应用程序。
示例文件 postgres-secret.yaml 包含需要替换为你自己值的占位符。Postgres 在创建数据库时将使用这些信息。
随后,postgres-deployment.yaml 清单文件会从该清单中读取这些值,并将其发送到应用 Pod 中。
配置 n8n#
创建用于文件存储的卷#
虽然持久化卷并非运行 n8n 的必要条件,但在以下情况下必须使用:
- 使用与文件交互的节点(例如 binary data 节点)。
- 如果你希望在重启之间保留 手动配置的 n8n 加密密钥。这会在启动期间将包含密钥的文件保存到文件存储中。
n8n-claim0-persistentvolumeclaim.yaml 清单文件用于创建此卷,而 n8n Deployment 则在 n8n-deployment.yaml 清单文件的 volumes 部分挂载该声明。
1
2
3
4
5
6| ``` … volumes:
- name: n8n-claim0 persistentVolumeClaim: claimName: n8n-claim0 …
---|---
### Pod 资源#
Kubernetes 允许你 可选地指定应用容器所需的最小资源以及其可使用的资源上限。上述克隆的示例 YAML 文件在 `n8n-deployment.yaml` 和 `postgres-deployment.yaml` 的 `resources` 部分包含如下内容:1 2 3 4 5 6 7
| ```
…
resources:
requests:
memory: "250Mi"
limits:
memory: "500Mi"
…---|--- 这定义了每个容器至少需要 250MB 内存,最多可使用 500MB 内存,CPU 资源则由 Kubernetes 自动管理。你可以根据自身需求调整这些值。作为参考,以下是 n8n 云服务各套餐的资源配置:
- Start(入门版):320MB RAM,10 millicore CPU(可突发)
- Pro(10k 次执行):640MB RAM,20 millicore CPU(可突发)
- Pro(50k 次执行):1280MB RAM,80 millicore CPU(可突发)
### 可选:环境变量#
你可以使用环境变量来配置 n8n 的设置和行为。
创建一个 `n8n-secret.yaml` 文件。有关 n8n 环境变量的详细信息,请参考 环境变量。
## 部署#
两个部署清单文件(`n8n-deployment.yaml` 和 `postgres-deployment.yaml`)用于向 Kubernetes 定义 n8n 和 Postgres 应用程序。
这些清单定义了以下内容:
* 将先前定义的环境变量发送到每个应用 Pod
* 指定要使用的容器镜像
* 使用 `resources` 对象设置资源消耗限制
* 使用之前定义的 `volumes` 和 `volumeMounts` 来指定容器中挂载卷的路径
* 扩展(Scaling)和重启策略。示例清单中每种 Pod 各定义了一个实例,你应该根据实际需求进行调整。
## 服务#
两个服务清单文件(`postgres-service.yaml` 和 `n8n-service.yaml`)通过 Kubernetes 负载均衡器将服务暴露到外部网络,分别使用端口 5432 和 5678。
## 发送到 Kubernetes 集群#
使用以下命令将所有清单文件发送到集群:1
| ```
kubectl---|--- 命名空间错误 你可能会看到关于找不到 "n8n" 命名空间的错误消息,这是因为该资源尚未就绪。你可以再次运行相同的命令,或先使用以下命令应用命名空间清单:
1| ``` kubectl
---|---
## 设置 DNS#
n8n 通常在一个子域名下运行。请在你的 DNS 提供商处为该子域名创建一条 DNS 记录,并将其指向 n8n 服务的 IP 地址。你可以在所选集群的 **Services & Ingress**(服务与入口)菜单项中,从 **Endpoints**(端点)列找到 n8n 服务的 IP 地址。
GKE 与 IP 地址
阅读此 GKE 教程 了解保留 IP 地址如何与 GKE 和 Kubernetes 资源协同工作的更多细节。
## 删除资源#
使用以下命令删除由清单文件创建的资源:1
| ```
kubectl---|---
下一步#
- 进一步了解 配置 和 扩展 n8n。
- 或开始使用 n8n:尝试 快速入门指南(Quickstarts)。