使用 Cloud Shell 进行开发Cloud Code

1. 概览

Cloud Shell 是一个可通过浏览器访问的在线开发和运营环境。您可以借助预加载了实用程序(如 gcloud 命令行工具、kubectl 等)的在线终端管理资源。您还可以使用在线 Cloud Shell Editor 开发、构建、调试和部署云端应用

在本实验中,您将使用 Cloud Shell 和 Cloud Shell Editor,并在本地模拟器和实际服务中使用 Cloud Code 创建、部署和测试基于容器的应用。

学习内容

  • 浏览并熟悉 Cloud Shell 的主要功能
  • 使用不同的 Cloud Shell 使用模式进行练习
  • 自定义 Cloud Shell 环境以供高级使用
  • 熟悉 Cloud Code 选项和功能
  • 详细了解 Cloud Code for Kubernetes 应用
  • 使用 Minikube 等本地模拟器

前提条件

  • 您需要一个具有 Editor 权限的 GCP 项目、一个 GCP 账号以及对 Cloud Shell 的访问权限
  • 对于可选部分,您需要安装终端模拟器和 Google Cloud SDK。

2. 设置和要求

自定进度的环境设置

  1. 登录 Google Cloud 控制台,然后创建一个新项目或重复使用现有项目。如果您还没有 Gmail 或 Google Workspace 账号,则必须创建一个

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • 项目名称是此项目参与者的显示名称。它是 Google API 尚未使用的字符串。您可以随时对其进行更新。
  • 项目 ID 在所有 Google Cloud 项目中是唯一的,并且是不可变的(一经设置便无法更改)。Cloud 控制台会自动生成一个唯一字符串;通常您不在乎这是什么在大多数 Codelab 中,您都需要引用项目 ID(它通常标识为 PROJECT_ID)。如果您不喜欢生成的 ID,可以再随机生成一个 ID。或者,您也可以尝试自己的项目 ID,看看是否可用。完成此步骤后便无法更改该 ID,并且该 ID 在项目期间会一直保留。
  • 此外,还有第三个值,即某些 API 使用的项目编号,供您参考。如需详细了解所有这三个值,请参阅文档
  1. 接下来,您需要在 Cloud 控制台中启用结算功能,以便使用 Cloud 资源/API。运行此 Codelab 应该不会产生太多的费用(如果有费用的话)。如需关停资源,以免产生超出本教程范围的结算费用,您可以删除自己创建的资源或删除整个项目。Google Cloud 的新用户符合参与 $300 USD 免费试用计划的条件。

3. 使用 Cloud Shell 终端

在本部分中,您将了解 Cloud Shell 终端、如何浏览界面、使用各种功能,并探索配置选项和不同的使用方式,帮助您提高工作效率。

Cloud Shell 有两个主要工具:Cloud Shell 终端Cloud Shell 编辑器。在本实验中,Cloud Shell 终端和 Cloud Shell 这两个术语可以互换使用,但编辑器始终称为 Cloud Shell Editor,以明确区分终端模拟器和 IDE。

Cloud Shell 是一款功能齐全的云端 Shell,构建于一台随时可供您使用的 Google Compute Engine Debian 临时 Linux 机器上。它已安装 Google Cloud SDK 和多种相关工具,例如 gitkubectlkubectxcurlpython3tmux...

您的 $HOME 目录会保存在 Google Cloud 的 Cloud Storage 中,并且会在 Cloud Shell 机器每次启动时自动装载,因此,即使 Cloud Shell 机器关停,您也不会丢失其下的任何信息。这意味着,如果您再次启用 Cloud Shell,您的 $HOME 目录以及您可能对其执行的任何自定义设置都将可供您使用。

启动 Cloud Shell

  1. 转到 console.cloud.google.com,如果您尚未在 GCP Console 中登录,请输入您的 Google 凭据。您将看到 Google Cloud Platform 的控制台主界面。
  2. 在 Cloud 控制台菜单栏选择器中,选择您要使用的 GCP 项目 ID:

