arrow_back

将应用部署到 Google Cloud

登录 加入
访问 700 多个实验和课程

将应用部署到 Google Cloud

实验 1 小时 30 分钟 universal_currency_alt 5 个积分 show_chart 入门级
info 此实验可能会提供 AI 工具来支持您学习。
访问 700 多个实验和课程

概览

在本实验中,您需要将应用部署到 Google Cloud 服务 App Engine、Kubernetes Engine 和 Cloud Run。

Google Cloud 服务 App Engine、Kubernetes Engine 和 Cloud Run 架构

目标

在本实验中,您将学习如何执行以下任务:

  • 从 GitHub 下载示例应用
  • 部署到 App Engine
  • 部署到 Kubernetes Engine
  • 部署到 Cloud Run

设置实验环境

对于每个实验,您都会免费获得一个新的 Google Cloud 项目及一组资源,它们都有固定的使用时限。

  1. 请使用无痕式窗口登录 Qwiklabs。

  2. 留意实验的访问时限(例如 1:15:00)并确保能在相应时间段内完成实验。
    系统不提供暂停功能。如有需要,您可以重新开始实验,不过必须从头开始。

  3. 准备就绪时,点击开始实验

  4. 请记好您的实验凭据(用户名密码)。您需要使用这组凭据来登录 Google Cloud 控制台。

  5. 点击打开 Google 控制台

  6. 点击使用其他帐号,然后将实验的凭据复制并粘贴到相应提示框中。
    如果您使用其他凭据,将会收到错误消息或产生费用

  7. 接受条款并跳过恢复资源页面。

任务 1. 创建简单的 Python 应用

您需要一些源代码,以对其进行管理。因此,您将创建一个简单的 Python Flask Web 应用。该应用仅比“Hello World”稍微复杂一点,但足以测试您将构建的流水线。

  1. 在 Cloud 控制台中,点击激活 Cloud Shell (“激活 Cloud Shell”图标)。
  2. 如果看到提示,请点击继续

3.9. 在 Cloud Shell 中输入以下命令,创建一个名为 gcp-course 的文件夹:

mkdir gcp-course
  1. 切换到您刚刚创建的文件夹:
cd gcp-course
  1. 创建一个名为 deploying-apps-to-gcp 的文件夹:
mkdir deploying-apps-to-gcp
  1. 切换到您刚刚创建的文件夹:
cd deploying-apps-to-gcp
  1. 在 Cloud Shell 中,点击打开编辑器 (“编辑器”图标) 以打开代码编辑器。如果看到提示,请点击在新窗口中打开
  2. 在左侧的探索器树中选择 gcp-course > deploying-apps-to-gcp 文件夹。
  3. 点击 deploying-apps-to-gcp
  4. 点击新建文件
  5. 将该文件命名为 main.py,然后按 Enter 键。
  6. 将以下代码粘贴到您刚刚创建的文件中:
from flask import Flask, render_template, request app = Flask(__name__) @app.route("/") def main(): model = {"title": "Hello GCP."} return render_template('index.html', model=model) if __name__ == "__main__": app.run(host='0.0.0.0', port=8080, debug=True, threaded=True)
  1. 如需保存更改,按 CTRL + S
  2. 点击 deploying-apps-to-gcp 文件夹。
  3. 点击新建文件夹
  4. 将该文件夹命名为 templates,然后按 Enter 键。
  5. 右键点击 templates 文件夹,然后创建一个名为 layout.html 的新文件。
  6. 添加以下代码并像之前一样保存文件:
<!doctype html> <html lang="en"> <head> <title>{{model.title}}</title> <!-- Bootstrap CSS --> <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css"> </head> <body> <div class="container"> {% block content %}{% endblock %} <footer></footer> </div> </body> </html>
  1. 同样在 templates 文件夹中,添加另一个名为 index.html 的新文件。

  2. 添加以下代码并像之前一样保存文件:

{% extends "layout.html" %} {% block content %} <div class="jumbotron"> <div class="container"> <h1>{{model.title}}</h1> </div> </div> {% endblock %}
  1. 在 Python 中,应用正常运行需满足的前提条件是使用 pip 管理的。现在,您将添加一个文件,其中列出了此应用的相关要求。

  2. deploying-apps-to-gcp 文件夹(不是 templates 文件夹)中,创建一个新文件,将以下内容添加到该文件,然后将文件保存为 requirements.txt

