本文档介绍了如何开始使用 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 Enterprise 或 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 Enterprise)或deploy.cloudrun
(用于部署到 Cloud Run)。对于 GKE 和 GKE Enterprise 目标:
deploy: kubectl: {}
部署 stanza 将部署 清单节。
对于 Cloud Run 目标:
deploy: cloudrun: {}
部署诗节会部署清单诗节中提供的应用清单。
如果您使用的是自定义定位条件,您的
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.yaml
文件作为基础来创建
您自己的差异化 Skaffold 配置,请务必使用
呈现源代码归档,而不是呈现的文件。呈现来源为
可从 **版本详情 **上的软件工件标签页中下载
页面。
这个生成的
skaffold.yaml
包含在存储在 Cloud Storage 存储桶。您可以下载
.tar.gz
文件并将其解压缩,以查看此文件。渲染的
skaffold.yaml
可在目标制品中找到。在目标工件部分,点击查看工件。
使用 Skaffold 进行本地开发
Skaffold 的优势之一是,您可以将其用于本地
开发和 CI/CD。
在 dev
模式下,Skaffold 会监控您的源文件,如果检测到更改,Skaffold 会重新构建映像、重新测试并将容器重新部署到本地机器上的 minikube 集群(例如)。
以这种方式使用 Skaffold 时,您可以在本地使用与远程部署相同的命令。
如果您使用 Skaffold 进行本地开发,则可以为目标定义单独的 Skaffold 配置文件,并为本地开发定义默认的部署诗节。
当您停止 dev
模式时,Skaffold 会从集群中清除已部署的工件。
使用 Skaffold 实现 CI/CD
除了使用 Skaffold 进行持续本地构建和部署之外,您还可以使用 Skaffold 进行 CI/CD。Cloud Deploy 使用 Skaffold 中的 CI/CD 功能 来渲染和应用您的清单,并将应用部署到 目标,给定使用 Cloud Build 等 CI 工具构建的容器映像 以及 Artifact Registry 等映像注册表。
呈现、部署和应用
Skaffold 将清单渲染过程与部署分开。
Cloud Deploy 调用 skaffold render
,
用于呈现清单,而 skaffold apply
以将其应用于目标。
将渲染和应用区分开来,可让您捕获 在配置中声明应用的声明状态 以安全且可重复的方式应用(例如,用于回滚)。这种方法还能简化审批流程。因为先为所有目标呈现清单 可以看到将应用于每个 Pod 的已渲染 YAML 目标。
Cloud Deploy 不支持使用其他部署工具部署应用。不过,您可以使用 Helm 或 Kustomize 进行渲染。
如需详细了解 Cloud Deploy 如何使用 kubectl
作为
请参阅 Cloud Deploy 服务架构。
Skaffold 配置文件简介
您可以在 profiles:
节中创建单独的 Skaffold 配置文件(在 skaffold.yaml
中标识)。
将 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
诗节,其中包含一个路径,该路径指向要为该目标使用 Kustomization 的位置。
向 skaffold.yaml
添加 Helm 支持
您可以使用 Helm 呈现清单。Cloud Deploy 不会使用 Helm 部署应用,并且仅支持 kubectl
作为部署程序。
如需使用 Helm,您需要存储在任何位置的 Helm 图表
skaffold.yaml
.此位置可以包含在文件中
系统、仓库(可能与您的 skaffold.yaml
或 Open
Container Initiative (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 功能
在 Cloud Deploy 中不能使用 Skaffold 的以下功能:
-
不支持使用
--module=
为build
、render
、apply
等选择特定模块。支持静态模块。 在 Helm 中,如果命名空间不存在,则能够创建命名空间。
后续步骤
访问 Skaffold 网站,了解其工作原理以及用途。
练习 将 Cloud Deploy 与 Kustomize 和 Skaffold 配置文件搭配使用。
了解如何使用 Cloud Deploy 选择要使用的 Skaffold 版本、Skaffold 版本更改的时间以及如何更改 以确定正在使用的版本
了解如何使用 Skaffold 高级清单管理工具(如 Helm、Kustomize 和 kpt)的配置文件。