a78258af94ed9ec3.png

  1. 在菜单栏右侧(您的账号头像旁边),找到用于激活 Cloud Shell 的按钮:

5b4246f45b173ff4

  1. 点击 Cloud Shell 图标,Cloud Shell 终端将打开,并在 GCP Console 界面正下方显示一个新窗格:界面:

8495f27a3ed0f05

在此窗格中,您会看到所谓的 Cloud Shell 终端。

  1. 转到 Cloud Shell 终端,您会发现,由于您从 GCP 控制台选择了正确的 GCP 项目 ID,因此 Cloud Shell 会识别此 ID,因此您不必再次指定该 ID:
echo $GOOGLE_CLOUD_PROJECT

这将输出您的 GCP 项目 ID,此 ID 也会显示在 Cloud Shell 提示符中。

在工具之间切换

Cloud Shell 为您提供了多种工具和配置选项。您可以通过 Cloud Shell 菜单中的选项查看这些选项:

595834af08265e5c

  1. 点击栏中的 67bd0e39332a8438 按钮,借助该按钮,您可以最大化 Cloud Shell 终端并占据浏览器的所有标签页空间:

1197e3e9a36bc7aa

  1. Cloud Shell 会最大化并占据完整的浏览器标签页空间:

ecb227a1d39b8021.png

  1. 再次点击该图标。浏览器标签页中的实际区域将恢复为在 Cloud 控制台和 Cloud Shell 之间共享。

打开新标签页

Cloud Shell 终端可让您根据需要打开任意数量的标签页。

  1. 点击以下按钮,然后打开新标签页。

e5757f88b64c7f5.png

  1. 现在关闭新标签页,点击标签页名称旁边的 x,或在相应的 shell 中输入 exit

8828238e04a14a20

打开新窗口

通过在新的浏览器窗口中打开 Cloud Shell,您可以在一个窗口中使用 Cloud 控制台,在另一个窗口中打开 Cloud Shell。

  1. 点击以下按钮,观察 Cloud Shell 在新的浏览器标签页中打开的方式:

bd407e51ae78d9fe.png

  1. 请注意,Cloud Shell 现在提供相同的工具栏选项,但外观略有不同:

4bce4507ce34a695

  1. 在接下来的部分中,请不要离开这个新的浏览器标签页。

使用 Tmux 传输会话

Cloud Shell 附带了 tmux。Tmux 是一种非常受欢迎的终端多路复用器,类似于 GNU Screen。得益于与 tmux 的集成,无论您身在何处,Cloud Shell 都能保留您的会话。

在接下来的步骤中,您将运用此概念进行练习,以更好地了解相应功能。

移动 Cloud Shell 终端

  1. 在您刚刚打开的 Cloud Shell 标签页中,输入 top 命令:

bdd80a3fdcc6c7db.png

Top 命令会实时显示 Cloud Shell 终端中运行的进程。您将使用它在 tmux 提供的 Cloud Shell 中直观呈现会话持久性。

  1. 返回浏览器中的第一个标签页(Cloud 控制台所在的标签页)。
  2. 请注意,由于您之前决定在新窗口中打开 Cloud Shell,因此会看到一条内容为“Your session was transferred to another browser tab. You can disable this from the "Tmux Settings" option in the Cloud Shell settings menu.”的消息
  3. 点击“重新连接”按钮:

bdc5d5773296bcfe.png

然后,您可以访问在第二个标签页中运行的 shell,并且 Top 会继续在此处运行,就像您刚才离开它一样。

  1. 导航到浏览器中的第二个标签页,也就是您在新窗口中打开 Cloud Shell,
  2. 点击重新连接。您将恢复顶级进程,就像它在我们关闭窗口之前运行的进程一样。

使用 Tmux 拆分窗口

Tmux 比刚才的用途要实用得多。Tmux 教程不在本实验的讨论范围内,您可以在官方 Tmux 使用入门中找到更多信息。

