在 Google Kubernetes Engine 上托管 n8n#
¥Hosting n8n on Google Kubernetes Engine
Google Cloud 提供多种适合托管 n8n 的选项,包括 Cloud Run(针对运行容器进行了优化)、Compute Engine(虚拟机)和 Kubernetes Engine(使用 Kubernetes 运行容器)。
¥Google Cloud offers several options suitable for hosting n8n, including Cloud Run (optimized for running containers), Compute Engine (VMs), and Kubernetes Engine (containers running with Kubernetes).
本指南使用 Google Kubernetes Engine (GKE) 作为托管选项。如果你想使用 Cloud Run,请参考 相关说明。
¥This guide uses the Google Kubernetes Engine (GKE) as the hosting option. If you want to use Cloud Run, refer to these instructions.
本指南中的大多数步骤都使用 Google Cloud UI,但你也可以使用 gcloud 命令行工具 来完成所有步骤。
¥Most of the steps in this guide use the Google Cloud UI, but you can also use the gcloud command line tool instead to undertake all the steps.
先决条件#
¥Prerequisites
- gke-gcloud-auth-plugin(请先安装 gcloud CLI)
¥The gke-gcloud-auth-plugin (install the gcloud CLI first)
Self-hosting knowledge prerequisites
Self-hosting n8n requires technical knowledge, including:
- Setting up and configuring servers and containers
- Managing application resources and scaling
- Securing servers and applications
- Configuring n8n
n8n recommends self-hosting for expert users. Mistakes can lead to data loss, security issues, and downtime. If you aren't experienced at managing servers, n8n recommends n8n Cloud.
Latest and Next versions
n8n releases a new minor version most weeks. The latest version is for production use. next is the most recent release. You should treat next as a beta: it may be unstable. To report issues, use the forum.
Current latest: 1.122.5
Current next: 1.123.2
创建项目#
¥Create project
GCP 鼓励你创建项目,以便逻辑地组织资源和配置。从 Google Cloud 控制台为你的 n8n 部署创建一个新项目:选择项目下拉菜单,然后点击“新建项目”按钮。然后选择新建的项目。在按照本指南中的其他步骤操作时,请确保已选择正确的项目。
¥GCP encourages you to create projects to logically organize resources and configuration. Create a new project for your n8n deployment from your Google Cloud Console: select the project dropdown menu and then the NEW PROJECT button. Then select the newly created project. As you follow the other steps in this guide, make sure you have the correct project selected.
启用 Kubernetes Engine API#
¥Enable the Kubernetes Engine API
GKE 默认未启用。在顶部搜索栏中搜索 "Kubernetes",然后从结果中选择 "Kubernetes Engine"。
¥GKE isn't enabled by default. Search for "Kubernetes" in the top search bar and select "Kubernetes Engine" from the results.
选择“启用”以为此项目启用 Kubernetes Engine API。
¥Select ENABLE to enable the Kubernetes Engine API for this project.
创建集群#
¥Create a cluster
从“GKE 服务页面”中选择“集群”>“创建”。确保选择 "标准" 集群选项,n8n 不适用于 "自动驾驶" 集群。除非你需要更改某些特定设置(例如位置),否则你可以将集群配置保留为默认值。
¥From the GKE service page, select Clusters > CREATE. Make sure you select the "Standard" cluster option, n8n doesn't work with an "Autopilot" cluster. You can leave the cluster configuration on defaults unless there's anything specifically you need to change, such as location.
设置 Kubectl 上下文#
¥Set Kubectl context
本指南中的其余步骤需要你将 GCP 实例设置为 Kubectl 上下文。你可以通过打开集群实例的详细信息页面并选择“连接”来找到其连接详细信息。显示的代码片段显示了 gcloud CLI 工具的连接字符串。在 gcloud CLI 中粘贴并运行代码片段,以更改本地 Kubernetes 设置以使用新的 gcloud 集群。
¥The rest of the steps in this guide require you to set the GCP instance as the Kubectl context. You can find the connection details for a cluster instance by opening its details page and selecting CONNECT. The displayed code snippet shows a connection string for the gcloud CLI tool. Paste and run the code snippet in the gcloud CLI to change your local Kubernetes settings to use the new gcloud cluster.
克隆配置库#
¥Clone configuration repository
Kubernetes 和 n8n 需要一系列配置文件。你可以将这些工作流从 此代码库 克隆到本地。以下步骤说明文件配置以及如何添加你的信息。
¥Kubernetes and n8n require a series of configuration files. You can clone these from this repository locally. The following steps explain the file configuration and how to add your information.
使用以下命令克隆存储库:
¥Clone the repository with the following command:
1 | |
切换目录:
¥And change directory:
1 | |
配置 Postgres#
¥Configure Postgres
对于更大规模的 n8n 部署,Postgres 比 SQLite 提供更强大的数据库后端。
¥For larger scale n8n deployments, Postgres provides a more robust database backend than SQLite.
创建持久存储卷#
¥Create a volume for persistent storage
为了在 Pod 重启后保持数据,Postgres 部署需要一个持久卷。在 GCP 上运行 Postgres 需要特定的 Kubernetes 存储类。你可以阅读 此指南 以了解详细信息,但 storage.yaml 清单会自动为你创建它。你可能需要更改区域,以便在 allowedTopologies > matchedLabelExpressions > values 键下创建存储。默认情况下,它们设置为 us-central。
¥To maintain data between pod restarts, the Postgres deployment needs a persistent volume. Running Postgres on GCP requires a specific Kubernetes Storage Class. You can read this guide for specifics, but the storage.yaml manifest creates it for you. You may want to change the regions to create the storage in under the allowedTopologies > matchedLabelExpressions > values key. By default, they're set to us-central.
1 2 3 4 5 6 7 | |
Postgres 环境变量#
¥Postgres environment variables
Postgres 需要设置一些环境变量才能将其传递给在容器中运行的应用。
¥Postgres needs some environment variables set to pass to the application running in the containers.
示例 postgres-secret.yaml 文件包含占位符,你需要将其替换为你自己的值。Postgres 在创建数据库时将使用这些详细信息。
¥The example postgres-secret.yaml file contains placeholders you need to replace with your own values. Postgres will use these details when creating the database..
然后,postgres-deployment.yaml 清单使用此清单文件中的值发送到应用 Pod。
¥The postgres-deployment.yaml manifest then uses the values from this manifest file to send to the application pods.
配置 n8n#
¥Configure n8n
创建文件卷存储#
¥Create a volume for file storage
虽然并非运行 n8n 的必要条件,但使用持久卷是必需的:
¥While not essential for running n8n, using persistent volumes is required for:
- 使用与文件交互的节点,例如二进制数据节点。
¥Using nodes that interact with files, such as the binary data node.
- 如果你想在重启后保留 手动 n8n 加密密钥。此操作会在启动期间将包含密钥的文件保存到文件存储中。
¥If you want to persist manual n8n encryption keys between restarts. This saves a file containing the key into file storage during startup.
n8n-claim0-persistentvolumeclaim.yaml 清单创建此清单,n8n Deployment 将该声明挂载到 n8n-deployment.yaml 清单的 volumes 部分。
¥The n8n-claim0-persistentvolumeclaim.yaml manifest creates this, and the n8n Deployment mounts that claim in the volumes section of the n8n-deployment.yaml manifest.
1 2 3 4 5 6 | |
Pod 资源#
¥Pod resources
Kubernetes 允许你 可选择指定应用容器所需的最小资源及其运行限制。上面克隆的示例 YAML 文件在 n8n-deployment.yaml 和 postgres-deployment.yaml 文件的 resources 部分包含以下内容:
¥Kubernetes lets you optionally specify the minimum resources application containers need and the limits they can run to. The example YAML files cloned above contain the following in the resources section of the n8n-deployment.yaml and postgres-deployment.yaml files:
1 2 3 4 5 6 7 | |
这定义了每个容器的最小内存限制为 250MB,最大内存限制为 500MB,并允许 Kubernetes 处理 CPU 资源。你可以更改这些值以满足你的需求。以下是 n8n 云产品的资源值,供你参考:
¥This defines a minimum of 250mb per container, a maximum of 500mb, and lets Kubernetes handle CPU. You can change these values to match your own needs. As a guide, here are the resources values for the n8n cloud offerings:
- Start: 320mb RAM, 10 millicore CPU burstable
- Pro (10k executions): 640mb RAM, 20 millicore CPU burstable
- Pro (50k executions): 1280mb RAM, 80 millicore CPU burstable
可选的:环境变量#
¥Optional: Environment variables
你可以使用环境变量配置 n8n 设置和行为。
¥You can configure n8n settings and behaviors using environment variables.
创建 n8n-secret.yaml 文件有关 n8n 环境变量的详细信息,请参阅 环境变量。
¥Create an n8n-secret.yaml file. Refer to Environment variables for n8n environment variables details.
部署#
¥Deployments
这两个部署清单(n8n-deployment.yaml 和 postgres-deployment.yaml)将 n8n 和 Postgres 应用定义到 Kubernetes。
¥The two deployment manifests (n8n-deployment.yaml and postgres-deployment.yaml) define the n8n and Postgres applications to Kubernetes.
清单定义了以下内容:
¥The manifests define the following:
- 将定义的环境变量发送到每个应用 pod
¥Send the environment variables defined to each application pod
- 定义要使用的容器图片。
¥Define the container image to use
- 使用
resources对象设置资源消耗限制
¥Set resource consumption limits with the resources object
- 前面定义的
volumes和volumeMounts用于定义容器中挂载卷的路径。
¥The volumes defined earlier and volumeMounts to define the path in the container to mount volumes.
- 扩展和重启策略。示例清单定义了每个 Pod 的一个实例。你应该根据需要更改此设置。
¥Scaling and restart policies. The example manifests define one instance of each pod. You should change this to meet your needs.
服务#
¥Services
两个服务清单(postgres-service.yaml 和 n8n-service.yaml)分别使用 Kubernetes 负载均衡器通过 5432 和 5678 端口将服务暴露给外部。
¥The two service manifests (postgres-service.yaml and n8n-service.yaml) expose the services to the outside world using the Kubernetes load balancer using ports 5432 and 5678 respectively.
发送到 Kubernetes 集群#
¥Send to Kubernetes cluster
使用以下命令将所有清单发送到集群:
¥Send all the manifests to the cluster with the following command:
1 | |
Namespace error
你可能会看到一条错误消息,提示找不到 "n8n" 命名空间,因为该资源尚未准备就绪。你可以再次运行相同的命令,或者先使用以下命令应用命名空间清单:
¥You may see an error message about not finding an "n8n" namespace as that resources isn't ready yet. You can run the same command again, or apply the namespace manifest first with the following command:
1 | |
设置 DNS#
¥Set up DNS
n8n 通常在子域名上运行。使用你的 DNS 提供商为子域名创建一条 DNS 记录,并将其指向 n8n 服务的 IP 地址。在“端点”列下,从你要使用的集群的“服务和入口”菜单项中找到 n8n 服务的 IP 地址。
¥n8n typically operates on a subdomain. Create a DNS record with your provider for the subdomain and point it to the IP address of the n8n service. Find the IP address of the n8n service from the Services & Ingress menu item of the cluster you want to use under the Endpoints column.
GKE and IP addresses
有关保留 IP 地址如何与 GKE 和 Kubernetes 资源配合使用的更多详细信息,请参阅 阅读 GKE 教程。
¥Read this GKE tutorial for more details on how reserved IP addresses work with GKE and Kubernetes resources.
删除资源#
¥Delete resources
使用以下命令移除清单创建的资源:
¥Remove the resources created by the manifests with the following command:
1 | |
下一步步骤#
¥Next steps
- Learn more about configuring and scaling n8n.
- Or explore using n8n: try the Quickstarts.