开始在 Cloud Deploy 中使用 Skaffold

本文档介绍了如何开始使用 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) 更改代码。适用于 VS Code 的 Cloud CodeCloud Code for IntelliJ IDE 扩展程序将 Skaffold 集成到 Visual Studio Code 和 JetBrains IDE 中, 实现持续开发。

用于持续交付的 Skaffold

您还可以使用 Skaffold 实现持续交付,并结合使用构建、部署、渲染和应用步骤。Cloud Deploy 使用 Skaffold 的渲染和应用功能。如需使用 Cloud Deploy,您至少需要一个有效的 skaffold.yaml 配置文件

通过 Skaffold,您还可以与第三方清单管理集成 工具(例如 HelmKustomize)。 以这种方式使用 Skaffold 可让您使用这些工具的功能 清单。kubectl 仍然是这些清单的deployer

我刚开始接触将应用部署到 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.kubectldeploy 节,用于部署到 GKE 或 GKE Enterprise,或deploy.cloudrun用于部署 Cloud Run

    对于 GKE 和 GKE Enterprise 目标:

    deploy:
      kubectl: {}
    

    部署诗节会部署在清单诗节中提供的应用清单。

    对于 Cloud Run 目标:

    deploy:
      cloudrun: {}
    

    部署节用于部署清单中提供的应用清单 节。

如果您使用的是自定义目标,则 skaffold.yaml 必须包含标头 (apiVersionkind:),以及自定义目标类型尚未引用远程 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 进行本地开发 配置文件以及用于本地开发的默认部署 stanza。

当您停止 dev 模式时,Skaffold 会从集群中清除已部署的工件。

使用 Skaffold 进行 CI/CD

除了使用 Skaffold 进行持续本地构建和部署之外, 使用 Skaffold 实现 CI/CD。在使用 Cloud Build 等 CI 工具和 Artifact Registry 等映像注册库构建容器映像的情况下,Cloud Deploy 会使用 Skaffold 中的 CI/CD 功能来渲染和应用清单,并将应用部署到您指定的目标。

呈现、部署和应用

Skaffold 会将清单渲染流程与部署分离开来。Cloud Deploy 调用 skaffold render, 用于呈现清单,而 skaffold apply 以将其应用于目标

通过将渲染和应用分离,您可以在配置中捕获应用的完整声明式状态,以便安全且可重复地应用该状态(例如用于回滚)。这个技巧还 让审批变得更轻松因为先为所有目标呈现清单 可以看到将应用于每个 Pod 的已渲染 YAML 目标。

Cloud Deploy 不支持使用其他部署工具部署应用。不过,您可以使用 HelmKustomize 等工具进行渲染。

如需详细了解 Cloud Deploy 如何使用 kubectl 作为 请参阅 Cloud Deploy 服务架构

Skaffold 配置文件简介

您可以创建单独的 Skaffold 配置文件 - 可在以下位置找到: skaffold.yaml,位于 profiles: 节中。

将 Skaffold 配置文件与 Cloud Deploy 搭配使用时,您可以为所有或部分目标创建单独的配置文件。例如,devstagingprod 的不同配置文件。

无需配置文件即可在 Cloud Deploy 中使用 Skaffold, 但对于在目标中定义清单自定义很有用 示例,针对每个目标使用不同的 Kustomize kustomization.yaml 文件。

skaffold.yaml 添加 Kustomize 支持

将 Kustomize 配置与 Cloud Deploy/Skaffold 配置集成包括以下步骤:

  1. 在配置文件中添加 kustomization.yaml 文件。

    您可以将配置文件存储在本地目录或 Cloud Storage 存储桶。

  2. 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 配置为 teststagingprod 目标提供了单独的配置文件。它还会显示用于本地开发的配置文件。每个配置文件中都有一个 deploy.kustomize 节,其路径指向 要用于该目标的 kustomization 的位置。

为您的 skaffold.yaml 添加 Helm 支持

您可以使用 Helm 呈现清单。Cloud Deploy 不会使用 Helm 部署应用,并且仅支持 kubectl 作为部署程序。

如需使用 Helm,您需要将 Helm 图表存储在 skaffold.yaml 中可以引用的任何位置。此位置可以位于文件系统、代码库(可能与 skaffold.yaml 一起)或 Open Container Initiative (OCI) 代码库中。

如需使用 Helm 图表,请向 skaffold.yaml 文件添加 helm 节。

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 的以下功能:

后续步骤

  • 访问 Skaffold 网站,了解其工作原理以及用途。

  • 练习将 Cloud Deploy 与 Kustomize 和 Skaffold 配置文件搭配使用。

  • 了解 Cloud Deploy 如何选择要使用的 Skaffold 版本、更改 Skaffold 版本的时间以及确定使用的版本。

  • 了解如何使用 Skaffold 使用 Helm、Kustomize 和 Kpt 等高级清单管理工具的配置文件。