实验设置说明和要求
保护您的账号和进度。请务必在无痕浏览器窗口中,使用实验凭证运行此实验。

将应用连接到 Cloud SQL for PostgreSQL 实例

实验 35 分钟 universal_currency_alt 1 个点数 show_chart 入门级
info 此实验可能会提供 AI 工具来支持您学习。
此内容尚未针对移动设备进行优化。
为获得最佳体验,请在桌面设备上访问通过电子邮件发送的链接。

GSP919

Google Cloud 自学实验的徽标

概览

Cloud SQL 是一项全托管式关系型数据库服务,支持 MySQL、PostgreSQL 和 Microsoft SQL Server。它可提供多项服务来帮助处理备份、复制和日志记录等常见管理任务。您可以轻松将应用连接到 Cloud SQL 实例,以便使用这些实用服务。

在本实验中,您将首先创建一个 Kubernetes 集群,并将一个简单的应用部署到该集群。然后,您需要将应用连接到提供的 Cloud SQL for PostgreSQL 实例,并确认应用能够向该实例写入数据并从中读取数据。

您将执行的操作

  • 创建 Kubernetes 集群并将简单应用部署到该集群。
  • 将应用连接到提供的 Cloud SQL for PostgreSQL 数据库实例。
  • 确认应用能够向数据库写入数据并从中读取数据。

设置和要求

点击“开始实验”按钮前的注意事项

请阅读以下说明。实验是计时的,并且您无法暂停实验。计时器在您点击开始实验后即开始计时,显示 Google Cloud 资源可供您使用多长时间。

此实操实验可让您在真实的云环境中开展实验活动,免受模拟或演示环境的局限。为此,我们会向您提供新的临时凭据,您可以在该实验的规定时间内通过此凭据登录和访问 Google Cloud。

为完成此实验,您需要:

  • 能够使用标准的互联网浏览器(建议使用 Chrome 浏览器)。
注意:请使用无痕模式(推荐)或无痕浏览器窗口运行此实验。这可以避免您的个人账号与学生账号之间发生冲突,这种冲突可能导致您的个人账号产生额外费用。
  • 完成实验的时间 - 请注意,实验开始后无法暂停。
注意:请仅使用学生账号完成本实验。如果您使用其他 Google Cloud 账号,则可能会向该账号收取费用。

如何开始实验并登录 Google Cloud 控制台

  1. 点击开始实验按钮。如果该实验需要付费,系统会打开一个对话框供您选择支付方式。左侧是“实验详细信息”窗格,其中包含以下各项:

    • “打开 Google Cloud 控制台”按钮
    • 剩余时间
    • 进行该实验时必须使用的临时凭据
    • 帮助您逐步完成本实验所需的其他信息(如果需要)
  2. 点击打开 Google Cloud 控制台(如果您使用的是 Chrome 浏览器,请右键点击并选择在无痕式窗口中打开链接)。

    该实验会启动资源并打开另一个标签页,显示“登录”页面。

    提示:将这些标签页安排在不同的窗口中,并排显示。

    注意:如果您看见选择账号对话框,请点击使用其他账号
  3. 如有必要,请复制下方的用户名,然后将其粘贴到登录对话框中。

    {{{user_0.username | "<用户名>"}}}

    您也可以在“实验详细信息”窗格中找到“用户名”。

  4. 点击下一步

  5. 复制下面的密码,然后将其粘贴到欢迎对话框中。

    {{{user_0.password | "<密码>"}}}

    您也可以在“实验详细信息”窗格中找到“密码”。

  6. 点击下一步

    重要提示:您必须使用实验提供的凭据。请勿使用您的 Google Cloud 账号凭据。 注意:在本实验中使用您自己的 Google Cloud 账号可能会产生额外费用。
  7. 继续在后续页面中点击以完成相应操作:

    • 接受条款及条件。
    • 由于这是临时账号,请勿添加账号恢复选项或双重验证。
    • 请勿注册免费试用。

片刻之后,系统会在此标签页中打开 Google Cloud 控制台。

注意:如需访问 Google Cloud 产品和服务,请点击导航菜单,或在搜索字段中输入服务或产品的名称。 “导航菜单”图标和“搜索”字段

激活 Cloud Shell