不过,tmux 为 Cloud Shell 提供了本地终端模拟器可以使用的一些额外功能。为了演示这一点,您将并排进行终端拆分。

  1. 在 Cloud Shell 中,按 Ctrl + b,然后按 %
  2. 观察 tmux 如何在原始窗格右侧创建新窗格:

717b047d71c8eeef

  1. 点击第二个窗格并输入 exit

利用网页预览

Cloud Shell 还可以通过计算机上运行的本地浏览器,从在云端运行的 Cloud Shell 机器建立自动端口转发。

  1. 在 Cloud Shell 中输入:
python3 -m http.server 8080
  1. 转到右上角的网页预览选项,然后选择在端口 8080 上预览

a8363cafca79345.png

系统随即会打开一个新标签页,其中包含在该端口中提供的默认页面。

请注意,您可以更改端口并预览您的应用在 Cloud Shell 中公开的任何端口,而不仅仅是端口 8080

访问其他 Cloud Shell 选项

Cloud Shell 中提供了其他设置和选项。

  1. 点击 Cloud Shell 菜单中的三个点以访问选项:

a5c515c9df9284be.png

此处最相关的选项是将文件上传或下载到 Cloud Shell,并在您遇到任何问题时重启 Cloud Shell 机器。

4. 使用 Cloud Shell Editor

Cloud Shell 最重要的功能之一是 Cloud Shell 编辑器。这是一个基于开源项目 Eclipse Theia 的成熟 IDE,由 Google 等各方共同贡献。其外观和风格与 VSCode 非常相似,因为它们都使用几个常见的开源基础组件,例如 Monaco 编辑器、扩展模型、语言服务器协议和调试适配器协议。

由于 Theia/Cloud Shell Editor 是一款相当复杂的工具,因此介绍 Cloud Shell Editor 的所有功能都不在本实验的讨论范围内。在本部分,您将了解此 Google Cloud 实现提供的一些核心概念和独特功能。

访问 Cloud Shell Editor

可以通过三种不同的方式访问 Cloud Shell Editor:

  • 从命令行访问
  • 通过 Cloud Shell 菜单访问
  • 在浏览器中访问网址

请通过以下步骤体验这些方法

  1. 使用以下命令从命令行打开 .bashrc:
cloudshell edit $HOME/.bashrc
  1. 点击“打开编辑器”6039dbc755bfca9f 按钮,从菜单中打开 Cloud Shellf493b9a98771b0af.png 这样会打开 Cloud Shell 编辑器,同时使 Cloud Shell 终端保持打开状态。如果您希望只有 Cloud Shell Editor 的所有标签页空间,请点击“修改”按钮右侧的按钮以关闭终端。这两个按钮(打开/关闭编辑器和打开/关闭终端)将决定浏览器标签页中显示的工具。练习点击两者,掌握使用技巧。
  2. 输入 ide.cloud.google.com从浏览器的网址栏中调用 Cloud Shell Editor

通过 Cloud Shell Editor 使用命令行

虽然您在同一个浏览器标签页中共存了 Cloud Shell 终端和 Cloud Shell Editor,但您可以分配 Cloud Shell 终端,并仅使用 Cloud Shell Editor 和 Cloud Shell Editor 中提供的终端来满足您的所有需求。如果您习惯于在 IDE 中工作,并且了解 VSCode 中的不同快捷键和窗格动态,那么这可能很有意义。

使用上述任意方法打开 Cloud Shell Editor。然后,转到 Editor 菜单并选择 Terminal >新建终端(或者按键盘上的“Ctrl + ``)。一个新的终端窗格将在 Cloud Shell Editor 的下半部分打开,您可以使用它来满足您的所有 shell 需求:

8b2c36f71e851c40

这样,您就可以选择管理不同的终端窗格,而无需像 Cloud Shell 终端那样使用 tmux 窗格管理。

自定义 Cloud Shell 设置

Cloud Shell 提供多种自定义选项,包括外观和了解 Cloud Shell 终端的启动配置和详细操作。您将在以下部分中更详细地了解不同的选项。

转到 Cloud Shell 终端菜单,然后点击齿轮图标。系统会显示几个配置选项:

