
准备工作
- 实验会创建一个 Google Cloud 项目和一些资源,供您使用限定的一段时间
- 实验有时间限制,并且没有暂停功能。如果您中途结束实验,则必须重新开始。
- 在屏幕左上角,点击开始实验即可开始
Create a Kubernetes cluster and launch Nginx container
/ 25
Create Monolith pods and service
/ 25
Allow traffic to the monolith service on the exposed nodeport
/ 5
Adding Labels to Pods
/ 20
Creating Deployments (Auth, Hello and Frontend)
/ 25
Kubernetes 是一个开源项目(项目网站为 kubernetes.io),可在从笔记本电脑到高可用性多节点集群、从公有云到本地部署、从虚拟机到裸金属等众多不同环境中运行。
在本实验中,借助 Kubernetes Engine 这样的托管式环境,您可以把全部精力放在体验 Kubernetes 上,不必分心去设置底层基础设施。Kubernetes Engine 是一个可用于部署容器化应用的托管式环境。它融合了提高开发者效率、有效利用资源、自动化运营和开源灵活性等方面的最新创新成果,能够让您更快进入市场。
在本实验中,您将学习如何完成以下操作:
kubectl
部署和管理 Docker 容器。请阅读以下说明。实验是计时的,并且您无法暂停实验。计时器在您点击开始实验后即开始计时,显示 Google Cloud 资源可供您使用多长时间。
此实操实验可让您在真实的云环境中开展实验活动,免受模拟或演示环境的局限。为此,我们会向您提供新的临时凭据,您可以在该实验的规定时间内通过此凭据登录和访问 Google Cloud。
为完成此实验,您需要:
点击开始实验按钮。如果该实验需要付费,系统会打开一个对话框供您选择支付方式。左侧是“实验详细信息”窗格,其中包含以下各项:
点击打开 Google Cloud 控制台(如果您使用的是 Chrome 浏览器,请右键点击并选择在无痕式窗口中打开链接)。
该实验会启动资源并打开另一个标签页,显示“登录”页面。
提示:将这些标签页安排在不同的窗口中,并排显示。
如有必要,请复制下方的用户名,然后将其粘贴到登录对话框中。
您也可以在“实验详细信息”窗格中找到“用户名”。
点击下一步。
复制下面的密码,然后将其粘贴到欢迎对话框中。
您也可以在“实验详细信息”窗格中找到“密码”。
点击下一步。
继续在后续页面中点击以完成相应操作:
片刻之后,系统会在此标签页中打开 Google Cloud 控制台。
Cloud Shell 是一种装有开发者工具的虚拟机。它提供了一个永久性的 5GB 主目录,并且在 Google Cloud 上运行。Cloud Shell 提供可用于访问您的 Google Cloud 资源的命令行工具。
点击 Google Cloud 控制台顶部的激活 Cloud Shell 。
在弹出的窗口中执行以下操作:
如果您连接成功,即表示您已通过身份验证,且项目 ID 会被设为您的 Project_ID
gcloud
是 Google Cloud 的命令行工具。它已预先安装在 Cloud Shell 上,且支持 Tab 自动补全功能。
输出:
输出:
gcloud
的完整文档,请参阅 gcloud CLI 概览指南。
gcloud container clusters get-credentials io
命令重新进行身份验证。
如需获取代码,请从 Google Cloud Storage 存储桶复制示例代码。
该示例的布局如下:
现在您已经有了代码,接下来就可以拿 Kubernetes 试手了!
要开始使用 Kubernetes,最简单的方法就是使用 kubectl create
命令。
Kubernetes 已经创建了一个 Deployment 对象,我们稍后再介绍 Deployment 对象,目前您只需要了解一点,Deployment 对象可以使 Pod 保持正常运行状态,即便是运行 Pod 的节点发生故障,也不会受到影响。
在 Kubernetes 中,所有容器都在 Pod 中运行。
kubectl get pods
命令查看正在运行的 nginx 容器:kubectl expose
命令向 Kubernetes 外部公开该容器:刚刚发生了什么?Kubernetes 在后台创建了一个具有公共 IP 地址的外部负载均衡器。访问这个公共 IP 地址的任何客户端都会被路由到服务背后的 Pod。在本例中,这个 Pod 就是 nginx Pod。
kubectl get services
命令列出服务:ExternalIP
字段可能需要几秒钟时间。这很正常,只需每隔几秒钟重新运行一次 kubectl get services
命令,直至字段中填充数据。
成功了!Kubernetes 通过 kubectl
run 和 expose 命令,为用户提供了开箱即用又简单易用的工作流。
点击下方的检查我的进度,以检查您的实验进度。如果您成功创建了 Kubernetes 集群并部署了 Nginx 容器,就会看到一个评估分数。
我们已经简单了解了 Kubernetes,接下来深入探索一下每个组件和抽象。
Pod 是 Kubernetes 的核心。
Pod 代表并保存着由一个或多个容器构成的集合。通常情况下,如果您的多个容器彼此之间存在硬性依赖关系,则可以将它们封装到一个 Pod 中。
以下示例展示了一个包含单体式应用和 nginx 容器的 Pod。
Pod 中还包含一系列卷。卷就是数据磁盘,其存在时间与 Pod 一样长,可供该 Pod 中的容器使用。Pod 为其内容提供了一个共享命名空间,这就意味着我们的示例 Pod 中的两个容器可以互相通信,并且还共享挂接的卷。
所有 Pod 还共享一个网络命名空间。这意味着每个 Pod 有一个 IP 地址。
接下来,我们更深入地探索 Pod。
Pod 可通过使用 Pod 配置文件来创建。请花些时间了解单体式应用 Pod 配置文件。
输出显示了打开的配置文件:
这里有几点需要注意:
kubectl
命令创建单体式应用 Pod:kubectl get pods
命令列出默认命名空间内运行的所有 Pod:kubectl describe
命令获得有关单体式应用 Pod 的更多信息:您会看到有关单体式应用 Pod 的大量信息,包括 Pod IP 地址和事件日志。在进行问题排查时,会用到这些信息。
借助 Kubernetes,您只需在配置文件中描述 Pod 即可轻松创建 Pod,并且可以在 Pod 运行时查看其信息。至此,您已经具备了创建 Deployment 所需的全部 Pod 的能力!
默认情况下,系统会为 Pod 分配一个专用 IP 地址,从集群外部无法访问 Pod。使用 kubectl port-forward
命令将本地端口映射到单体式应用 Pod 内的一个端口。
打开第二个 Cloud Shell 终端。现在您有了两个终端,一个用来运行 kubectl port-forward
命令,另一个用来发出 curl
命令。
在第 2 个终端中,运行以下命令设置端口转发:
curl
与您的 Pod 交互:很好!您的容器返回了一条非常友好的问候:“hello”。
curl
命令,看看访问一个安全端点时会发生什么情况:糟糕。
password
登录。登录会引发系统显示一个 JWT 令牌。
在系统提示输入主机密码时,再次输入超级机密密码 password
。
使用以下命令复制令牌,随后通过 curl
使用该令牌访问该安全端点:
此时,您应该会收到应用返回的一条响应,表明一切重归正常。
kubectl logs
命令查看单体式应用
Pod 的日志。-f
标志获得实时日志流:curl
与单体式应用交互,则可以看到日志更新(在第 3 个终端内):kubectl exec
命令在单体式应用 Pod 内运行交互式 shell。如果您想在容器内进行问题排查,这会非常方便:ping
命令测试外部连接:您可以看到,与 Pod 交互就像使用 kubectl
命令一样轻松。如果您需要远程访问容器,或者需要获取登录 shell,Kubernetes 提供了执行这些操作所需的一切。
Pod 的性质决定了它们无法持久存在。Pod 可能会出于多种原因停止或启动,比如活跃度或就绪性检查失败,而这会造成问题。
如果您想与一组 Pod 通信,会发生什么情况?在重新启动后,它们的 IP 地址可能会发生变化。
此时就要用到 Service。Service 为 Pod 提供了稳定的端点。
Service 使用标签确定它们在哪个 Pod 上运行。如果 Pod 具有正确的标签,Service 会自动选择并公开 Pod。
Service 针对一组 Pod 所提供的访问权限级别取决于 Service 的类型。Service 目前有三种类型:
ClusterIP
(内部)是默认类型。此 Service 仅在集群内部可见。NodePort
:为集群中的每个节点分配一个可从外部访问的 IP 地址。LoadBalancer
:添加来自云服务提供商的负载均衡器,将流量从 Service 转发到其中的节点。接下来您将学习如何执行以下操作:
您必须先创建一个可处理 https 流量的安全 Pod,然后才能创建 Service。
~/orchestrate-with-kubernetes/kubernetes
目录:现在,您有了一个安全 Pod,可以对外公开 secure-monolith Pod 了。为此,您需要创建一个 Kubernetes Service。
(输出):
* 有一个选择器可用于自动查找并公开带有“app: monolith”和“secure: enabled”标签的所有 Pod。
* 您必须公开 nodeport,这样才能将外部流量从 31000 端口转发到 nginx(443 端口)。kubectl create
命令,通过单体式应用服务配置文件创建单体式应用 Service:(输出):
点击下方的检查我的进度,以检查您的实验进度。如果您成功创建了单体式应用 Pod 和 Service,就会看到一个评估分数。
您是使用端口公开单体式应用 Service 的。因此,如果有另外一个应用尝试绑定到您的某个服务器上的 31000 端口,就有可能发生端口冲突。
通常情况下,Kubernetes 会处理此类端口分配。在本实验中,您将选择一个端口,以便稍后可以更轻松地配置健康检查。
gcloud compute firewall-rules
命令,允许流量传输到公开的 nodeport 上的单体式应用 Service:点击下方的检查我的进度,以检查您的实验进度。如果您成功创建了一条防火墙规则,允许在 31000 端口上传输 TCP 流量,就会看到一个评估分数。
至此,我们已经设置好了一切,您应该能从集群外部访问 secure-monolith Service,而不需要使用端口转发。
curl
访问 secure-monolith Service:糟糕!超时了。哪里出问题了?
注意:现在来进行一次简短的知识测验。
请使用以下命令回答下面的问题:kubectl get services monolith
kubectl describe services monolith
问题:
提示:这与标签有关。您将在下一部分中解决此问题。
单体式应用 Service 目前没有端点。排查此类问题的方法之一是结合标签查询使用 kubectl get pods
命令。
请注意,此标签查询未显示任何结果。您似乎需要为 Pod 添加“secure=enabled”标签。
kubectl label
命令,为 secure-monolith Pod 添加缺失的 secure=enabled
标签。然后,您可以检查标签是否已更新。现在有一个端点了!
成功了!终于连接成功。
点击下方的检查我的进度,以检查您的实验进度。如果您成功为单体式应用 Pod 添加了标签,就会看到一个评估分数。
本实验的目标是帮您为在生产环境中扩缩和管理容器做好准备。这就要用到 Deployment。Deployment 是确保运行的 Pod 数量等于所需 Pod 数量(这个数量由用户指定)的声明式方法。
Deployment 的主要优势在于,它能抽离 Pod 管理中的低层级细节。在幕后,Deployment 使用副本集管理 Pod 的启动和停止。如果需要更新或扩缩 Pod,Deployment 会处理相应情况。在 Pod 出于某些原因发生故障时,Deployment 还能处理 Pod 的重启。
我们来看一个简单的例子:
Pod 与用于创建 Pod 的节点的生命周期相关联。在上面的例子中,节点 3 发生了故障(致使一个 Pod 随之停止)。您的 Deployment 创建了一个新 Pod,并在节点 2 上启动了这个 Pod,因此您不必手动创建新 Pod 并为其寻找节点。
这真的是太棒了!
下面我们将您学到的 Pod 和 Service 相关知识整合起来,使用 Deployment 将单体式应用拆分为较小的 Service。
您需要将该单体式应用拆分为三个独立的部分:
您可以创建 Deployment 了(每个服务一个)。随后,您将为 auth Deployment 和 hello Deployment 定义内部服务,为 frontend Deployment 定义外部服务。完成之后,您就可与微服务进行交互,就像与单体式应用交互一样,不同之处在于,现在每一个部分都可以独立扩缩和部署!
(输出)
该 Deployment 会创建 1 个副本,并且您使用的是 auth 容器的 2.0.0 版本。
当您运行 kubectl create
命令创建 auth Deployment 时,该命令将生成一个与 Deployment 清单中的数据相符的 Pod。这表示您可以通过更改 Replicas 字段中指定的数值来调整 Pod 数量。
kubectl create
命令创建 auth Service:EXTERNAL-IP
列的状态为 pending,请再次运行上述命令。此时,您会收到 hello 响应!
点击下方的检查我的进度,以检查您的实验进度。如果您成功创建了 auth Deployment、hello Deployment 和 frontend Deployment,就会看到一个评估分数。
恭喜!您已经使用 Kubernetes 开发了一个包含多个服务的应用。利用通过本实验学到的知识,您可以使用 Deployment 和 Service 的集合,在 Kubernetes 上部署复杂的应用。
…可帮助您充分利用 Google Cloud 技术。我们的课程会讲解各项技能与最佳实践,可帮助您迅速上手使用并继续学习更深入的知识。我们提供从基础到高级的全方位培训,并有点播、直播和虚拟三种方式选择,让您可以按照自己的日程安排学习时间。各项认证可以帮助您核实并证明您在 Google Cloud 技术方面的技能与专业知识。
上次更新手册的时间:2025 年 3 月 20 日
上次测试实验的时间:2024 年 4 月 29 日
版权所有 2025 Google LLC 保留所有权利。Google 和 Google 徽标是 Google LLC 的商标。其他所有公司名和产品名可能是其各自相关公司的商标。
此内容目前不可用
一旦可用,我们会通过电子邮件告知您
太好了!
一旦可用,我们会通过电子邮件告知您
一次一个实验
确认结束所有现有实验并开始此实验