GSP233
概览
在 Terraform 中,“提供方”是对上游 API 的逻辑抽象。本实验将向您展示如何设置 Kubernetes 集群,并在其中部署负载均衡器类型的 NGINX Service。
目标
在本实验中,您将学习如何执行以下任务:
- 使用 Terraform 部署 Kubernetes 集群以及 Service。
前提条件
对于本实验,您应该具备以下方面的经验:
- 熟悉 Kubernetes Service
- 熟悉
kubectl CLI。
设置和要求
点击“开始实验”按钮前的注意事项
请阅读以下说明。实验是计时的,并且您无法暂停实验。计时器在您点击开始实验后即开始计时,显示 Google Cloud 资源可供您使用多长时间。
此实操实验可让您在真实的云环境中开展实验活动,免受模拟或演示环境的局限。为此,我们会向您提供新的临时凭据,您可以在该实验的规定时间内通过此凭据登录和访问 Google Cloud。
为完成此实验,您需要:
- 能够使用标准的互联网浏览器(建议使用 Chrome 浏览器)。
注意:请使用无痕模式(推荐)或无痕浏览器窗口运行此实验。这可以避免您的个人账号与学生账号之间发生冲突,这种冲突可能导致您的个人账号产生额外费用。
注意:请仅使用学生账号完成本实验。如果您使用其他 Google Cloud 账号,则可能会向该账号收取费用。
如何开始实验并登录 Google Cloud 控制台
-
点击开始实验按钮。如果该实验需要付费,系统会打开一个对话框供您选择支付方式。左侧是“实验详细信息”窗格,其中包含以下各项:
- “打开 Google Cloud 控制台”按钮
- 剩余时间
- 进行该实验时必须使用的临时凭据
- 帮助您逐步完成本实验所需的其他信息(如果需要)
-
点击打开 Google Cloud 控制台(如果您使用的是 Chrome 浏览器,请右键点击并选择在无痕式窗口中打开链接)。
该实验会启动资源并打开另一个标签页,显示“登录”页面。
提示:将这些标签页安排在不同的窗口中,并排显示。
注意:如果您看见选择账号对话框,请点击使用其他账号。
-
如有必要,请复制下方的用户名,然后将其粘贴到登录对话框中。
{{{user_0.username | "<用户名>"}}}
您也可以在“实验详细信息”窗格中找到“用户名”。
-
点击下一步。
-
复制下面的密码,然后将其粘贴到欢迎对话框中。
{{{user_0.password | "<密码>"}}}
您也可以在“实验详细信息”窗格中找到“密码”。
-
点击下一步。
重要提示:您必须使用实验提供的凭据。请勿使用您的 Google Cloud 账号凭据。
注意:在本实验中使用您自己的 Google Cloud 账号可能会产生额外费用。
-
继续在后续页面中点击以完成相应操作:
- 接受条款及条件。
- 由于这是临时账号,请勿添加账号恢复选项或双重验证。
- 请勿注册免费试用。
片刻之后,系统会在此标签页中打开 Google Cloud 控制台。
注意:如需访问 Google Cloud 产品和服务,请点击导航菜单,或在搜索字段中输入服务或产品的名称。
激活 Cloud Shell
Cloud Shell 是一种装有开发者工具的虚拟机。它提供了一个永久性的 5GB 主目录,并且在 Google Cloud 上运行。Cloud Shell 提供可用于访问您的 Google Cloud 资源的命令行工具。
-
点击 Google Cloud 控制台顶部的激活 Cloud Shell
。
-
在弹出的窗口中执行以下操作:
- 继续完成 Cloud Shell 信息窗口中的设置。
- 授权 Cloud Shell 使用您的凭据进行 Google Cloud API 调用。
如果您连接成功,即表示您已通过身份验证,且项目 ID 会被设为您的 Project_ID 。输出内容中有一行说明了此会话的 Project_ID:
Your Cloud Platform project in this session is set to {{{project_0.project_id | "PROJECT_ID"}}}
gcloud 是 Google Cloud 的命令行工具。它已预先安装在 Cloud Shell 上,且支持 Tab 自动补全功能。
- (可选)您可以通过此命令列出活跃账号名称:
gcloud auth list
- 点击授权。
输出:
ACTIVE: *
ACCOUNT: {{{user_0.username | "ACCOUNT"}}}
To set the active account, run:
$ gcloud config set account `ACCOUNT`
- (可选)您可以通过此命令列出项目 ID:
gcloud config list project
输出:
[core]
project = {{{project_0.project_id | "PROJECT_ID"}}}
注意:如需查看在 Google Cloud 中使用 gcloud 的完整文档,请参阅 gcloud CLI 概览指南。
Kubernetes Service
Service 是对集群中运行的一组 Pod 的逻辑分组。Service 是一种“轻量级”资源类型,可在集群中大量运行。Kubernetes Service 可以高效地为微服务架构提供支持。
Service 可提供在整个集群进行了标准化的重要功能:负载均衡、应用间服务发现,以及支持零停机时间应用部署的功能。
每个 Service 都包含一个 pod 标签查询,用于定义哪些 pod 将为该 Service 处理数据。此标签查询通常会匹配由一个或多个复制控制器创建的 pod。通过使用部署软件调用 Kubernetes API 来更新 Service 的标签查询,可实现强大的路由方案。
为什么选择 Terraform?
虽然您可以使用 kubectl 或类似的 CLI 工具(通过 API 调用)来管理 YAML 文件中描述的所有 Kubernetes 资源,但使用 Terraform 进行编排具有以下优势:
-
统一语言 - 您可以使用同一配置语言来预配 Kubernetes 基础设施,并将应用部署到其中。
-
漂移检测 - 通过
terraform plan,您可以随时查看特定时间的实际情况与您打算应用的配置之间的差异。
-
全生命周期管理 - Terraform 不仅可以在初始阶段创建资源,还提供了单个命令来创建、更新和删除跟踪的资源,而无需通过检查 API 来识别这些资源。
-
同步反馈 - 虽然异步行为通常很有用,但有时会适得其反,因为用户需要自行判断操作结果(操作失败,或所创建资源的详细信息)。例如,在负载均衡器完成预配之后,您才能获取其 IP/主机名;在此之前,您无法创建指向该地址的任何 DNS 记录。
-
关系图 - Terraform 能够理解不同资源之间的关系,这有助于进行调度。例如,在 Kubernetes 集群尚未创建之前,Terraform 不会尝试在该集群中创建 Service。
任务 1. 克隆示例代码
- 在 Cloud Shell 中,首先使用以下命令克隆示例代码:
gcloud storage cp -r gs://spls/gsp233/* .
- 使用以下命令前往
tf-gke-k8s-service-lb 目录:
cd tf-gke-k8s-service-lb
任务 2. 了解代码
- 运行以下命令以查看
main.tf 文件的内容:
cat main.tf
输出示例:
...
variable "region" {
type = string
description = "Region for the resource."
}
variable "location" {
type = string
description = "Location represents region/zone for the resource."
}
variable "network_name" {
default = "tf-gke-k8s"
}
provider "google" {
region = var.region
}
resource "google_compute_network" "default" {
name = var.network_name
auto_create_subnetworks = false
}
resource "google_compute_subnetwork" "default" {
name = var.network_name
ip_cidr_range = "10.127.0.0/20"
network = google_compute_network.default.self_link
region = var.region
private_ip_google_access = true
}
...
- 为
region、zone 和 network_name 定义了变量。这些变量将用于创建 Kubernetes 集群。
- 借助 Google Cloud 提供方,我们可以在此项目中创建资源。
- 代码中定义了多个资源,用于创建相应的网络和集群。
- 最后,运行
terraform apply 后,您会看到相应的输出结果。
- 运行以下命令以查看
k8s.tf 文件的内容:
cat k8s.tf
输出示例:
provider "kubernetes" {
version = "~> 1.10.0"
host = google_container_cluster.default.endpoint
token = data.google_client_config.current.access_token
client_certificate = base64decode(
google_container_cluster.default.master_auth[0].client_certificate,
)
client_key = base64decode(google_container_cluster.default.master_auth[0].client_key)
cluster_ca_certificate = base64decode(
google_container_cluster.default.master_auth[0].cluster_ca_certificate,
)
}
resource "kubernetes_namespace" "staging" {
metadata {
name = "staging"
}
}
resource "google_compute_address" "default" {
name = var.network_name
region = var.region
}
resource "kubernetes_service" "nginx" {
metadata {
namespace = kubernetes_namespace.staging.metadata[0].name
name = "nginx"
}
spec {
selector = {
run = "nginx"
}
session_affinity = "ClientIP"
port {
protocol = "TCP"
port = 80
target_port = 80
}
type = "LoadBalancer"
load_balancer_ip = google_compute_address.default.address
}
}
resource "kubernetes_replication_controller" "nginx" {
metadata {
name = "nginx"
namespace = kubernetes_namespace.staging.metadata[0].name
labels = {
run = "nginx"
}
}
spec {
selector = {
run = "nginx"
}
template {
container {
image = "nginx:latest"
name = "nginx"
resources {
limits {
cpu = "0.5"
memory = "512Mi"
}
requests {
cpu = "250m"
memory = "50Mi"
}
}
}
}
}
}
output "load-balancer-ip" {
value = google_compute_address.default.address
}
- 该脚本使用 Terraform 配置 Kubernetes 提供方,从而创建 service、namespace 和 replication_controller 资源。
- 该脚本会返回一个
nginx Service IP 作为输出。
任务 3. 初始化环境并安装依赖项
terraform init 命令用于初始化包含 Terraform 配置文件的工作目录。
此命令会执行几个不同的初始化步骤,以便准备好工作目录以供使用。您可以随时运行此命令,以使工作目录与配置中的更改保持同步:
- 运行
terraform init 命令:
terraform init
输出示例:
...
* provider.google: version = "~> 3.8.0"
* provider.kubernetes: version = "~> 1.10.0"
Terraform has been successfully initialized!
您现在可以开始使用 Terraform 了。尝试运行 `terraform plan`,查看基础设施是否需要进行一些更改。现在,所有 Terraform 命令应该都可以正常运行了。
如果您更改或设置了 Terraform 的模块或后端配置,请重新运行此命令来重新初始化工作目录。如果您忘记了这一步骤,其他命令会自动检测并在必要时提醒您重新初始化。
- 运行
terraform apply 命令;它会应用所需的更改,以达到配置所定义的预期状态:
terraform apply -var="region={{{ project_0.default_region | "Region to be allocated" }}}" -var="location={{{ project_0.default_zone | "Zone to be allocated" }}}"
-
查看 Terraform 的操作,并检查将创建的资源。
-
准备就绪后,输入 yes 以开始执行 Terraform 操作。
完成后,您应该会看到类似如下所示的输出。
输出示例:
Apply complete! Resources: 7 added, 0 changed, 0 destroyed.
Outputs:
cluster_name = tf-gke-k8s
cluster_region = "{{{project_0.default_region|REGION}}}"
cluster_zone = "{{{project_0.default_region|ZONE}}}"
load-balancer-ip = 35.233.177.223
network = https://www.googleapis.com/compute/beta/projects/qwiklabs-gcp-5438ad3a5e852e4a/global/networks/tf-gke-k8s
subnetwork_name = tf-gke-k8s
验证 Terraform 创建的资源
- 在控制台中,前往导航菜单 > Kubernetes Engine。
- 点击 tf-gke-k8s 集群并查看其配置。
- 在左侧面板中,点击 Gateway、Service 和 Ingress,然后检查
nginx Service 状态。
- 点击端点 IP 地址,在新浏览器标签页中打开
Welcome to nginx! 页面。

点击检查我的进度,验证您已完成的任务。如果您已成功使用 Terraform 部署基础设施,则会看到一个评估分数。
使用 Terraform 部署基础设施
恭喜!
在本实验中,您使用 Terraform 完成了 Kubernetes 集群的初始化、规划与部署,并创建了相应的 Service。
后续步骤/了解详情
前往社区了解其他人是如何使用 Terraform 的。
Google Cloud 培训和认证
…可帮助您充分利用 Google Cloud 技术。我们的课程会讲解各项技能与最佳实践,可帮助您迅速上手使用并继续学习更深入的知识。我们提供从基础到高级的全方位培训,并有点播、直播和虚拟三种方式选择,让您可以按照自己的日程安排学习时间。各项认证可以帮助您核实并证明您在 Google Cloud 技术方面的技能与专业知识。
上次更新手册的时间:2026 年 3 月 10 日
上次测试实验的时间:2026 年 3 月 10 日
版权所有 2026 Google LLC 保留所有权利。Google 和 Google 徽标是 Google LLC 的商标。其他所有公司名和产品名可能是其各自相关公司的商标。