a473c985a434070b.png

查看其中部分规则:

  • 颜色主题:您可以使用浅色、深色或一组自定义颜色(基本颜色,例如字体颜色和背景颜色)
  • 文字大小:5 种不同的字体大小可供选择
  • 字体:Courier new 或 Monospace
  • 复制设置:在这里,您可以更改复制键盘快捷键,类似于大多数常见 Linux 终端模拟器中使用的快捷键。
  • 键盘:将 Meta 键映射到 Alt(默认情况下,Meta 为 ESC),并在某些操作系统中映射 Alt Gr 键。

配置 Shell 环境

作为在基于 Debian 的 Linux 计算机上运行 shell 的终端模拟器,您可以像在 Linux 中一样自定义 shell 环境。因此,每当创建新的登录 Shell 进程时,$HOME 中存在的所有配置文件(例如 .bashrc))都将从源代码中检索。

借助 Cloud Shell,您还可以在名为 .customize_environment 的特殊配置文件中指定每次启动 Cloud Shell 实例时要执行的操作。如需了解详情,请参阅环境自定义文档。

练习向 Cloud Shell 终端添加一些配置。转到 Cloud Shell 终端并克隆以下示例代码库:

git clone https://gitlab.com/javiercanadillas/cloud-code-getting-started.git

此代码库包含您可能想要配置 Cloud Shell 的两个主要事件的示例:

  • 每当 Cloud Shell 实例启动时:系统会读取 $HOME/.customize_environment 文件。此进程的执行日志可在 /var/log/customize_environment 中找到,系统将在成功执行后创建一个 /google/devshell/customize_environment_done
  • 每当启动新的 shell 进程时(新窗口、新标签页...);系统会读取常规 bash shell 配置文件

请按照以下步骤进行练习:

  1. 执行以下命令,启动代码库提供的自定义设置:
cd cloud-code-getting-started
source set_env_cust.sh

这会设置并启用上述两个自定义选项。

  1. 请注意新的 shell 提示符。源自 .bash_profile 文件的 bash 脚本已配置这个新提示,该提示比默认提示短,并包含基本 Git 信息,例如已检出的分支或 Git 状态。
  2. cloudshell edit 命令现在有一个更简短的新 code 别名。您可以使用它来查看 .bash_profile 文件的内容:
code $HOME/.bash_profile
  1. 使用新安装的 bat 命令查看 .customize_environment 文件的内容:
bat $HOME/.customize_environment

bat 是热门 Unix 工具猫的增强版本。每当启动新的 Cloud Shell 机器时,bat 输出都会显示在这里,用于重新安装 hey(一种负载测试工具)的 apt install 命令。

  1. 点击 Cloud Shell 菜单(右上角的三个点)并选择重启,测试一切是否正常运行。

这样,您就可以模拟 Cloud Shell 超时和实例重新创建过程,确保各项配置正确无误。

自定义 Cloud Shell 容器映像

通过此自定义选项,您可以创建一个 Docker 映像,该映像可用作具有额外软件包和自定义配置的自定义 Cloud Shell 环境。生成的映像将启动一个完全临时的 Cloud Shell 实例,因此 Cloud Shell 虚拟机和与其关联的 $HOME 目录都不会保留。但是,在需要向第三方提供特定于函数的 Cloud Shell 实例,以便他们能够以最高效的方式执行特定任务的用例中,创建此映像将非常有用。

您将在用于启动 Cloud Shell 的新映像中烘焙更改,而不是像上一部分那样自定义环境。这有明显的优势,因为您的自定义 Cloud Shell 启动速度更快。

创建新的 Cloud Shell 映像

  1. 在 Cloud Shell 终端中输入内容,开始创建 Cloud Shell 容器映像:
cloudshell env create-custom-image custom-cloud-shell
cd custom-cloud-shell