Cloud Shell 是一种装有开发者工具的虚拟机。它提供了一个永久性的 5GB 主目录,并且在 Google Cloud 上运行。Cloud Shell 提供可用于访问您的 Google Cloud 资源的命令行工具。

  1. 点击 Google Cloud 控制台顶部的激活 Cloud Shell “激活 Cloud Shell”图标

  2. 在弹出的窗口中执行以下操作:

    • 继续完成 Cloud Shell 信息窗口中的设置。
    • 授权 Cloud Shell 使用您的凭据进行 Google Cloud API 调用。

如果您连接成功,即表示您已通过身份验证,且项目 ID 会被设为您的 Project_ID 。输出内容中有一行说明了此会话的 Project_ID

Your Cloud Platform project in this session is set to {{{project_0.project_id | "PROJECT_ID"}}}

gcloud 是 Google Cloud 的命令行工具。它已预先安装在 Cloud Shell 上,且支持 Tab 自动补全功能。

  1. (可选)您可以通过此命令列出活跃账号名称:
gcloud auth list
  1. 点击授权

输出:

ACTIVE: * ACCOUNT: {{{user_0.username | "ACCOUNT"}}} To set the active account, run: $ gcloud config set account `ACCOUNT`
  1. (可选)您可以通过此命令列出项目 ID:
gcloud config list project

输出:

[core] project = {{{project_0.project_id | "PROJECT_ID"}}} 注意:如需查看在 Google Cloud 中使用 gcloud 的完整文档,请参阅 gcloud CLI 概览指南

设置区域和可用区

某些 Compute Engine 资源位于区域和可用区内。区域是指某个地理位置,您可以在其中运行自己的资源。每个区域包含一个或多个可用区。

在 Cloud Shell 中运行以下 Cloud Shell 命令,设置实验的默认区域和可用区:

gcloud config set compute/zone "{{{project_0.default_zone|ZONE}}}" export ZONE=$(gcloud config get compute/zone) gcloud config set compute/region "{{{project_0.default_region|REGION}}}" export REGION=$(gcloud config get compute/region)

任务 1. 初始化 API 并创建 Cloud IAM 服务账号

若要完成此任务,您必须初始化 API,并创建一个 IAM 服务账号,以便您的应用可以连接到 Cloud SQL 数据库。

启用 API

您必须启用本实验所需的 API。您将在后续任务中构建容器并将其推送到 Artifact Registry,因此您必须先启用 Artifact Registry API。

  1. 在 Cloud Shell 中,运行以下命令以启用 Artifact Registry API:
gcloud services enable artifactregistry.googleapis.com

为 Cloud SQL 创建服务账号

您需要为稍后部署的应用配置 IAM 服务账号凭证。服务账号必须绑定到一个拥有创建和访问 Cloud SQL 数据库权限的角色。

  1. 在 Cloud Shell 中,创建一个服务账号并将其绑定到实验项目中的 Cloud SQL 管理员角色:
export PROJECT_ID=$(gcloud config list --format 'value(core.project)') export CLOUDSQL_SERVICE_ACCOUNT=cloudsql-service-account gcloud iam service-accounts create $CLOUDSQL_SERVICE_ACCOUNT --project=$PROJECT_ID gcloud projects add-iam-policy-binding $PROJECT_ID \ --member="serviceAccount:$CLOUDSQL_SERVICE_ACCOUNT@$PROJECT_ID.iam.gserviceaccount.com" \ --role="roles/cloudsql.admin"
  1. 在 Cloud Shell 中,创建密钥并将其导出到本地文件:
gcloud iam service-accounts keys create $CLOUDSQL_SERVICE_ACCOUNT.json \ --iam-account=$CLOUDSQL_SERVICE_ACCOUNT@$PROJECT_ID.iam.gserviceaccount.com \ --project=$PROJECT_ID

该文件将保存到 Cloud Shell 中的主文件夹。

点击检查我的进度以验证是否完成了以下目标:为 Cloud SQL 创建 IAM 服务账号。

任务 2. 部署轻量级 GKE 应用

在此任务中,您将创建一个 Kubernetes 集群,并在该集群上部署一个轻量级 Google Kubernetes Engine (GKE) 应用,同时,对应用进行配置,使其能够访问提供的 Cloud SQL 实例。