Flask==2.0.3 itsdangerous==2.0.1 Jinja2==3.0.3 werkzeug==2.2.2

任务 2. 定义 Docker 构建

使用 Docker 的第一步是创建一个名为 Dockerfile 的文件。该文件定义了 Docker 容器的构建方式。您现在将创建该文件。

  1. deploying-apps-to-gcp 文件夹中,点击新建文件,然后将新文件命名为 Dockerfile

Dockerfile 文件用于定义容器的构建方式。

  1. 添加以下内容:
FROM python:3.9 WORKDIR /app COPY . . RUN pip install gunicorn RUN pip install -r requirements.txt ENV PORT=8080 CMD exec gunicorn --bind :$PORT --workers 1 --threads 8 main:app
  1. 如需测试该程序,输入以下命令来构建映像的 Docker 容器:
docker build -t test-python。
  1. 如需运行 Docker 映像,请输入以下命令:
docker run --rm -p 8080:8080 test-python
  1. 如需查看正在运行的程序,请点击 Google Cloud Shell 工具栏中的网页预览 (“网页预览”图标)。然后,选择在端口 8080 上预览

该程序应显示在新的浏览器标签页中。

  1. 在 Cloud Shell 中,按 Ctrl+C 以停止该程序。

任务 3. 部署到 App Engine

App Engine 是一个完全自动化的部署平台。它支持多种语言,包括 Python、Java、JavaScript 和 Go。如需使用该平台,您需要创建一个配置文件,并使用几条简单的命令来部署您的应用。在此任务中,您将创建一个名为 app.yaml 的文件并将其部署到 App Engine。

  1. 在 Cloud Shell 中,点击打开编辑器 (“Cloud Shell 编辑器”图标),然后根据需要点击在新窗口中打开
  2. 在左侧的探索器树中选择 gcp-course/deploying-apps-to-gcp 文件夹。
  3. 点击新建文件,将文件命名为 app.yaml,然后按 Enter 键。
  4. 将以下内容粘贴到您刚刚创建的文件中:
runtime: python39
  1. 保存更改。
注意:您可以将其他设置添加到 app.yaml 文件中,但在此示例中,只需要语言运行时。
  1. 在项目中,必须创建 App Engine 应用。此操作只需进行一次,使用 gcloud app create 命令并指定要在其中创建应用的区域即可。点击打开终端,然后输入以下命令。如果出现提示,请点击授权
gcloud app create --region={{{project_0.startup_script.app_region| Region}}}
  1. 现在,使用以下命令部署您的应用:
gcloud app deploy --version=one --quiet 注意:此命令需要几分钟时间才能运行完毕。
  1. 在 Google Cloud 控制台标题栏的搜索字段中输入 App Engine,然后点击“搜索结果”部分中的 App Engine

  2. 信息中心的右上角有一个指向您应用的链接,类似如下所示:

应用链接示例

注意:默认情况下,App Engine 应用的网址采用 https://project-id.appspot.com 格式。
  1. 点击链接以测试您的程序。

  2. 对程序进行更改,看看用 App Engine 来管理版本有多么容易。

  3. 在代码编辑器中,展开左侧导航窗格中的 /deploying-apps-to-gcp 文件夹。然后,点击 main.py 将其打开。

  4. main() 函数中,将标题更改为 Hello App Engine,如下所示:

@app.route("/") def main(): model = {"title" "Hello App Engine"} return render_template('index.html', model=model)
  1. 点击代码编辑器工具栏中的文件 > 保存以保存更改。

  2. 现在,使用以下命令部署第二版:

gcloud app deploy --version=two --no-promote --quiet 注意--no-promote 参数告诉 App Engine 继续使用旧版本处理请求。这使您可以在将新版本投入生产环境之前对其进行测试。
  1. 命令运行完毕后,返回到 App Engine 信息中心。再次点击该链接,系统仍然会返回第一版。它应该返回 Hello GCP。这是因为上一条命令中的 --no-promote 参数在起作用。

  2. 点击左侧的版本标签页。请注意,系统列出了两个版本。

注意:您可能必须点击刷新才能看到第版。
  1. 点击第版链接进行测试。它应该返回 Hello App Engine

  2. 如需将生产流量迁移到第二版,请点击顶部的拆分流量。将版本更改为第二版,然后点击保存

  3. 此操作需要一些时间才能执行完毕。刷新之前返回 Hello GCP 的浏览器标签页。它现在应该返回新版本。

