本页面介绍如何使用 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 
- 了解如何创建交付流水线和目标 
- 了解如何宣传发行作品