
准备工作
- 实验会创建一个 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 专为应用而打造。在本实验中,您将使用一个名为“app”的示例应用。
Kubernetes 是一个开源项目(项目网站为 kubernetes.io),可在从笔记本电脑到高可用性多节点集群、从公有云到本地部署、从虚拟机到裸金属等众多不同环境中运行。
在本实验中,借助 Kubernetes Engine 这样的托管式环境,您可以把全副精力放在 Kubernetes 的使用和体验上,而不必分心去设置底层基础设施。
在本实验中,您将学习如何完成以下操作:
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
命令重新进行身份验证。
该示例的布局如下:
现在您已经有了代码,接下来就可以拿 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 运行时轻松查看其信息。至此,您已经具备了创建部署所需的全部 Pod 的能力!
默认情况下,系统会为 Pod 分配一个专用 IP 地址,从集群外部无法访问 Pod。使用 kubectl port-forward
命令将本地端口映射到单体式应用 Pod 内的一个端口。
打开第二个 Cloud Shell 终端。现在您有了两个终端,一个用来运行 kubectl port-forward
命令,另一个用来发出 curl
命令。
在第 2 个终端中,运行以下命令设置端口转发:
curl
与您的 Pod 交互:没错!您的容器返回了一条非常友好的问候:“hello”。
curl
命令,看看访问一个安全端点时会发生什么情况:糟糕。
登录会引发系统显示一个 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
:添加来自云服务提供商的负载均衡器,将流量从服务转发到其中的节点接下来您将学习如何执行以下操作:
您必须先创建可处理 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 上的单体式应用服务:点击下方的检查我的进度,以检查您的实验进度。如果您成功创建了一条防火墙规则,允许在 31000 端口上传输 TCP 流量,就会看到一个评估分数。
至此,我们已经设置好了一切,您应该能从集群外部访问 secure-monolith 服务,而不需要使用端口转发。
curl
访问 secure-monolith 服务:糟糕!超时了。哪里出问题了?
注意:现在来进行一次简短的知识测验。
请使用以下命令回答下面的问题:kubectl get services monolith
kubectl describe services monolith
问题:
提示:这与标签有关。您将在下一部分中解决此问题。
单体式应用服务目前没有端点。排查此类问题的方法之一是结合标签查询使用 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 和 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 集群、如何使用 kubectl
部署和管理 Docker 容器,以及如何使用 Kubernetes 的 Deployment 和 Service 对象将应用分解成多个微服务。您还学会了如何与 Pod 和 Service 等对象交互,以及如何使用 Kubernetes 部署应用。现在,您可以使用一系列 Deployment 和 Service,在 Kubernetes 上部署复杂的应用了。
…可帮助您充分利用 Google Cloud 技术。我们的课程会讲解各项技能与最佳实践,可帮助您迅速上手使用并继续学习更深入的知识。我们提供从基础到高级的全方位培训,并有点播、直播和虚拟三种方式选择,让您可以按照自己的日程安排学习时间。各项认证可以帮助您核实并证明您在 Google Cloud 技术方面的技能与专业知识。
上次更新手册的时间:2024 年 2 月 5 日
上次测试实验的时间:2024 年 2 月 5 日
版权所有 2025 Google LLC 保留所有权利。Google 和 Google 徽标是 Google LLC 的商标。其他所有公司名和产品名可能是其各自相关公司的商标。
此内容目前不可用
一旦可用,我们会通过电子邮件告知您
太好了!
一旦可用,我们会通过电子邮件告知您
一次一个实验
确认结束所有现有实验并开始此实验