点击检查我的进度,验证是否完成了以下目标: 部署到 App Engine

任务 4. 使用 Cloud Build 和 Artifact Registry 部署到 Kubernetes Engine

Kubernetes Engine 可让您创建机器集群并向其部署任意数量的应用。Kubernetes 简化了管理机器的细节,可让您使用简单的 CLI 命令自动部署应用。

如需将应用部署到 Kubernetes,首先需要创建集群。然后,您需要为将要部署到集群的每个应用添加一个配置文件。

  1. 导航菜单 (“导航菜单”图标) 上,点击 Kubernetes Engine。如果看到一条显示 Kubernetes API 正在初始化的消息,请等待初始化操作执行完毕。

  2. 点击创建集群,然后点击切换到标准集群,确认切换到标准集群

  3. 点击可用区,将其设为位置类型,然后选择可用区 。接受所有其他变量的默认值,然后点击创建。创建 Kubernetes Engine 集群需要几分钟时间。集群准备就绪后,系统会显示一个绿色对勾标记。

  4. 点击集群右侧的三个点,然后点击连接

  5. 连接到集群屏幕中,点击在 Cloud Shell 中运行。系统将使用自动输入的连接命令打开 Cloud Shell。

  6. Enter 键以连接到集群。

  7. 如需测试连接,请输入以下命令:

kubectl get nodes

此命令仅显示集群中的机器。如果命令运行成功,则说明您已连接。

  1. 在 Cloud Shell 中,点击打开编辑器 (“Cloud Shell 编辑器”图标)。
  2. 展开左侧导航窗格中的 gcp-course/deploying-apps-to-gcp 文件夹。然后,点击 main.py 将其打开。
  3. main() 函数中,将标题更改为 Hello Kubernetes Engine,如下所示:
@app.route("/") def main(): model = {"title" "Hello Kubernetes Engine"} return render_template('index.html', model=model)
  1. 保存更改。
  2. 将名为 kubernetes-config.yaml 的文件添加到 gcp-course/deploying-apps-to-gcp 文件夹中。
  3. 将以下代码粘贴到该文件中以配置应用:
--- apiVersion: apps/v1 kind: Deployment metadata: name: devops-deployment labels: app: devops tier: frontend spec: replicas: 3 selector: matchLabels: app: devops tier: frontend template: metadata: labels: app: devops tier: frontend spec: containers: - name: devops-demo image: <YOUR IMAGE PATH HERE> ports: - containerPort: 8080 --- apiVersion: v1 kind: Service metadata: name: devops-deployment-lb labels: app: devops tier: frontend-lb spec: type: LoadBalancer ports: - port: 80 targetPort: 8080 selector: app: devops tier: frontend

注意:上述 YAML 文件的第一部分为部署配置步骤。在此示例中,您将部署 Python Web 应用的 3 个实例。请注意映像属性。您将在构建后一分钟内使用您的映像更新此值。第二部分用于配置“负载均衡器”类型的服务。负载均衡器将拥有一个公共 IP 地址。用户将通过负载均衡器访问您的应用。

如需详细了解 Kubernetes 部署和服务,请参阅以下链接:

  1. Cloud Shell 中,输入以下命令以创建名为 devops-demo 的 Artifact Registry 制品库:
gcloud artifacts repositories create devops-demo \ --repository-format=docker \ --location={{{ project_0.default_region | "REGION" }}}
  1. 输入以下命令,配置 Docker 以向 Artifact Registry Docker 仓库进行身份验证:
gcloud auth configure-docker {{{ project_0.default_region | "REGION" }}}-docker.pkg.dev
  1. 如需使用 Kubernetes Engine,您需要构建 Docker 映像。输入以下命令,使用 Cloud Build 创建映像并将其存储在 Artifact Registry 中:
cd ~/gcp-course/deploying-apps-to-gcp gcloud builds submit --tag {{{ project_0.default_region | "REGION" }}}-docker.pkg.dev/$DEVSHELL_PROJECT_ID/devops-demo/devops-image:v0.2 .
  1. 上一条命令运行完毕后,映像名称将列在输出结果中。映像名称的格式为 -docker.pkg.dev/PROJECT_ID/devops-demo/devops-image:v0.2。

  2. 选中您的映像名称并将其复制到剪贴板。将该值粘贴到 kubernetes-config.yaml 文件中,注意覆盖字符串 <YOUR IMAGE PATH HERE>

