本页面介绍了如何使用 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 文件,因此您可能不希望从主目录或根目录运行此命令。从目录运行命令 或包含
--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 中选择一个容器映像 即 Container 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 执行。
您可以在 执行环境的配置。
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
,则 无论它是 默认或明确设置。如果在 Kubernetes 中设置了
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 会等待此时长以等待稳定的部署。如果在部署稳定之前超过这个时间, 部署失败您还可以选择添加
tolerateFailuresUntilDeadline: true
statusCheckDeadlineSeconds
之后。此设置会告知 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.
此设置仅适用于 Skaffold 2.0 或更高版本。
在 Kubernetes 清单中,对于
kind: Deployment
资源,将Deployment.spec.progressDeadlineSeconds
设置为与为statusCheckDeadlineSeconds
设置的值相同。
后续步骤
了解如何部署到 GKE
了解如何部署到 Cloud Run
了解如何创建交付流水线和目标
了解如何宣传版本