
Before you begin
- Labs create a Google Cloud project and resources for a fixed time
- Labs have a time limit and no pause feature. If you end the lab, you'll have to restart from the beginning.
- On the top left of your screen, click Start lab to begin
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 资源的命令行工具。
如果您连接成功,即表示您已通过身份验证,且当前项目会被设为您的 PROJECT_ID 环境变量所指的项目。输出内容中有一行说明了此会话的 PROJECT_ID:
gcloud
是 Google Cloud 的命令行工具。它已预先安装在 Cloud Shell 上,且支持 Tab 自动补全功能。
点击授权。
现在,输出的内容应如下所示:
输出:
输出:
输出示例:
gcloud
, in Google Cloud, refer to the gcloud CLI overview guide.
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
命令,看看访问一个安全端点时会发生什么情况:糟糕。
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
:添加来自云服务提供商的负载均衡器,将流量从服务转发到其中的节点接下来您将学习如何执行以下操作:
您必须先创建可处理 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 开发了一个包含多个服务的应用。利用通过本实验学到的知识,您可以使用 Deployment 和 Service 的集合,在 Kubernetes 上部署复杂的应用。
…可帮助您充分利用 Google Cloud 技术。我们的课程会讲解各项技能与最佳实践,可帮助您迅速上手使用并继续学习更深入的知识。我们提供从基础到高级的全方位培训,并有点播、直播和虚拟三种方式选择,让您可以按照自己的日程安排学习时间。各项认证可以帮助您核实并证明您在 Google Cloud 技术方面的技能与专业知识。
上次更新手册的时间:2024 年 4 月 29 日
上次测试实验的时间:2024 年 4 月 29 日
版权所有 2025 Google LLC 保留所有权利。Google 和 Google 徽标是 Google LLC 的商标。其他所有公司名和产品名可能是其各自相关公司的商标。
此内容目前不可用
一旦可用,我们会通过电子邮件告知您
太好了!
一旦可用,我们会通过电子邮件告知您
One lab at a time
Confirm to end all existing labs and start this one