本页面介绍如何使用 Cloud Deploy 将应用部署到预期的目标运行时环境。在执行此操作之前,您需要创建交付流水线和目标。
准备工作
本部分介绍了在使用 Cloud Deploy 部署应用之前需要准备的事项。
-
Cloud Deploy 可以部署到 Google Kubernetes Engine、Cloud Run 和 GKE Enterprise 集群。目标配置因您要部署到的平台而异。
拥有容器映像和清单。
您需要一个或多个容器映像才能进行部署,还需要一个或多个 Kubernetes 清单(用于部署到 GKE)或服务 YAML 文件(用于部署到 Cloud Run)。
您需要一个持续集成流水线或一些其他流程来构建和放置映像。您的 CI 工具可以是 Cloud Build、Jenkins,也可以是导致向 Cloud Deploy 交付流水线提供容器映像的任何工具。
-
Cloud Deploy 调用
skaffold render
以使用此文件渲染 Kubernetes 清单,并使用skaffold apply
将它们部署到目标中。为此,Skaffold 至少需要一个最基本的skaffold.yaml
。您可以通过以下两种方式之一获取验证码:创建自己的。
请注意,
skaffold.yaml
文件必须引用对应于第一行中支持的 Skaffold 版本的命名空间,如以下示例所示:`apiVersion: skaffold/v4beta7`
让系统为您生成。
如果您还没有
skaffold.yaml
文件,可以让 Cloud Deploy 为您创建一个。此文件适合用于 Cloud Deploy 的初始配置、学习或演示,不应用于生产工作负载。
如需了解详情,请参阅将 Skaffold 与 Cloud Deploy 搭配使用。此外,如需详细了解如何将 Skaffold 和 Cloud Deploy 与清单管理工具(如 Helm、Kustomize 和 kpt)搭配使用,请参阅在 Cloud Deploy 中管理清单。
为所选的运行时环境设置 Cloud Deploy
Cloud Deploy 可以将应用部署到以下任何运行时环境:
调用交付流水线以创建发布版本
将 Cloud Deploy 配置为部署到运行时后,您现在可以提交应用,以根据您创建的交付流水线进行部署。
运行常规持续集成 (CI) 流程,以创建一个或多个可部署的工件。
通过调用 Cloud Deploy 启动交付流水线以创建版本。
从包含 Skaffold 配置的目录中运行以下命令:
gcloud deploy releases create RELEASE_NAME --delivery-pipeline=PIPELINE_NAME --region=REGION
由于此命令会创建目录及其所有子目录的整个内容的 tar 文件,因此您可能不想从主目录或根目录运行此命令。您可以从包含 Skaffold 配置的目录中运行该命令,也可以添加
--source=
选项(稍后会介绍)。在此命令中...
RELEASE_NAME
是为此版本指定的名称。该名称在此交付流水线的所有版本中必须是唯一的。您可以通过添加
'$DATE'
和/或'$TIME'
来指定动态版本名称。例如,如果您在世界协调时间 (UTC) 下午 3:07 调用此命令,'rel-$TIME'
会解析为rel-1507
。'$DATE'
和'$TIME'
必须用单引号括起来,时间是您调用命令的机器上的世界协调时间 (UTC)。PIPELINE_NAME
是交付流水线的名称,该流水线将在目标的进展过程中管理此版本的部署。此名称必须与流水线定义中的name
字段匹配。REGION
是您要创建发布版本的区域的名称,例如us-central1
。这是必填项。
此命令将包含您的配置的 tar 文件上传到 Cloud Storage 存储桶并创建发布。Cloud Deploy 还会自动创建发布,并将映像部署到交付流水线中定义的第一个目标。
除了此命令中显示的参数之外,您还可以添加以下选项之一:
--images=<name=path/name:$IMAGE_SHA>,<name=path/name:$IMAGE_SHA>
映像名称的集合到映像完整路径替换。
--build-artifacts=<path/file>
对 Skaffold 构建工件输出文件的引用,可传入以表示映像完整路径替换。
这两个选项是互斥的。
您还可以添加以下标志之一,让 Cloud Deploy 为您生成 skaffold.yaml
文件:
--from-k8s-manifest=K8S_MANIFEST
生成的 Skaffold 配置基于您通过此标志传递的 Kubernetes 清单。将此标志与
--skaffold-file
标志或--source
标志结合使用会生成错误。如需了解详情,请参阅生成skaffold.yaml
。--from-run-manifest=RUN_MANIFEST
生成的 Skaffold 配置基于您通过此标志传递的 Cloud Run 服务 YAML。将此标志与
--skaffold-file
标志或--source
标志结合使用会生成错误。如需了解详情,请参阅生成skaffold.yaml
。
这两个选项是互斥的。
如果目录中有任何文件不想包含在 tar 文件中,您还可以添加 .gcloudignore
文件。
通过 Google Cloud 控制台创建发布版本
您可以使用 Google Cloud 控制台为交付流水线创建版本。这对于试用 Cloud Deploy 非常有用,但不适合生产工作负载。
以下过程假定您已创建交付流水线和一个或多个目标。(您还可以使用 Google Cloud 控制台创建交付流水线。)
在交付流水线详情页面中,针对特定交付流水线点击创建版本。
在选择容器字段中,粘贴或输入要部署的容器映像的路径。您还可以使用此字段中预填充的默认容器进行评估。
您还可以点击选择,从 Artifact Registry 中选择容器映像。
在发布版本名称字段中,为此发布版本提供一个唯一名称,或使用提供的默认名称。
在发布版本名称字段中,为发布版本提供名称,或使用提供的默认名称。
此名称用于将相应版本发布到第一个目标。对于后续目标,您可以在推广对话框或
gcloud deploy releases promote
命令中为发布命名。(可选)在说明字段中,添加此版本的说明。
在部署详情下,输入 GKE 部署或 Cloud Run 服务的名称,或使用提供的默认名称。
对于 GKE,Cloud Deploy 会为您生成清单。对于 Cloud Run,Cloud Deploy 会生成用于创建服务的服务定义。
点击创建。
Cloud Deploy 会使用生成的清单或 Cloud Run 服务定义以及生成的 skaffold.yaml
来创建版本。
更改部署超时时间
对于部署到 GKE 和 GKE Enterprise 目标集群,有三个单独的超时会影响系统等待 Kubernetes 报告稳定部署的时间:
Cloud Build 对其为 Cloud Deploy 执行的操作设置了 1 小时的超时时间。
您可以在执行环境的配置中更改此超时时间。
Skaffold 具有健康检查超时时间 (
deploy.statusCheckDeadlineSeconds
),即等待部署稳定的时间(以秒为单位)。默认值为 600 秒(10 分钟)。如需使用此超时,必须将
deploy.statusCheck
设置为true
。默认情况下,它是。如果statusCheck
为false
,则不进行状态检查,在kubectl apply
成功完成后,发布会被标记为成功。对于
kind: Deployment
的 Kubernetes 资源,存在Deployment.spec.progressDeadlineSeconds
,这是 Kubernetes 等待 Deployment 报告为稳定的时间量。此超时时间仅适用于
Deployment
资源。以下是这两个初始超时如何协同工作:如果未设置 Kubernetes 中的
Deployment.spec.progressDeadlineSeconds
,则 Skaffold 健康检查超时时间为有效超时时间,无论它是默认值还是明确设置的值。如果设置了
Deployment.spec.progressDeadlineSeconds
,则 Skaffold 会忽略其自身的健康检查超时时间,而 Kubernetes 进度截止时间是有效的超时时间。不过,如果 Kubernetes 超时时间明确设置为600
(10 分钟),Skaffold 会假定它是默认值(未设置)并忽略它,然后使用 Skaffold 超时时间(如果已设置)。如果未设置任何超时时间,则有效超时时间为 Skaffold 默认值
600
(10 分钟)。
除了
Deployment
之外,其他 Kubernetes 资源也可以设置超时时间,但这些超时时间不会影响稳定性超时时间。如果存在上述任何一种情况,请检查这些情况,确保它们不会与稳定性超时发生冲突。如果 Skaffold(或 Cloud Build)超时,GKE 部署会继续运行。Cloud Deploy 显示失败,但 GKE 集群上仍可能成功或失败。
如需更改部署稳定性超时时间,请执行以下操作:
确保
skaffold.yaml
中的deploy.statusCheck
已设置为true
。默认为
true
。当值为true
时,Skaffold 会等待健康检查报告稳定的部署,但会受到下一步中的超时值限制。在
skaffold.yaml
中,将statusCheckDeadlineSeconds
设置为要等待的秒数。deploy: ... statusCheck: true statusCheckDeadlineSeconds: 600 ...
默认值为
600
(10 分钟)。Skaffold 会等待这么长时间,以确保部署稳定。如果在部署稳定之前超出此时间,则部署会失败。或者,您可以在
statusCheckDeadlineSeconds
之后添加tolerateFailuresUntilDeadline: true
。此设置会告知 Skaffold,如果单个部署失败,不要退出,而是容忍失败,直到
statusCheckDeadlineSeconds
过期。在某些情况下,您的资源可能需要更多时间(最长可达状态检查截止期限)才能达到稳定状态,此时此设置会很有帮助。例如,如果您使用的是 Istio 或 Cloud Service Mesh,则可能会遇到部署失败的情况,并收到类似以下消息:
error iptables validation failed; workload is not ready for Istio. When using Istio CNI, this can occur if a pod is scheduled before the node is ready.
在 Kubernetes 清单中,对于
kind: Deployment
资源,请将Deployment.spec.progressDeadlineSeconds
设置为与statusCheckDeadlineSeconds
相同的值。
后续步骤
了解如何部署到 GKE
了解如何部署到 Cloud Run
了解如何创建交付流水线和目标
了解如何宣传发行作品