本页面介绍如何使用 Google Kubernetes Engine (GKE) 部署无状态 Linux 应用。您还可以了解如何部署无状态 Windows 应用。
概览
无状态应用是不将数据或应用状态存储到集群或永久性存储空间的应用。相反,该应用将数据和应用状态保留在客户端,从而使无状态应用更具可伸缩性。例如,前端应用是无状态应用:您可以部署多个副本以提高其可用性,在需求较低时可以减少副本,并且副本无需具有唯一标识。
Kubernetes 使用 Deployment 控制器将无状态应用部署为统一且非唯一的 Pod。Deployment 管理应用的所需状态:应运行应用的 Pod 数、应运行的容器映像版本、Pod 应标记的内容等等。通过更新 Deployment 的 Pod 规范可以动态地更改所需状态。
无状态应用与有状态应用相反,有状态应用使用永久性存储空间保存数据,并使用 StatefulSets 部署具有唯一标识的 Pod。
准备工作
在开始之前,请确保您已执行以下任务:
- 启用 Google Kubernetes Engine API。 启用 Google Kubernetes Engine API
- 如果您要使用 Google Cloud CLI 执行此任务,请安装并初始化 gcloud CLI。 如果您之前安装了 gcloud CLI,请运行
gcloud components update
以获取最新版本。
确保容器化应用存储在映像注册表(如 Artifact Registry)中。
如果您刚接触 GKE,则应完成快速入门教程,在其中启用 GKE API 并了解产品的工作原理。
剖析 Deployment
以下是简单的 Deployment 清单文件的示例。此 Deployment 会创建三个 Pod 副本,它们被标记为 app=my-app
并且运行 Artifact Registry 中存储的 hello-app
映像:
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-app
spec:
replicas: 3
selector:
matchLabels:
run: my-app
template:
metadata:
labels:
run: my-app
spec:
containers:
- name: hello-app
image: us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0
在此示例中:
.spec.replicas
是 Deployment 管理的副本 Pod 数。.spec.template.metadata.labels
是为每个 Pod 提供的标签,Deployment 用它来管理 Pod。.spec.template.spec
是 Pod 规范,它定义了每个 Pod 的运行方式。spec.containers
包括要在每个 Pod 中运行的容器的名称以及应该运行的容器映像。
要想详细了解 Deployment 规范,请参阅 Deployment API 参考。
创建 Deployment
您可以使用以下任一方法创建 Deployment:
- 使用 Google Cloud 控制台的工作负载菜单中的“部署”功能,根据 Artifact Registry 中存储的容器映像创建一个简单 Deployment
您可以编写 Deployment 清单并运行
kubectl apply
以创建资源
kubectl apply
您可以使用 kubectl apply
以声明方式根据清单文件创建和更新 Deployment。此方法还可保留对活动资源所做的更新,但不会将更改合并回清单文件。
要根据 Deployment 清单文件创建 Deployment,请运行以下命令:
kubectl apply -f DEPLOYMENT_FILE
将 DEPLOYMENT_FILE
替换为清单文件,例如 config.yaml
。
您还可以使用 kubectl apply -f DIRECTORY/
创建在目录中存储的清单文件中定义的所有对象(现有对象除外)。
控制台
要创建 Deployment,请执行以下步骤:
转到 Google Cloud 控制台中的工作负载页面。
点击 add_box 部署。
在指定容器下,选择以下选项之一:
现有容器映像,以选择 Artifact Registry 或 DockerHub 中提供的容器映像。 在映像路径中,输入容器映像和版本的路径。
新建容器映像,以使用通过 Cloud Source Repositories 和 Cloud Build 创建的映像。
或者,使用以下内容配置 Deployment:
- 要传递到容器中的环境变量。
- 用于在运行时自定义容器的入口点的初始命令。
点击完成,然后点击继续。
在配置部分中,为您的 Deployment 提供一个应用名称,并指定要在其中部署该应用的 Kubernetes 命名空间。
(可选)在标签下,您可以将 Kubernetes 标签添加到 Deployment 中。
如需保存创建此 Deployment 的 YAML 以便稍后对其进行更新,请点击查看 YAML。将 YAML 复制并粘贴到文件中,然后保存该文件并点击 YAML 输出对话框中的关闭。
从 Kubernetes 集群下拉菜单中,选择所需集群。
点击部署。
检查 Deployment
创建 Deployment 后,可以使用以下任一方法进行检查:
- 您可以使用工作负载菜单
您可以使用
kubectl describe
和kubectl get
kubectl
要获取有关 Deployment 的详细信息,请运行以下命令:
kubectl describe deployment DEPLOYMENT_NAME
将 DEPLOYMENT_NAME
替换为该 Deployment 的名称。
要列出 Deployment 创建的 Pod,请运行以下命令:
kubectl get pods -l KEY=VALUE
在此命令中,-l
标志指示 kubectl
获取具有键值对标签的所有 Pod。例如,如果您为 Deployment 添加了 app: my-app
标签,则需要运行 kubectl get pods -l app=my-app
来查看带有此标签的 Pod。
要获取有关特定 Pod 的信息,请运行以下命令:
kubectl describe pod POD_NAME
要查看 Deployment 的清单,请运行以下命令:
kubectl get deployments DEPLOYMENT_NAME -o yaml
此命令以 YAML 格式显示 Deployment 的活动配置。
控制台
要检查 Deployment,请执行以下步骤:
转到 Google Cloud 控制台中的工作负载页面。
在工作负载列表中,点击您要检查的 Deployment 的名称。
在 Deployment 详情页面上,执行以下任一操作:
- 点击修订历史记录标签页以查看 Deployment 的修订历史记录。
- 点击事件标签页,以查看与 Deployment 相关的所有事件。
- 点击日志标签页以查看 Deployment 中的容器活动日志。
- 点击 YAML 标签页以查看、复制和下载 Deployment 的 YAML 清单。
更新 Deployment
您可以将更新发布到 Deployment 的 Pod 规范,例如映像、资源使用情况/请求或配置。
您可以使用以下方法更新 Deployment:
- 您可以使用 Google Cloud 控制台工作负载菜单中的滚动更新菜单和 YAML 编辑器。
- 您可以更改清单文件,并通过
kubectl apply
应用这些文件。 - 您可以使用
kubectl set
更新 Pod 规范的image
、resources
或selector
字段。 您可以使用
kubectl edit
直接从 shell 或首选编辑器更新 Deployment。
kubectl apply
您可以通过应用新的或更新的清单文件来更新 Deployment。 如果您要对 Deployment 进行多项更改,例如调节或指定应用的新版本,则此操作十分有用。
要更新 Deployment,请运行以下命令:
kubectl apply -f DEPLOYMENT_FILE
将 DEPLOYMENT_FILE
替换为更新后的清单文件。
kubectl apply
命令可将清单文件应用于资源。如果指定的资源不存在,则命令将创建该资源。
kubectl set
您可以使用 kubectl set
更改 Deployment 的映像、资源(请求或限制)或选择器字段。
要更改 Deployment 的映像,请运行以下命令:
kubectl set image deployment DEPLOYMENT_NAME IMAGE IMAGE:TAG
例如,如需将 Deployment 从 nginx
版本 1.7.9 更新为 1.9.1,请运行以下命令:
kubectl set image deployment nginx nginx=nginx:1.9.1
控制台
如需访问 Deployment 的滚动更新菜单,请执行以下操作:
转到 Google Cloud 控制台中的工作负载页面。
在工作负载列表中,点击您要修改的 Deployment 的名称。
点击 list 操作 > 滚动更新。
为更新策略配置以下可选参数:
- 最短就绪秒数:指定新创建的 Pod 准备就绪,被视为可用时所需的秒数下限。
- 超额配置数量上限:指定可创建的超过所需 Pod 的 Pod 数量上限。值可以是绝对数或百分比。
- 不可用数量上限:指定更新过程中可能不可用的 Pod 数量上限。值可以是绝对数或百分比。
在容器映像下,输入更新后的容器映像的映像路径和版本。
点击更新。
回滚更新
您可以使用 kubectl rollout undo
回滚更新。
您可以将正在进行或已完成的更新回滚到先前版本:
kubectl rollout undo deployment my-deployment
您还可以回滚到特定版本:
kubectl rollout undo deployment my-deployment --to-revision=3
调节 Deployment
您可以使用 Google Cloud 控制台或 kubectl scale
手动扩缩 Deployment。
您可以详细了解如何自动扩缩 Deployment。
kubectl
kubectl scale
可随时用于调节 Deployment。
要手动调节 Deployment,请运行以下命令:
kubectl scale deployment DEPLOYMENT_NAME --replicas NUMBER_OF_REPLICAS
将 NUMBER_OF_REPLICAS
替换为所需的副本 Pod 数。
控制台
要扩缩 Deployment,请执行以下步骤:
转到 Google Cloud 控制台中的工作负载页面。
在工作负载列表中,点击您要修改的 Deployment 的名称。
点击 list 操作 > 扩缩 > 修改副本
输入 Deployment 的新副本数量。
点击调节。
删除 Deployment
您可以使用 Google Cloud 控制台或 kubectl delete
删除 Deployment。
kubectl
要删除 Deployment,请运行以下命令:
kubectl delete deployment DEPLOYMENT_NAME
控制台
要删除 Deployment,请执行以下步骤:
转到 Google Cloud 控制台中的工作负载页面。
在工作负载列表中,选择一个或多个要删除的 Deployment。
点击 delete 删除。
当系统提示您确认时,点击删除。