这会在您的 Cloud Shell 中创建一个新目录,并创建一个同名的新 Cloud Source Repositories 代码库来托管您的代码。它还会在 $HOME/custom-cloud-shell/ directory 中克隆一个示例 Dockerfile

  1. RUN apt install -y hey 行添加到 Dockerfile 文件的最后一行:
echo "RUN apt install -y hey" >> $HOME/custom-cloud-shell/Dockerfile

这会设置与 .customize_environment 中相同的自定义设置,但改为内置在容器中。

  1. 在本地构建映像:
cloudshell env build-local
  1. 通过执行以下命令来测试新映像:
cloudshell env run

现在,您将位于映像内的 shell 中。

  1. 运行以下命令,以测试是否已安装 hey 命令:
hey
  1. 完成后,输入 exit 退出容器:
exit
  1. 将更改推送到 Cloud Source Repository,并将映像推送到 Container Registry:
git commit -a -m "Initial commit"
git push origin master
cloudshell env push

测试新映像

  1. 将映像设为公开,以便您使用:
gsutil iam ch allUsers:objectViewer $(gsutil ls)
  1. 生成一个网址,用于测试已发布的 Cloud Shell 自定义实例:
echo "https://ssh.cloud.google.com/cloudshell/editor?cloudshell_image=gcr.io/$GOOGLE_CLOUD_PROJECT/custom-cloud-shell"
  1. 复制输出网址并将其粘贴到新的浏览器标签页中,即可打开 Cloud Shell 自定义实例。请注意,当您访问实例时,会看到横幅,指示您正在以完全暂存模式运行:

bc091a4c33649aa9.png

  1. 再次运行 hey 命令测试映像
hey
  1. 完成后,exit 临时 Cloud Shell 实例,返回打开常规 Cloud Shell 的标签页,然后点击重新连接

使用 SSH 远程访问 Cloud Shell

您还可以从本地计算机远程使用 Cloud Shell 功能。这通常涉及两个不同的用例:

  • 从本地终端通过 SSH 连接到 Cloud Shell 机器
  • 在本地装载 Cloud Shell 远程 $HOME 目录。

为此,您需要在本地安装 Google Cloud SDK。您还需要使用项目 ID 和您所使用的特定凭据对其进行配置。

在本地计算机中运行的终端模拟器执行以下步骤:

  1. 设置 GCP 项目 ID,然后使用与 Cloud Shell 所在的 Cloud 组织对应的凭据登录。
gcloud config set project <your project id>
gcloud auth login
  1. 通过 SSH 连接到远程 Cloud Shell 机器:
gcloud cloud-shell ssh --authorize-session

您现在位于 Cloud Shell 中,但使用的是本地终端模拟器的功能和配置。如果您使用的应用支持 Tmux,则可以利用进一步的集成来获得更好的远程体验。

从本地机器装载 Cloud Shell 主目录

虽然能够通过 SSH 连接到远程 Cloud Shell 实例固然很好,但让本地 IDE 能够访问远程 Cloud Shell $HOME 目录会更好。这样,您就可以将之前演示的 SSH 访问与在本地修改远程代码的功能相结合。

为此,请先在本地机器上创建一个装载点:

mkdir $HOME/cloudshell

这是您的 Cloud Shell 的装载目录。现在,如需进行装载,请确保已启动 Cloud Shell 实例,然后输入您的本地终端:

$(gcloud cloud-shell get-mount-command $HOME/cloudshell)
cd $HOME/cloudshell

这将获取您在本地装载并装载 Cloud Shell 时需要发出的装载命令。您将看到已装载在本地机器中的 Cloud Shell 主目录的内容。

现在,您可以在本地打开 VSCode 等 IDE,并在云端打开一个远程工作区。同时,通过使用对 Cloud Shell 的 SSH 访问,您可以在 IDE 内打开终端窗格,从而将远程终端集成到本地 IDE。

5. 使用 Cloud Code

Cloud Code 是 Google 开发的一款插件,可让开发者更高效地使用基于云的工具。它可在多个 IDE 和代码编辑器(例如 VSCode 和 JetBrains 产品)中使用,为方便起见,系统已默认将其集成到 Cloud Shell Editor 中。Cloud Code 包含大量方便开发者使用的功能,您将在后续步骤中加以练习。