提供的应用是一个简单的 Flask-SQLAlchemy Web 应用,名为 gMemegen。它通过提供一组照片并获取页眉和页脚文本来创建表情包,将这些内容存储到数据库中,并将生成的表情包渲染到本地文件夹中。该应用运行在一个 Pod 中,其中包含两个容器:一个用于应用本身,另一个用于采用边车模式部署的 Cloud SQL Auth 代理。

负载均衡器将通过边车在应用与数据库之间调度请求。该负载均衡器会公开一个外部 Ingress IP 地址,您可以使用浏览器通过该地址访问应用。

创建一个 Kubernetes 集群

在此步骤中,您将创建一个最小的 Kubernetes 集群。部署集群需要几分钟时间。

  1. 在 Cloud Shell 中,创建一个最小的 Kubernetes 集群,如下所示:
ZONE={{{project_0.default_zone|ZONE}}} gcloud container clusters create postgres-cluster \ --zone=$ZONE --num-nodes=2

创建用于访问数据库的 Kubernetes Secret

在此步骤中,您将创建一对 Kubernetes Secret,其中包含连接到 Cloud SQL 实例和数据库所需的凭证。

  1. 在 Cloud Shell 中,运行以下命令以创建 Secret:
kubectl create secret generic cloudsql-instance-credentials \ --from-file=credentials.json=$CLOUDSQL_SERVICE_ACCOUNT.json kubectl create secret generic cloudsql-db-credentials \ --from-literal=username=postgres \ --from-literal=password=supersecret! \ --from-literal=dbname=gmemegen_db

下载并构建 GKE 应用容器

您需要先构建容器并将其推送到相应仓库,然后才能将 gMemegen 应用部署到 GKE 集群。

  1. 在 Cloud Shell 中,下载提供的应用代码并切换到应用目录:
gsutil -m cp -r gs://spls/gsp919/gmemegen . cd gmemegen
  1. 为区域、项目 ID 和 Artifact Registry 仓库创建环境变量:
export REGION={{{ project_0.default_region | "REGION" }}} export PROJECT_ID=$(gcloud config list --format 'value(core.project)') export REPO=gmemegen
  1. 为 Artifact Registry 配置 Docker 身份验证:
gcloud auth configure-docker ${REGION}-docker.pkg.dev
  • 如果系统要求您确认,请输入 Y
  1. 创建 Artifact Registry 仓库:
gcloud artifacts repositories create $REPO \ --repository-format=docker --location=$REGION
  1. 构建本地 Docker 映像:
docker build -t ${REGION}-docker.pkg.dev/${PROJECT_ID}/gmemegen/gmemegen-app:v1 .

在本实验中,您可以忽略有关以根用户身份运行“pip”的警告,但请注意,一般来说,尤其是在本地计算机上工作时,最好使用虚拟环境。

  1. 将映像推送到 Artifact Registry:
docker push ${REGION}-docker.pkg.dev/${PROJECT_ID}/gmemegen/gmemegen-app:v1

配置并部署 GKE 应用

您必须修改 gMemegen 应用的 Kubernetes 部署清单,以指向正确的容器,并使用 Cloud SQL PostgreSQL 实例的连接字符串配置 Cloud SQL Auth 代理边车。

说明中介绍了如何使用 Cloud Shell 编辑器修改文件,但如果您愿意,也可以使用 Cloud Shell 中的其他编辑器(例如 vinano)来完成这些步骤。

  1. 在 Cloud Shell 菜单栏上,点击打开编辑器以打开 Cloud Shell 编辑器。

  2. 在左侧的探索器面板中,展开 gmemegen 文件夹,然后选择 gmemegen_deployment.yaml 以修改该文件。

  3. 第 33 行image 属性中,将 ${REGION} 替换为 ,并将 ${PROJECT_ID} 替换为 。该行现在应如下所示:

image: {{{ project_0.default_region | "REGION" }}}-docker.pkg.dev/{{{ project_0.project_id | "Project ID" }}}/gmemegen/gmemegen-app:v1
  1. 第 60 行中,将 ${REGION} 替换为 ,并将 ${PROJECT_ID} 替换为 。该行现在应如下所示:
-instances={{{ project_0.project_id | "Project ID" }}}:{{{ project_0.default_region | "REGION" }}}:postgres-gmemegen=tcp:5432

