从 Google Kubernetes Engine 连接到 Cloud SQL for PostgreSQL
本页面介绍如何使用 Google Cloud 控制台和客户端应用在连接到 PostgreSQL 实例的 Google Kubernetes Engine (GKE) 上部署示例应用。如果您及时完成本快速入门中的步骤(包括清理),那么在此期间所创建资源的费用通常不会超过 1 美元。
准备工作
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
启用在 GKE 上运行 Cloud SQL 示例应用所需的 Google Cloud API。
控制台
点击启用 API 以启用本快速入门所需的 API。
这将启用以下 API:
- Compute Engine API
- Cloud SQL Admin API
- Google Kubernetes Engine API
- Artifact Registry API
- Cloud Build API
gcloud
点击以下按钮打开 Cloud Shell,以通过命令行直接在浏览器中访问 Google Cloud 资源。Cloud Shell 可用于运行本快速入门中介绍的
gcloud
命令。按照以下方式使用 Cloud Shell 运行
gcloud services enable
命令,以启用本快速入门所需的 API。gcloud services enable compute.googleapis.com sqladmin.googleapis.com \ container.googleapis.com artifactregistry.googleapis.com cloudbuild.googleapis.com
此命令会启用以下 API:
- Compute Engine API
- Cloud SQL Admin API
- GKE API
- Artifact Registry API
- Cloud Build API
设置 Cloud SQL
创建 Cloud SQL 实例
创建数据库
控制台
-
在 Google Cloud 控制台中,转到 Cloud SQL 实例页面。
- 选择
quickstart-instance
。 - 从 SQL 导航菜单中选择数据库。
- 点击创建数据库。
- 在新建数据库对话框的数据库名称字段中,输入
quickstart-db
。 - 点击创建。
gcloud
运行 gcloud
sql databases create
命令以创建数据库。
gcloud sql databases create quickstart-db --instance=quickstart-instance
创建用户
控制台
-
在 Google Cloud 控制台中,转到 Cloud SQL 实例页面。
- 如需打开实例的概览页面,请点击实例名称。
- 从 SQL 导航菜单中选择用户。
- 点击添加用户账号。
- 在将一个用户账号添加到实例 instance_name 页面中,添加以下信息:
- 用户名:设为
quickstart-user
- 密码:指定数据库用户的密码。记下此密码,以便在本快速入门的后续步骤中使用。
- 用户名:设为
- 点击添加。
gcloud
按照以下方式运行命令之前,请将 DB_PASS 替换为数据库用户的密码。记下此密码,以便在本快速入门的后续步骤中使用。
运行 gcloud sql users create
命令以创建用户。
gcloud sql users create quickstart-user \ --instance=quickstart-instance \ --password=DB_PASS
Cloud SQL 和本地 PostgreSQL 的用户名长度限制一样。
创建 GKE 集群
控制台
-
在 Google Cloud 控制台中,转到 Google Kubernetes Engine 页面。
- 点击创建。
- 点击 GKE Autopilot 的配置。
- 对于名称,请将集群名称指定为
gke-cloud-sql-quickstart
。 - 点击创建。
gcloud
运行 gcloud container clusters create-auto
命令以创建集群。
gcloud container clusters create-auto gke-cloud-sql-quickstart \ --region us-central1
将 Cloud SQL 示例应用克隆到 Cloud Shell Editor
创建好 Cloud SQL 实例、数据库和 GKE 集群后,您现在可以克隆和配置示例应用,以连接到 Cloud SQL 实例。本快速入门中的其余步骤需要使用 gcloud
和 kubectl
命令行工具。这两个工具都已预安装在 Cloud Shell 中。
Go
-
在 Cloud Shell Editor 中,打开示例应用的源代码。
打开 Cloud Shell Editor -
在“
Open in Cloud Shell
”对话框中,点击确认下载示例应用代码,然后在 Cloud Shell Editor 中打开示例应用目录。
Java
-
在 Cloud Shell Editor 中,打开示例应用的源代码。
打开 Cloud Shell Editor -
在“
Open in Cloud Shell
”对话框中,点击确认下载示例应用代码,然后在 Cloud Shell Editor 中打开示例应用目录。
Node.js
-
在 Cloud Shell Editor 中,打开示例应用的源代码。
打开 Cloud Shell Editor -
在“
Open in Cloud Shell
”对话框中,点击确认下载示例应用代码,然后在 Cloud Shell Editor 中打开示例应用目录。
Python
-
在 Cloud Shell Editor 中,打开示例应用的源代码。
打开 Cloud Shell Editor -
在“
Open in Cloud Shell
”对话框中,点击确认下载示例应用代码,然后在 Cloud Shell Editor 中打开示例应用目录。
启用 GKE 集群
启用您刚刚创建的 GKE 集群并将其设置为默认集群,以用于本快速入门中的其余命令。
gcloud container clusters get-credentials
命令以启用 GKE 集群。gcloud container clusters get-credentials gke-cloud-sql-quickstart \ --region us-central1
设置服务账号
-
按照以下方式运行
gcloud iam service-accounts create
命令来创建新的服务账号:gcloud iam service-accounts create gke-quickstart-service-account \ --display-name="GKE Quickstart Service Account"
- 按照以下方式运行
gcloud projects add-iam-policy-binding
命令,将 Cloud SQL Client 角色添加到您刚创建的 Google Cloud 服务账号。将 YOUR_PROJECT_ID 替换为项目 ID。gcloud projects add-iam-policy-binding YOUR_PROJECT_ID \ --member="serviceAccount:gke-quickstart-service-account@YOUR_PROJECT_ID.iam.gserviceaccount.com" \ --role="roles/cloudsql.client"
- 示例应用使用日志记录功能,因此请按如下所示运行
gcloud projects add-iam-policy-binding
命令,将 Log Writer 角色添加到您刚刚创建的 Google Cloud 服务账号已创建。将 YOUR_PROJECT_ID 替换为项目 ID。gcloud projects add-iam-policy-binding YOUR_PROJECT_ID \ --member="serviceAccount:gke-quickstart-service-account@YOUR_PROJECT_ID.iam.gserviceaccount.com" \ --role="roles/logging.logWriter"
- 服务账号必须能够从 Artifactory 制品库拉取映像,因此请按如下所示运行
gcloud projects add-iam-policy-binding
命令以向服务账号添加 Artifact Registry Reader 角色。将 YOUR_PROJECT_ID 替换为项目 ID。gcloud projects add-iam-policy-binding YOUR_PROJECT_ID \ --member="serviceAccount:gke-quickstart-service-account@YOUR_PROJECT_ID.iam.gserviceaccount.com" \ --role="roles/artifactregistry.reader"
- 创建 Kubernetes 服务账号:
- 在 Cloud Shell Editor 中更新
service-account.yaml
文件。将<YOUR-KSA-NAME>
替换为ksa-cloud-sql
。 - 按照以下方式在 Cloud Shell 中运行
kubectl apply
命令:kubectl apply -f service-account.yaml
- 在 Cloud Shell Editor 中更新
- 按照以下方式运行
gcloud iam service-accounts add-iam-policy-binding
命令以启用 Google Cloud 服务账号和 Kubernetes 服务账号的 IAM 绑定。进行以下替换:- 将 YOUR_PROJECT_ID 替换为项目 ID。
- 将 YOUR_K8S_NAMESPACE 替换为
default
,这是在 GKE 中创建的集群的默认命名空间。 - 将 YOUR_KSA_NAME 替换为
ksa-cloud-sql
。
gcloud iam service-accounts add-iam-policy-binding \ --role="roles/iam.workloadIdentityUser" \ --member="serviceAccount:YOUR_PROJECT_ID.svc.id.goog[YOUR_K8S_NAMESPACE/YOUR_KSA_NAME]" \ gke-quickstart-service-account@YOUR_PROJECT_ID.iam.gserviceaccount.com
- 按照以下方式运行
kubectl annotate
命令以使用 IAM 绑定为 Kubernetes 服务账号添加注解。进行以下替换:- 将 YOUR_KSA_NAME 替换为
ksa-cloud-sql
。 - 将 YOUR_PROJECT_ID 替换为项目 ID。
kubectl annotate serviceaccount \ YOUR_KSA_NAME \ iam.gke.io/gcp-service-account=gke-quickstart-service-account@YOUR_PROJECT_ID.iam.gserviceaccount.com
- 将 YOUR_KSA_NAME 替换为
配置 Secret
按照以下方式运行 kubectl create secret generic
命令,为示例应用要使用的数据库、用户和用户密码创建 Kubernetes Secret。每个 Secret 的值均基于本快速入门前面的步骤中指定的值。
将 DB_PASS 替换为您在之前的创建用户快速入门步骤中创建的 quickstart-user
的密码。
kubectl create secret generic gke-cloud-sql-secrets \ --from-literal=database=quickstart-db \ --from-literal=username=quickstart-user \ --from-literal=password=DB_PASS
构建示例应用
Go
-
在 Cloud Shell 中运行以下
gcloud artifacts repositories create
命令,以在 Artifact Registry 中创建名为 gke-cloud-sql-repo 的代码库,该代码库与集群位于同一区域。将 YOUR_PROJECT_ID 替换为项目 ID。gcloud artifacts repositories create gke-cloud-sql-repo \ --project=YOUR_PROJECT_ID \ --repository-format=docker \ --location=us-central1 \ --description="GKE Quickstart sample app"
-
按照以下方式在 Cloud Shell 中运行
gcloud builds submit
命令,以构建 Docker 容器并将其发布到 Artifact Registry。将 YOUR_PROJECT_ID 替换为项目 ID。gcloud builds submit \ --tag us-central1-docker.pkg.dev/YOUR_PROJECT_ID/gke-cloud-sql-repo/gke-sql .
Java
-
在 Cloud Shell 中运行以下
gcloud artifacts repositories create
命令,以在 Artifact Registry 中创建名为 gke-cloud-sql-repo 的代码库,该代码库与集群位于同一区域。将 YOUR_PROJECT_ID 替换为项目 ID。gcloud artifacts repositories create gke-cloud-sql-repo \ --project=YOUR_PROJECT_ID \ --repository-format=docker \ --location=us-central1 \ --description="GKE Quickstart sample app"
-
按照以下方式在 Cloud Shell 中运行
mvn
命令,以构建 Docker 容器并将其发布到 Artifact Registry。将 YOUR_PROJECT_ID 替换为项目 ID。mvn clean package com.google.cloud.tools:jib-maven-plugin:2.8.0:build \ -Dimage=us-central1-docker.pkg.dev/YOUR_PROJECT_ID/gke-cloud-sql-repo/gke-sql \ -DskipTests -Djib.to.credHelper=gcloud
Node.js
-
在 Cloud Shell 中运行以下
gcloud artifacts repositories create
命令,以在 Artifact Registry 中创建名为 gke-cloud-sql-repo 的代码库,该代码库与集群位于同一区域。将 YOUR_PROJECT_ID 替换为项目 ID。gcloud artifacts repositories create gke-cloud-sql-repo \ --project=YOUR_PROJECT_ID \ --repository-format=docker \ --location=us-central1 \ --description="GKE Quickstart sample app"
-
按照以下方式在 Cloud Shell 中运行
gcloud builds submit
命令,以构建 Docker 容器并将其发布到 Artifact Registry。将 YOUR_PROJECT_ID 替换为项目 ID。gcloud builds submit \ --tag us-central1-docker.pkg.dev/YOUR_PROJECT_ID/gke-cloud-sql-repo/gke-sql .
Python
-
在 Cloud Shell 中运行以下
gcloud artifacts repositories create
命令,以在 Artifact Registry 中创建名为 gke-cloud-sql-repo 的代码库,该代码库与集群位于同一区域。将 YOUR_PROJECT_ID 替换为项目 ID。gcloud artifacts repositories create gke-cloud-sql-repo \ --project=YOUR_PROJECT_ID \ --repository-format=docker \ --location=us-central1 \ --description="GKE Quickstart sample app"
-
按照以下方式在 Cloud Shell 中运行
gcloud builds submit
命令,以构建 Docker 容器并将其发布到 Artifact Registry。将 YOUR_PROJECT_ID 替换为项目 ID。gcloud builds submit \ --tag us-central1-docker.pkg.dev/YOUR_PROJECT_ID/gke-cloud-sql-repo/gke-sql .
部署示例应用
清理
为避免因本页中使用的资源导致您的 Google Cloud 账号产生费用,请按照以下步骤操作。
-
在 Google Cloud 控制台中,转到 Cloud SQL 实例页面。
- 选择
quickstart-instance
实例以打开实例详情页面。 - 在页面顶部的图标栏中,点击删除。
- 在删除实例对话框中,输入
quickstart-instance
,然后点击删除以删除该实例。 -
在 Google Cloud 控制台中,转到 Google Kubernetes Engine 页面。
- 点击
gke-cloud-sql-quickstart
服务名称旁边的复选框。 - 点击 Google Kubernetes Engine 页面顶部的删除按钮。
可选的清理步骤
如果您没有使用为本快速入门创建的 Google Cloud 服务账号,则可以将其移除。
-
在 Google Cloud 控制台中,转到 IAM 页面。
- 选中名为
gke-quickstart-service-account
的 IAM 账号对应的复选框。 - 点击移除,然后确认移除。
如果您没有使用在本快速入门中启用的 API,则可以将其停用。
- 在本快速入门中启用的 API:
- Compute Engine API
- Cloud SQL Admin API
- Google Kubernetes Engine API
- Artifact Registry API
- Cloud Build API
在 Google Cloud 控制台中,转到 API 页面。
选择您要停用的任何 API,然后点击停用 API 按钮。
后续步骤
您可以根据自己的需求详细了解如何创建 Cloud SQL 实例。您还可以了解如何为 Cloud SQL 实例创建 PostgreSQL 用户和数据库。
另请参阅 Cloud SQL 价格信息。
详细了解以下内容:
此外,您还可以了解如何从其他 Google Cloud 应用连接到 Cloud SQL 实例: