快速入门:将应用部署到 GKE 集群

将应用部署到 GKE 集群

在本快速入门中,您需要将一个简单的网络服务器容器化应用部署到 Google Kubernetes Engine (GKE) 集群。您将了解如何创建集群以及如何将应用部署到集群以供用户访问。

本快速入门假定您对 Kubernetes 具有基本的了解。

准备工作

请按照以下步骤启用 Kubernetes Engine API:
  1. 登录您的 Google Cloud 帐号。如果您是 Google Cloud 新手,请创建一个帐号来评估我们的产品在实际场景中的表现。新客户还可获享 $300 赠金,用于运行、测试和部署工作负载。
  2. 在 Google Cloud Console 中的项目选择器页面上,选择或创建一个 Google Cloud 项目

    转到“项目选择器”

  3. 确保您的 Cloud 项目已启用结算功能。了解如何检查项目是否已启用结算功能

  4. 启用 Artifact Registry and Google Kubernetes Engine API。

    启用 API

  5. 在 Google Cloud Console 中的项目选择器页面上,选择或创建一个 Google Cloud 项目

    转到“项目选择器”

  6. 确保您的 Cloud 项目已启用结算功能。了解如何检查项目是否已启用结算功能

  7. 启用 Artifact Registry and Google Kubernetes Engine API。

    启用 API

确保您拥有以下各项的可用配额

  • 您的集群所在区域中的 1 个 Compute Engine CPU。
  • 1 个使用中的 IP 地址。

如需检查可用配额,请使用 Cloud Console

启动 Cloud Shell

在本教程中,您将使用 Cloud Shell,这是一个用于管理 Google Cloud 上托管资源的 Shell 环境。

Cloud Shell 预安装有 Google Cloud CLIkubectl 命令行工具。gcloud CLI 为 Google Cloud 提供了主要的命令行界面,kubectl 则为 Kubernetes 集群运行命令提供了主要命令行界面。

启动 Cloud Shell:

  1. 转到 Google Cloud Console。

    Google Cloud Console

  2. 在控制台的右上角,点击激活 Cloud Shell 按钮:

控制台下方的框架内会打开一个 Cloud Shell 会话。您可以使用此 shell 运行 gcloudkubectl 命令。

配置 gcloud CLI 的默认设置

使用 gcloud CLI 来配置以下默认设置:默认项目计算可用区计算区域

您的项目具有项目 ID,它是项目的唯一标识符。首次创建项目时,您可以使用自动生成的项目 ID,也可以创建自己的项目 ID。

计算可用区是您的集群及其资源所在区域中的某个位置。例如,us-west1-aus-west 区域中的地区。计算区域是您的集群及其资源所在的区域(例如 us-west)。

配置这些默认设置可以更轻松地运行 gcloud 命令,因为 gcloud 要求您指定要在其中工作的项目和计算可用区。您还可以在 gcloud 命令中指定这些设置或使用 --project--zone--region--cluster 等标志替换默认设置。

在配置默认项目、可用区和区域后创建 GKE 资源时,这些资源会在该项目、可用区和区域中自动创建。

在 Cloud Shell 中,执行以下步骤:

  1. 设置默认项目:

    gcloud config set project PROJECT_ID
    

    PROJECT_ID 替换为您的项目 ID

  2. 设置默认可用区:

    gcloud config set compute/zone COMPUTE_ZONE
    

    COMPUTE_ZONE 替换为您的计算可用区,例如 us-west1-a

  3. 设置默认区域:

    gcloud config set compute/region COMPUTE_REGION
    

    COMPUTE_REGION 替换为您的计算区域,例如 us-west1

创建 GKE 集群

一个集群包含至少一台集群控制层面机器以及多台工作器机器,这些工作器机器称为“节点”。节点是运行 Kubernetes 进程的 Compute Engine 虚拟机实例;必须有这些进程,节点才能加入到集群中。您将应用部署到集群,该应用在节点上运行。

如需在 GKE 中创建集群,您需要选择一种操作模式:标准版或 Autopilot。如果您使用标准模式,则您的集群是地区级(在本教程中)。如果使用 Autopilot 模式,则您的集群为区域级。

标准

创建名为 hello-cluster 的单节点标准集群:

gcloud container clusters create hello-cluster --num-nodes=1

Autopilot

创建名为 hello-cluster 的 Autopilot 集群:

 gcloud container clusters create-auto hello-cluster

集群创建过程可能需要几分钟才能完成。

获取用于集群的身份验证凭据

创建集群后,您需要获取身份验证凭据才能与该集群交互:

gcloud container clusters get-credentials hello-cluster

此命令将 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 的负载平衡器价格计费。

检查和查看应用

  1. 使用 kubectl get pods 检查正在运行的 Pod:

    kubectl get pods
    

    您应该会看到一个 hello-server Pod 正在您的集群上运行。

  2. 使用 kubectl get service 检查 hello-server Service:

    kubectl get service hello-server
    

    从此命令的输出结果的 EXTERNAL-IP 列中,复制 Service 的外部 IP 地址。

  3. 在您的网络浏览器中使用外部 IP 地址及公开的端口查看应用:

    http://EXTERNAL_IP
    

您刚刚向 GKE 部署了一个容器化 Web 应用。

清理

为避免因本页中使用的资源导致您的 Google Cloud 帐号产生费用,请按照以下步骤操作。

  1. 运行 kubectl delete 以删除应用的 Service:

    kubectl delete service hello-server
    

    此命令会删除您在公开 Deployment 时创建的 Compute Engine 负载平衡器。

  2. 运行 gcloud container clusters delete 以删除您的集群:

    gcloud container clusters delete hello-cluster
    

可选:hello-app 代码审核

hello-app 是一个简单的 Web 服务器应用,由两个文件组成:main.goDockerfile

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 请求。

package main

import (
	"fmt"
	"log"
	"net/http"
	"os"
)

func main() {
	// register hello function to handle all requests
	mux := http.NewServeMux()
	mux.HandleFunc("/", hello)

	// use PORT environment variable, or default to 8080
	port := os.Getenv("PORT")
	if port == "" {
		port = "8080"
	}

	// start the web server on port and accept requests
	log.Printf("Server listening on port %s", port)
	log.Fatal(http.ListenAndServe(":"+port, mux))
}

// hello responds to the request with a plain-text "Hello, world" message.
func hello(w http.ResponseWriter, r *http.Request) {
	log.Printf("Serving request: %s", r.URL.Path)
	host, _ := os.Hostname()
	fmt.Fprintf(w, "Hello, world!\n")
	fmt.Fprintf(w, "Version: 1.0.0\n")
	fmt.Fprintf(w, "Hostname: %s\n", host)
}

Dockerfile

Dockerfile 用于描述您希望 Docker 构建的映像(包括其所有资源和依赖项),并指定应用应该公开的网络端口。如需详细了解此文件的工作方式,请参阅 Docker 文档中的 Dockerfile 参考

FROM golang:1.8-alpine
ADD . /go/src/hello-app
RUN go install hello-app

FROM alpine:latest
COPY --from=0 /go/bin/hello-app .
ENV PORT 8080
CMD ["./hello-app"]

后续步骤

自行试用

如果您是 Google Cloud 新手,请创建一个帐号来评估 GKE 在实际场景中的表现。新客户还可获享 $300 赠金,用于运行、测试和部署工作负载。

免费试用 GKE