如需确认连接名称是否正确,请在 Cloud 控制台中,依次点击数据库 > SQL,选择 postgres-gmemegen 实例,然后与概览窗格中的连接名称进行比较。有效的连接名称应采用 PROJECT_ID:REGION:CLOUD_SQL_INSTANCE_ID 格式。

  1. 在 Cloud Shell 编辑器菜单中,依次选择文件 > 保存,以保存更改。

  2. 在 Cloud 控制台中,点击打开终端以重新打开 Cloud Shell。您可能需要拖动菜单栏顶部中央的手柄来调整终端窗口的大小,以便看到上方的 Cloud 控制台窗口。

  3. 在 Cloud Shell 中,运行以下命令来部署应用:

kubectl create -f gmemegen_deployment.yaml
  1. 在 Cloud Shell 中,运行以下命令来检查部署是否成功:
kubectl get pods

由于 Pod 需要从仓库中拉取映像,因此可能需要一分钟左右才能启动。重复上述命令,直到看到一个包含 2 个容器且状态为正在运行的 Pod。

点击检查我的进度以验证是否完成了以下目标:部署轻量级 GKE 应用。

任务 3. 将 GKE 应用连接到外部负载均衡器

在此任务中,您将创建一个负载均衡器,用于协调 GKE Pod 中容器之间的请求,并在浏览器中通过应用的外部 IP 地址访问该应用。

创建负载均衡器,以便通过网络访问您的 GKE 应用

在此步骤中,您将创建一个 Kubernetes 负载均衡器服务,该服务将为您的应用提供一个公共 IP 地址。

  1. 在 Cloud Shell 中,运行以下命令以创建应用的负载均衡器:
kubectl expose deployment gmemegen \ --type "LoadBalancer" \ --port 80 --target-port 8080

测试应用以生成一些数据

在此步骤中,您将通过网络浏览器访问 gMemegen 应用。

该应用的界面非常简单。应用启动后会显示首页,其中显示了 6 张可用于制作表情包的候选图片。您可以点击图片以进行选择。

应用随即会显示 Create Meme(创建表情包)页面,您可以在其中输入两段文字,分别显示在图片的顶部和底部。点击 Submit(提交)后,系统会生成并显示该表情包。完成表情包后,界面不会提供任何导航选项。您必须使用浏览器的返回按钮才能返回首页。

还有两个页面,分别是 Recent(最近)和 Random(随机),前者显示一组最近生成的表情包,后者随机显示一个表情包。您在生成表情包和浏览界面时,系统会生成数据库活动,您可以在日志中查看这些活动,如下所述。

等待负载均衡器公开外部 IP,您可以按如下方式检索该 IP:

  1. 在 Cloud Shell 中,从以下命令的输出中复制 LoadBalancer Ingress 的外部 IP 地址属性:
kubectl describe service gmemegen

输出:

Name: gmemegen Namespace: default Labels: app=gmemegen Annotations: Selector: app=gmemegen Type: LoadBalancer IP Families: IP: 10.3.240.201 IPs: 10.3.240.201 LoadBalancer Ingress: 34.67.122.203 Port: 80/TCP TargetPort: 8080/TCP NodePort: 31837/TCP Endpoints: 10.0.0.7:8080 Session Affinity: None External Traffic Policy: Cluster Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal EnsuringLoadBalancer 85s service-controller Ensuring load balancer Normal EnsuredLoadBalancer 36s service-controller Ensured load balancer

LoadBalancer Ingress 属性需要一分钟左右的时间才能包含在输出中(见上文),因此请重复执行该命令,直到该属性显示在输出中,然后再执行下一步。

  1. 在浏览器中,前往负载均衡器的 Ingress IP 地址。

您可以使用以下命令在 Cloud Shell 中创建指向负载均衡器外部 IP 地址的可点击链接:

export LOAD_BALANCER_IP=$(kubectl get svc gmemegen \ -o=jsonpath='{.status.loadBalancer.ingress[0].ip}' -n default) echo gMemegen Load Balancer Ingress IP: http://$LOAD_BALANCER_IP
  1. 点击 Cloud Shell 中的相应链接,您将看到 gMemegen 应用在浏览器的新标签页中运行。

  2. 按如下方式创建表情包:

    • Home(首页)上,点击任意一张显示的图片。
    • Top(顶部)和 Bottom(底部)文本框中输入文字。
    • 点击 Submit(提交)按钮。