您应该会看到如下所示的内容:

spec: containers: - name: devops-demo image: {{{ project_0.default_region | "REGION" }}}-docker.pkg.dev/PROJECT_ID/devops-demo/devops-image:v0.2 ports:
  1. 输入以下 Kubernetes 命令来部署您的应用:
kubectl apply -f kubernetes-config.yaml
  1. 配置文件指定了应用的三个副本。请输入以下命令来查看三个实例是否已创建:
kubectl get pods

确保所有 Pod 都已准备就绪。否则,请等待几秒钟,然后重试。

  1. 配置文件中还添加了一个负载均衡器。请输入以下命令来查看它是否已创建:
kubectl get services

您应该会看到如下所示的内容:

输出

如果负载均衡器的外部 IP 地址显示“待定”,请等待几秒钟,然后重试。

  1. 有了外部 IP 地址后,请打开浏览器标签页并向该地址发出请求。它应该返回 Hello Kubernetes Engine。准备就绪的过程可能需要几秒钟时间。

点击检查我的进度,验证是否完成了以下目标: 部署到 Kubernetes Engine

任务 5. 部署到 Cloud Run

Cloud Run 可以简化并自动执行部署到 Kubernetes 的操作。使用 Cloud Run 时,您不需要配置文件。您只需为应用选择一个集群即可。借助 Cloud Run,您可以使用 Google 管理的集群,也可以使用自己的 Kubernetes 集群。

如需使用 Cloud Run,您的应用需要使用 Docker 映像进行部署,并且它必须是无状态的。

  1. 打开 Cloud Shell 代码编辑器并展开左侧导航窗格中的 gcp-course/deploying-apps-to-gcp 文件夹。然后,点击 main.py 将其打开。
  2. main() 函数中,将标题更改为 Hello Cloud Run,如下所示:
@app.route("/") def main(): model = {"title" "Hello Cloud Run"} return render_template('index.html', model=model)
  1. 保存更改。

  2. 如需使用 Cloud Run,您需要构建 Docker 映像。在 Cloud Shell 中,输入以下命令来使用 Cloud Build 创建映像并将其存储在 Artifact Registry 中:

cd ~/gcp-course/deploying-apps-to-gcp gcloud builds submit --tag {{{ project_0.default_region | "REGION" }}}-docker.pkg.dev/$DEVSHELL_PROJECT_ID/devops-demo/cloud-run-image:v0.1 .
  1. 构建完成后,在 Google Cloud 控制台标题栏的搜索字段中输入 Cloud Run,然后点击“产品和页面”部分中的 Cloud Run

  2. 点击创建服务。 这将启用 Cloud Run API。

  3. 点击容器映像网址文本框中的选择链接,然后点击 Artifact Registry。在出现的对话框中,依次展开 Region-docker.pkg.dev/$DEVSHELL_PROJECT_ID/devops-demo > cloud-run-image,然后选择列出的映像。然后,点击选择

  4. 服务名称中,输入 hello-cloud-run 并选择区域

  5. 对于身份验证,请选择允许未通过身份验证的调用

  6. 容器、卷、网络、安全性执行环境部分中,选择默认

  7. 修订版本的扩缩配置中,将实例数上限设置为 6。将其余设置保留为默认值。

  8. 最后,点击创建

  9. 部署服务应该不会花费很长时间。出现绿色对勾标记时,请点击系统为应用自动生成的网址。它应该返回 Hello Cloud Run

点击检查我的进度,验证是否完成了以下目标: 部署到 Cloud Run

恭喜!

在本实验中,您将应用部署到了 Google Cloud 服务 App Engine、Kubernetes Engine 和 Cloud Run。

结束实验

完成实验后,请点击结束实验。Google Cloud Skills Boost 会移除您使用过的资源并为您清理帐号。

系统会提示您为实验体验评分。请选择相应的星级数,输入评论,然后点击提交

星级数的含义如下:

  • 1 颗星 = 非常不满意
  • 2 颗星 = 不满意
  • 3 颗星 = 一般
  • 4 颗星 = 满意
  • 5 颗星 = 非常满意

如果您不想提供反馈,可以关闭该对话框。

如果要留言反馈、提出建议或做出更正,请使用支持标签页。

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

准备工作

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

使用无痕浏览模式

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

登录控制台

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

此内容目前不可用

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

太好了!

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

一次一个实验

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

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

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