将应用部署到 GKE 集群
在本快速入门中,您需要将一个示例 Web 服务器容器化应用部署到 Google Kubernetes Engine (GKE) 集群。您将了解如何创建集群以及如何将应用部署到集群以供用户访问。
本页面适用于预配和配置云资源以及部署应用和服务的运维人员和开发者。如需详细了解我们在 Google Cloud内容中提及的常见角色和示例任务,请参阅常见的 GKE Enterprise 用户角色和任务。
在阅读本页面内容之前,请确保您熟悉 Kubernetes。
准备工作
请按照以下步骤启用 Kubernetes Engine API:- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Artifact Registry and Google Kubernetes Engine APIs.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Artifact Registry and Google Kubernetes Engine APIs.
启动 Cloud Shell
在本教程中,您将使用 Cloud Shell,这是一个用于管理Google Cloud上托管资源的 Shell 环境。
Cloud Shell 预安装有 Google Cloud CLI 和 kubectl 命令行工具。gcloud CLI 为 Google Cloud提供了主要的命令行界面,kubectl
则为针对 Kubernetes 集群运行命令提供了主要的行界面。
启动 Cloud Shell:
前往 Google Cloud 控制台。
在控制台的右上角,点击激活 Cloud Shell 按钮:
控制台下方的框架内会打开一个 Cloud Shell 会话。您可以使用此 shell 运行 gcloud
和 kubectl
命令。
在运行命令之前,请在 Google Cloud CLI 中使用以下命令设置默认项目:
gcloud config set project PROJECT_ID
将 PROJECT_ID
替换为您的项目 ID。
创建 GKE 集群
一个集群包含至少一个集群控制平面机器和多个称为“节点”的工作器机器。节点是运行 Kubernetes 进程的 Compute Engine 虚拟机 (VM) 实例,只有运行这些进程的虚拟机实例才能加入到集群中。您将应用部署到集群,该应用在节点上运行。
创建名为 hello-cluster
的 Autopilot 集群:
gcloud container clusters create-auto hello-cluster \
--location=us-central1
获取用于集群的身份验证凭据
创建集群后,您需要获取身份验证凭据才能与该集群交互:
gcloud container clusters get-credentials hello-cluster \
--location us-central1
此命令将 kubectl
配置为使用您创建的集群。
向集群部署一个应用
现在您已创建了一个集群,可以向其部署容器化应用了。在本快速入门中,您可以部署我们的 hello-app
示例 Web 应用。
GKE 使用 Kubernetes 对象创建和管理集群的资源。Kubernetes 提供了 Deployment 对象,用于部署 Web 服务器等无状态应用。Service 对象则用于定义从互联网访问您的应用时需要遵循的规则和负载均衡机制。
创建 Deployment
如需在集群中运行 hello-app
,您需要运行以下命令来部署应用:
kubectl create deployment hello-server \
--image=us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0
此 Kubernetes 命令 kubectl create deployment
会创建名为 hello-server
的 Deployment。此 Deployment 的 Pod 运行 hello-app
容器映像。
在此命令中:
--image
指定了要部署的容器映像。在本示例中,该命令会从 Artifact Registry 制品库us-docker.pkg.dev/google-samples/containers/gke/hello-app
中拉取示例映像。:1.0
指示要拉取的特定映像版本。如果您未指定版本,则系统会使用具有默认latest
标记的映像。
公开 Deployment
部署应用后,您需要将其公开到互联网,以便用户访问该应用。您可以通过创建 Service 来公开应用,这是一种 Kubernetes 资源,可以将您的应用公开给外部流量。
如需公开您的应用,请运行以下 kubectl expose
命令:
kubectl expose deployment hello-server \
--type LoadBalancer \
--port 80 \
--target-port 8080
传入 --type LoadBalancer
标志会为您的容器创建 Compute Engine 负载均衡器。--port
标志会初始化连接到互联网的公共端口 80,--target-port
标志会将流量路由到应用的端口 8080。
负载均衡器按 Compute Engine 的负载均衡器价格计费。
检查和查看应用
使用
kubectl get pods
检查正在运行的 Pod:kubectl get pods
您应该会看到一个
hello-server
Pod 正在您的集群上运行。使用
kubectl get service
检查hello-server
Service:kubectl get service hello-server
从此命令的输出结果的
EXTERNAL-IP
列中,复制 Service 的外部 IP 地址。在您的网络浏览器中使用外部 IP 地址及公开的端口查看应用:
http://EXTERNAL_IP
您刚刚向 GKE 部署了一个容器化 Web 应用。
如需采用以应用为中心的方式跟踪和整理 GKE 资源,您可以将资源作为 Service 和工作负载添加到 App Hub 应用。
如需详细了解 App Hub 支持的资源,请参阅支持的资源。
如需了解如何在项目中设置 App Hub,请参阅设置 App Hub。
清理
为避免因本页中使用的资源导致您的 Google Cloud 账号产生费用,请按照以下步骤操作。
运行
kubectl delete
以删除应用的 Service:kubectl delete service hello-server
此命令会删除您在公开 Deployment 时创建的 Compute Engine 负载均衡器。
运行
gcloud container clusters delete
以删除您的集群:gcloud container clusters delete hello-cluster \ --location us-central1
可选:hello-app
代码审核
hello-app
是一个 Web 服务器应用,由两个文件组成:main.go
和 Dockerfile
。
hello-app
打包为 Docker 容器映像。容器映像存储在任意 Docker 映像注册表(例如 Artifact Registry)中。我们在 us-docker.pkg.dev/google-samples/containers/gke/hello-app
的 Artifact Registry 代码库中托管 hello-app
。
main.go
main.go
是使用 Go 编程语言编写的一个 Web 服务器实现。该服务器会以一条“Hello, world!”消息响应任何 HTTP 请求。
Dockerfile
Dockerfile
用于描述您希望 Docker 构建的映像(包括其所有资源和依赖项),并指定应用应该公开的网络端口。如需详细了解此文件的工作方式,请参阅 Docker 文档中的 Dockerfile 参考。
后续步骤
- 详细了解如何创建集群。
- 详细了解 Kubernetes。
- 了解如何打包、托管和部署简单的 Web 服务器应用。
- 使用 Cloud Code for VS Code 或 Cloud Code for IntelliJ 部署 Kubernetes 应用。
- 了解如何将 Linux 应用升级为容器平台。