系统会显示您的新表情包。

连接到 Cloud SQL 的 GKE 应用的表情包。

  1. 如需创建更多表情包,请使用浏览器的返回按钮前往首页。

  2. 如需查看现有表情包,请点击应用菜单中的 Recent(近期)或 Random(随机)。(请注意,点击 Random 会打开新的浏览器标签页)

  3. 在 Cloud Shell 中,运行以下命令以查看应用的活动:

POD_NAME=$(kubectl get pods --output=json | jq -r ".items[0].metadata.name") kubectl logs $POD_NAME gmemegen | grep "INFO"

此命令会查询 gmemegen 容器中的日志,并显示 Pod 上应用的活动,包括 SQL 语句(这些语句在执行时会记录到 stderr)。

点击检查我的进度以验证是否完成了以下目标:将 GKE 应用连接到外部负载均衡器。

任务 4. 验证应用对数据库的完整读/写能力

在此任务中,您将验证应用能否向数据库写入数据并从中读取数据。

连接到数据库并查询应用表

在此步骤中,您将在 Cloud Shell 中运行 PL/SQL 以连接到 Cloud SQL 实例。

  1. 在 Google Cloud 控制台中,依次点击数据库 > SQL,然后选择 postgres-gmemegen 实例。

  2. 概览窗格中,向下滚动到连接到此实例,然后点击打开 Cloud Shell 按钮。

  3. 在 Cloud Shell 中运行自动填充的命令。

  4. 在系统提示时,输入密码:supersecret!

  5. postgres=> 提示符处,输入以下命令以选择 gmemegen_db 数据库:

\c gmemegen_db
  1. 在系统提示时,输入密码:supersecret!

  2. gmemegen_db=> 提示符处,输入:

select * from meme;

此时,您通过 gMemegen 应用生成的每个表情包都会单独显示为一行。

点击检查我的进度以验证是否完成了以下目标:验证应用对数据库的完整读/写能力。

恭喜!

在本实验中,您配置了一个应用来访问 Cloud SQL for PostgreSQL 数据库。您创建了一个 Kubernetes 集群,并将一个简单的表情包生成应用部署到该集群,还将应用连接到提供的 Cloud SQL for PostgreSQL 数据库实例,并确认应用能够向该实例写入数据并从中读取数据。

Google Cloud 培训和认证

…可帮助您充分利用 Google Cloud 技术。我们的课程会讲解各项技能与最佳实践,可帮助您迅速上手使用并继续学习更深入的知识。我们提供从基础到高级的全方位培训,并有点播、直播和虚拟三种方式选择,让您可以按照自己的日程安排学习时间。各项认证可以帮助您核实并证明您在 Google Cloud 技术方面的技能与专业知识。

本手册的最后更新时间:2025 年 2 月 28 日

本实验的最后测试时间:2025 年 2 月 28 日

版权所有 2026 Google LLC 保留所有权利。Google 和 Google 徽标是 Google LLC 的商标。其他所有公司名和产品名可能是其各自相关公司的商标。

准备工作

  1. 实验会创建一个 Google Cloud 项目和一些资源,供您使用限定的一段时间
  2. 实验有时间限制,并且没有暂停功能。如果您中途结束实验,则必须重新开始。
  3. 在屏幕左上角,点击开始实验即可开始

使用无痕浏览模式

  1. 复制系统为实验提供的用户名密码
  2. 在无痕浏览模式下,点击打开控制台

登录控制台

  1. 使用您的实验凭证登录。使用其他凭证可能会导致错误或产生费用。
  2. 接受条款,并跳过恢复资源页面
  3. 除非您已完成此实验或想要重新开始,否则请勿点击结束实验,因为点击后系统会清除您的工作并移除该项目

此内容目前不可用

一旦可用,我们会通过电子邮件告知您

太好了!

一旦可用,我们会通过电子邮件告知您

一次一个实验

确认结束所有现有实验并开始此实验

使用无痕浏览模式运行实验

使用无痕模式或无痕浏览器窗口是运行此实验的最佳方式。这可以避免您的个人账号与学生账号之间发生冲突,这种冲突可能导致您的个人账号产生额外费用。