本页面介绍如何使用 Google Kubernetes Engine (GKE) 部署无状态 Linux 应用。您还可以了解如何部署无状态 Windows 应用。
概览
无状态应用是不将数据或应用状态存储到集群或永久性存储空间的应用。相反,该应用将数据和应用状态保留在客户端,从而使无状态应用更具可伸缩性。例如,前端应用是无状态应用:您可以部署多个副本以提高其可用性,在需求较低时可以减少副本,并且副本无需具有唯一标识。
Kubernetes 使用 Deployment 控制器将无状态应用部署为统一且非唯一的 Pod。Deployment 管理应用的所需状态:应运行应用的 Pod 数、应运行的容器映像版本、Pod 应标记的内容等等。通过更新 Deployment 的 Pod 规范可以动态地更改所需状态。
无状态应用与有状态应用相反,有状态应用使用永久性存储空间保存数据,并使用 StatefulSets 部署具有唯一标识的 Pod。
准备工作
在开始之前,请确保您已执行以下任务:
- 确保您已启用 Google Kubernetes Engine API。 启用 Google Kubernetes Engine API
- 确保您已安装 Cloud SDK。
使用以下任一方法设定默认的 gcloud
设置:
- 使用
gcloud init
(如果您想要在系统引导下完成默认设置)。 - 使用
gcloud config
(如果您想单独设置项目 ID、区域和地区)。
使用 gcloud init
如果您收到 One of [--zone, --region] must be supplied: Please specify
location
错误,请完成本部分。
-
运行
gcloud init
并按照说明操作:gcloud init
如果您要在远程服务器上使用 SSH,请使用
--console-only
标志来防止命令启动浏览器:gcloud init --console-only
-
按照说明授权
gcloud
使用您的 Google Cloud 帐号。 - 创建新配置或选择现有配置。
- 选择 Google Cloud 项目。
- 为可用区级集群选择默认 Compute Engine 可用区,或为区域级集群或 Autopilot 集群选择区域。
使用 gcloud config
确保容器化应用存储在映像注册表(如 Container Registry)。
如果您刚接触 GKE,则应完成快速入门教程,在其中启用 GKE API 并了解产品的工作原理。
剖析 Deployment
以下是简单的 Deployment 清单文件的示例。此 Deployment 会创建三个副本 Pod,它们被标记为 app=my-app
并且运行 Container 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: gcr.io/google-samples/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 Console 的工作负载菜单中的“部署”功能,根据 Container 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,请执行以下步骤:
访问 Cloud Console 中的 Google Kubernetes Engine“工作负载”菜单。
点击 add_box 部署。
在修改容器下,选择以下任一选项:
现有容器映像,以选择 Container Registry 中提供的容器映像。在映像路径中,输入容器映像和版本的路径。
新建容器映像,以使用通过 Cloud Source Repositories 和 Cloud Build 创建的映像。
或者,使用以下内容配置 Deployment:
- 要传递到容器中的环境变量。
- 用于在运行时自定义容器的入口点的初始命令。
点击完成,然后点击继续。
在配置部分中,为您的部署提供一个应用名称,并指定要在其中部署该应用的 Kubernetes 命名空间。
(可选)在标签下,您可以将 Kubernetes 标签添加到部署中。
如需保存创建此 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,请执行以下步骤:
访问 Cloud Console 中的 Google Kubernetes Engine“工作负载”菜单。
在工作负载列表中,点击要检查的 Deployment 的名称。
在 Deployment 详情页面上,执行以下任一操作:
- 点击修订历史记录标签页以查看 Deployment 的修订历史记录。
- 点击事件标签页,以查看与 Deployment 相关的所有事件。
- 点击日志标签页以查看 Deployment 中的容器活动日志。
- 点击 YAML 标签页以查看、复制和下载 Deployment 的 YAML 清单。
更新 Deployment
您可以将更新发布到 Deployment 的 Pod 规范,例如映像、资源使用情况/请求或配置。
您可以使用以下方法更新 Deployment:
- 您可以使用 Cloud Console 工作负载菜单中的滚动更新菜单和 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 的滚动更新菜单,请执行以下操作:
访问 Cloud Console 中的 Google Kubernetes Engine“工作负载”菜单。
在工作负载列表中,点击要修改的 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
您可以使用 Cloud Console 或 kubectl scale
手动扩缩 Deployment。
您可以详细了解如何自动扩缩 Deployment。
kubectl
kubectl scale
可随时用于调节 Deployment。
如需手动扩缩 Deployment,请运行以下命令:
kubectl scale deployment [DEPLOYMENT_NAME] --replicas [NUMBER_OF_REPLICAS]
其中 [NUMBER_OF_REPLICAS] 是所需的副本 Pod 数量。
控制台
要扩缩 Deployment,请执行以下步骤:
访问 Cloud Console 中的 Google Kubernetes Engine“工作负载”菜单。
在工作负载列表中,点击要修改的 Deployment 的名称。
点击 list 操作 > 缩放。
输入 Deployment 的新副本数量。
点击调节。
删除部署
您可以使用 Cloud Console 或 kubectl delete
删除 Deployment。
kubectl
要删除 Deployment,请运行以下命令:
kubectl delete deployment [DEPLOYMENT_NAME]
控制台
要删除 Deployment,请执行以下步骤:
访问 Cloud Console 中的 Google Kubernetes Engine“工作负载”菜单。
在工作负载列表中,选择要删除的一个或多个 Deployment。
点击 delete 删除。
当系统提示您确认时,点击删除。