本文档介绍如何开始将 Skaffold用作 Cloud Deploy 的一部分, 包括以下内容:
- 配置 Skaffold 以与 Cloud Deploy 交付流水线搭配使用
- 将 Skaffold 和 Cloud Deploy 与第三方渲染工具(如 Helm 和 Kustomize)搭配使用
- 可选:将 Skaffold 用于本地开发
- 可选:将 Skaffold 用于持续集成和持续部署 (CI/CD)
为何选择 Skaffold?
想知道 Cloud Deploy 为何使用 Skaffold,以及为何需要管理 Skaffold 配置?请继续往下读。
我熟悉 CI/CD,但目前不使用 Skaffold
Skaffold 是一种开源命令行工具,可提高开发者的工作效率。它用于编排持续开发、持续集成 (CI) 和持续交付 (CD)。
Skaffold 提供声明式、可移植的配置,并使用可插拔架构,让您可以在渲染阶段使用不同的工具。
创建版本时,Cloud Deploy 会调用 Skaffold 来渲染清单。在部署时,Cloud Deploy 会再次调用 Skaffold 来 应用这些清单,以便将应用部署到进度中的每个目标 。部署后,Skaffold 会执行健康检查,以监控目标运行时是否成功部署。
Skaffold 用于持续开发
将 Skaffold 用于持续开发时, 映像会在您 更改代码时构建、测试和部署到集群(或 Minikube)。Cloud Code for VS Code 和 Cloud Code for IntelliJ IDE 扩展程序将 Skaffold 集成到 Visual Studio Code 和 JetBrains IDE 中, 以实现持续开发。
Skaffold 用于持续交付
您还可以将 Skaffold 用于持续交付,
其中包含构建、部署、渲染和应用步骤。Cloud Deploy 使用
Skaffold 的 渲染和应用
功能。如需使用 Cloud Deploy,您至少需要一个有效的
skaffold.yaml配置文件。
您还可以通过 Skaffold 与第三方清单管理
工具(如 Helm 和 Kustomize)集成。
以这种方式使用 Skaffold 可让您使用这些工具的功能来渲染清单。kubectl 仍然是这些清单的部署程序。
我刚开始部署到 Kubernetes
借助 Skaffold,您可以为所有部署配置一组基本清单。然后,您可以通过 Cloud Deploy 使用 Skaffold 的渲染引擎来渲染,然后从其中一个基本清单部署每个特定于部署的清单。
详细了解如何管理清单, 包括将 Skaffold 和 Cloud Deploy 与常见 清单模板工具(如 Helm 和 Kustomize)搭配使用的示例。
Cloud Deploy 正常运行需要什么?
如需使用基本的 Cloud Deploy 交付流水线,
skaffold.yaml 配置文件
至少需要以下配置:
所有
skaffold.yaml配置都需要标头信息:apiVersion: skaffold/v4beta7 kind: Config一个
manifests节,用于 GKE、GKE 关联集群或 Cloud Run,列出所有原始 Kubernetes 清单(除非您使用的是清单管理工具,例如 Helm 或 Kustomize)。以下是使用原始 Kubernetes 清单的示例:
manifests: rawYaml: - deployment.yaml如果您计划使用渲染器(如 Helm 或 Kustomize)来渲染清单, 请参阅向 skaffold.yaml 添加 Helm 支持 和向 skaffold.yaml 添加 Kustomize 支持 ,了解如何配置 Skaffold 以使用这些工具。
如需查看 Helm 和 Kustomize 示例,请参阅 管理清单
一个
deploy节,其中包含deploy.kubectl(用于部署到 GKE 或 GKE 关联集群)或deploy.cloudrun(用于部署到 Cloud Run)。对于 GKE 和 GKE 关联集群:
deploy: kubectl: {}deploy 节会部署清单节中提供的应用清单。
对于 Cloud Run 目标:
deploy: cloudrun: {}deploy 节会部署清单节中提供的应用清单。
如果您使用的是 自定义目标,则
skaffold.yaml必须包含标头(apiVersion 和 kind:),以及
自定义操作
(如果自定义目标类型尚未
引用
远程 Skaffold 配置),自定义目标将使用这些操作。
创建 skaffold.yaml 文件
Cloud Deploy 使用 Skaffold 来渲染和部署应用。
对于每个版本,您都需要至少提供一个 skaffold.yaml 文件,用于标识要使用的清单。如需了解此文件中需要包含哪些内容,请参阅
上一部分
。
让 Cloud Deploy 生成 skaffold.yaml
如果您没有 skaffold.yaml 文件,但有单个 Kubernetes 清单或 Cloud Run 服务定义文件,Cloud Deploy 可以为您生成 skaffold.yaml 文件。
生成的 Skaffold 文件将在版本完成后显示在 Cloud Storage 源暂存目录中。
以下命令包含 --from-k8s-manifest 标志,用于传递 Kubernetes 清单。Cloud Deploy 使用清单中的信息生成 skaffold.yaml,然后将其用于版本。
gcloud deploy releases create RELEASE_NAME --delivery-pipeline=PIPELINE_NAME --from-k8s-manifest=MANIFEST --region=REGION
如需从 Cloud Run 服务 YAML 生成 skaffold.yaml,请使用相同的命令,但使用 --from-run-manifest 而不是
--from-k8s-manifest
将这两个标志中的任何一个与 --skaffold-file 标志或 --source 标志搭配使用都会生成错误。
使用生成的 skaffold.yaml 文件
生成的 skaffold.yaml 适用于 Cloud Deploy 的新用户引导、学习和演示。熟悉 Cloud Deploy 后,
对于生产工作负载,您可能需要一个 Skaffold 配置来
区分目标(使用 Skaffold 配置文件)。
当您使用生成的 skaffold.yaml 文件作为起点来创建自己的差异化 Skaffold 配置时,请务必使用渲染源归档中的文件,而不是渲染的文件。 您可以从版本详情 页面上的工件 标签页下载渲染源。
此生成的
skaffold.yaml包含在 Cloud Storage 存储桶中存储的渲染源中。您可以下载
.tar.gz文件并将其解压缩,以查看此文件。渲染的
skaffold.yaml可在目标工件 中找到。在目标工件 部分中,点击查看工件 。