在 Cloud Shell Editor 中找到 Cloud Code

使用“快速访问”按钮

找到编辑器左侧窗格中显示的以下四个按钮:

de0b6c69b590d21b.png

借助这些菜单项,您可以直接从 Cloud Shell Editor 轻松访问和配置 GCP 服务。

在本实验中,您的重点是 Kubernetes 集群

使用状态栏

通过 Cloud Shell Editor 界面公开了 Cloud Cloud 的另外两个相关部分。您可以在编辑器的下方栏中看到这两项信息:

f04c703ff45b05a.png

  • &lt;&gt;Cloud Code:点击此处即可查看您将在本教程中使用的快速操作菜单:58a3f8940f6263ae
  • 控制 minikube:这样,您就可以通过启动或停止集群等基本操作来控制本地 kubernetes 模拟器 minikube。

创建 Minikube 实例

点击该按钮,立即创建一个 Minikube 实例。

540da42dd52e1469

使用 Cloud Code 创建 GKE 集群

  1. 点击左侧的 Cloud Code - Kubernetes Clusters 图标 ( 5ffab5cb541da6)。您会看到左侧出现一个名为 CLOUD CODE - KUBERNETES: CLUSTERS(云代码 - KUBERNETES:集群)的新窗格。
  2. 点击 CLOUD CODE - KUBERNETES: CLUSTERS(云代码 - KUBERNETES:集群)旁边的 + 按钮,然后选择 Google Kubernetes Engine(请注意,您也可以选择其他选项,例如您之前启动的 Minikube):

e7a81607c1bc7c55.png

  1. 点击创建新的 GKE 集群。此选项将在右侧加载一个新窗格,您可以在其中输入其他信息以快速创建开发集群。按照面板中的说明操作,并输入以下信息:
  • 选择 Autopilot
  • 选择您所在的区域 (europe-west-1)
  • 将您的集群命名为“dev
  1. 点击创建集群按钮。这将创建一个新的 Autopilot 集群。

集群创建过程最多可能需要 55 分钟。因此,在创建集群时,请继续深入了解 Cloud Code Kubernetes 窗格。

探索 Cloud Code Kubernetes 窗格

您之前创建了一个 Minikube 集群。准备就绪后,此集群将显示在 Cloud Code Kubernetes 窗格中,名称为 minikube

b654e618f78de3b3.png

该集群在界面中将显示为活跃状态。此设置与命令行中的当前 Kubernetes 上下文同步。.

您可以在 Cloud Code Kubernetes 窗格中看到以下内容:

  • 默认的 KubeConfig 文件:Cloud Code 会为您的用户读取 ~/.kube/config 文件,并使用该文件连接到在其中配置的 Kubernetes 集群,以便您轻松浏览这些文件。您可以根据需要修改 Kubeconfig 文件,方法是将鼠标悬停在 Default Kubeconfig 行上,然后点击旁边带有传出箭头的方形。
  • 已注册集群中不同对象的可浏览渲染:在本例中,您可以看到之前创建的 minikube Minikube 集群及其上下文、命名空间和节点。接下来展开树的一些节点。由于您尚未部署任何应用,因此尚无任何 Pod。

新的 GKE 集群启动并运行后,会与 minikube Minikube 集群一起显示在左侧窗格中。请注意,您可以右键点击任何集群,使其处于“活动”状态为您可能启动的任何 Cloud Code 操作选择集群:

8e4306c3ce707ef8.png

6. 恭喜!

恭喜,您已完成此 Codelab!

所学内容

  • 浏览并熟悉了 Cloud Shell 的主要功能
  • 使用不同的 Cloud Shell 使用模式练习
  • 自定义您的 Cloud Shell 环境以供高级使用
  • 熟悉 Cloud Code 选项和功能
  • 查看了 Cloud Code for Kubernetes 应用的详细信息
  • 使用 Minikube 等本地模拟器