将 Skaffold 用于本地开发
Skaffold 的优势之一是,您可以将其用于 本地
开发和 CI/CD。
在 dev 模式下,Skaffold 会监控源文件,当检测到更改时,Skaffold 会重新构建映像、重新测试并将容器重新部署到本地机器上的 minikube 集群(例如)。
以这种方式使用 Skaffold 时,您可以在本地使用与远程部署相同的命令。
如果您将 Skaffold 用于本地开发,则可以为目标定义单独的 Skaffold 配置文件,并为本地开发定义默认的 deploy 节。
当您停止 dev 模式时,Skaffold 会清理集群中已部署的工件。
将 Skaffold 用于 CI/CD
除了将 Skaffold 用于持续本地构建和部署之外,您还可以将 Skaffold 用于 CI/CD。Cloud Deploy 使用 Skaffold 中的 CI/CD 功能来渲染和应用清单,并将应用部署到定义的目标,前提是使用 CI 工具(如 Cloud Build)构建的容器映像和映像注册表(如 Artifact Registry)。
渲染、部署和应用
Skaffold 将清单渲染过程与部署分开。
Cloud Deploy 调用 skaffold render,
来渲染清单,并调用 skaffold apply
将其应用于 目标。
这种渲染和应用之间的分离让您可以在配置中捕获应用的完整声明式状态,以便安全且可重复地应用(例如,用于回滚)。此技术还简化了审批流程。由于清单是在首次发布之前为所有目标渲染的,因此您可以查看将应用于每个目标的渲染 YAML。
Cloud Deploy 不支持使用其他部署程序来部署应用。不过,您可以使用 Helm 或 Kustomize 等工具进行渲染。
如需详细了解 Cloud Deploy 如何使用 kubectl 作为
部署程序进行部署,请参阅 Cloud Deploy 服务架构。
Skaffold 配置文件简介
您可以创建单独的 Skaffold
配置文件,这些配置文件在
skaffold.yaml 的 profiles: 节中标识。
将 Skaffold 配置文件与 Cloud Deploy 搭配使用时,您可以为所有或部分目标创建单独的配置文件。例如,为 dev、staging 和 prod 创建不同的配置文件。
在 Cloud Deploy 中使用 Skaffold 不需要配置文件,但对于在目标之间定义清单自定义项(例如,为每个目标使用不同的 Kustomize kustomization.yaml 文件)非常有用。
向 skaffold.yaml 添加 Kustomize 支持
将 Kustomize 配置与 Cloud Deploy/Skaffold 配置集成包括以下内容:
在配置文件中添加
kustomization.yaml文件。您可以将配置文件存储在本地目录或 Cloud Storage 存储桶中。
在
skaffold.yaml文件中,为每个配置文件创建一个deploy节。如果您不使用配置文件,或者使用未与配置文件关联的默认部署配置,您还可以在任何已定义的配置文件之外添加
deploy节。以下是一个 Skaffold 配置示例,其中显示了每个配置文件的
deploy节,并使用了一个名为my-app的虚构示例应用:apiVersion: skaffold/v4beta7 kind: Config build: artifacts: - image: my-app-web-profiles context: my-app-web-profiles - image: my-app-application-profiles context: my-app-application-profiles googleCloudBuild: projectId: ${PROJECT_ID} profiles: - name: local manifests: kustomize: paths: - my-app-application-profiles/kubernetes/local - name: test manifests: kustomize: paths: - my-app-application-profiles/kubernetes/test - name: staging manifests: kustomize: paths: - my-app-application-profiles/kubernetes/staging - name: prod manifests: kustomize: paths: - my-app-application-profiles/kubernetes/prod deploy: kubectl: {}此处显示的 Skaffold 配置为
test、staging和prod目标提供了单独的配置文件。它还显示了本地开发的配置文件。 在每个配置文件中,都有一个deploy.kustomize节,其中包含指向要用于该目标的自定义项位置的路径。
向 skaffold.yaml 添加 Helm 支持
您可以使用 Helm 来渲染清单。Cloud Deploy 不使用 Helm 来部署应用,并且仅支持 kubectl 作为部署程序。
如需使用 Helm,您需要将 Helm 图表存储在可以从 skaffold.yaml 中引用的任何位置。此位置可以是文件系统、代码库(可能与 skaffold.yaml 一起)或开放容器倡议 (OCI) 代码库。
如需使用 Helm 图表,请将 helm 节添加到您的
skaffold.yaml 文件。
apiVersion: skaffold/v4beta7
kind: Config
build:
artifacts:
- image: skaffold-helm-image
manifests:
helm:
releases:
- name: skaffold-helm-image
chartPath: charts
deploy:
kubectl: {}
skaffold.yaml 参考
显示了此 helm 节中需要的内容。
不受支持的 Skaffold 功能
以下 Skaffold 功能无法在 Cloud Deploy 中使用:
-
不支持使用
--module=为build、render、apply等选择特定模块。支持静态模块。 在 Helm 中,如果命名空间不存在,则能够创建命名空间 。
后续步骤
访问 Skaffold 网站,了解其工作原理 以及用途。
练习 将 Cloud Deploy 与 Kustomize 和 Skaffold 配置文件搭配使用。
了解如何将 Skaffold 配置文件与 Helm、Kustomize 和 kpt 等先进的清单管理工具搭配使用。