在 Google Cloud Deploy 中开始使用 Skaffold

使用集合让一切井井有条 根据您的偏好保存内容并对其进行分类。

本文档介绍了如何在 Google Cloud Deploy 中开始使用 Skaffold,其中包括:

  • 配置 Skaffold 以便与 Google Cloud Deploy 交付流水线搭配使用
  • 搭配使用 Skaffold 和 Google Cloud Deploy 与第三方渲染工具(例如 Helm 和 Kustomize)
  • (可选)使用 Skaffold 进行本地开发
  • (可选)使用 Skaffold 进行持续集成和持续部署 (CI/CD)

为什么要使用 Skaffold?

想知道 Google Cloud Deploy 为何使用 Skaffold,以及为什么您需要管理 Skaffold 配置?请继续阅读。

我有 CI/CD 经验,但目前不使用 Skaffold

Skaffold 是一种开源命令行工具,可帮助开发者提高工作效率。它可以编排持续开发、持续集成 (CI) 和持续交付 (CD)。

Skaffold 使用可插拔架构提供声明式可移植配置,让您可以在渲染阶段使用不同的工具。

创建版本后,Google Cloud Deploy 会调用 Skaffold 来呈现您的清单。在部署时,Google Cloud Deploy 会再次调用 Skaffold,以将这些清单应用于您的进度中的每个目标。部署后,Skaffold 会执行健康检查,以监控目标运行时是否成功部署。

用于持续开发的 Skaffold

当您使用 Skaffold 进行持续开发时,系统会在您更改代码时构建、测试映像并将其部署到集群(或 Minikube)。Cloud Code for VS CodeCloud Code for IntelliJ IDE 扩展程序将 Skaffold 集成到 Visual Studio Code 和 JetBrains IDE 中,以进行持续开发。

用于持续交付的 Skaffold

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

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

我刚开始部署到 Kubernetes

通过 Skaffold,您可以为所有部署配置一组清单。然后,您可以通过 Google Cloud Deploy 使用 Skaffold 的渲染引擎进行渲染,然后通过其中某个基本清单部署每个特定于部署的清单。

详细了解如何管理清单,包括将 Skaffold 和 Google Cloud Deploy 与常见清单模板工具(例如 Helm 和 Kustomize)结合使用的示例。

使用 Google Cloud Deploy 需要具备哪些条件?

如需使用基本的 Google Cloud Deploy 交付流水线,skaffold.yaml 配置文件至少需要以下配置:

  • 所有 skaffold.yaml 配置都需要的标头信息:

    apiVersion: skaffold/v2beta28
    Kind: Config
    
  • deploy 节,带有 deploy.kubectl(用于部署到 GKE 或 Anthos)或 deploy.cloudrun(用于部署到 Cloud Run)。

    对于 GKE:

    deploy:
      kubectl:
        manifests:
        - ...
    

    manifests 节中,列出了所有 Kubernetes 原始清单。如果您计划使用渲染程序(如 Helm 或 Kustomize)来渲染清单,请参阅向 skaffold.yaml 添加 Kustomize 支持向 skaffold.yaml 添加 Helm 支持,以获得有关如何配置 Skaffold 以使用这些工具的指导。

    对于 Cloud Run:

    metadata:
      name:
    manifests:
      rawYaml:
      - ...
    deploy:
      cloudrun: {}
    

创建 skaffold.yaml 文件

Google Cloud Deploy 使用 Skaffold 呈现和部署应用。

您至少需要提供一个 skaffold.yaml 文件来标识要使用的清单。示例如下:

apiVersion: skaffold/v2beta28
kind: Config
deploy:
  kubectl:
    manifests:
      - MANIFEST

在此配置中,MANIFEST 是将由 Skaffold 处理的清单的路径或清单。

让 Google Cloud Deploy 生成您的 skaffold.yaml

如果您没有 skaffold.yaml 文件,但您有一个 Kubernetes 清单或 Cloud Run 服务定义文件,Google Cloud Deploy 就可以为您生成一个 skaffold.yaml 文件。

生成的 Skaffold 文件将在版本完成后在 Cloud Storage 源暂存目录中提供。

以下命令包含 --from-k8s-manifest 标志,并传递 Kubernetes 清单。Google 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 适用于新手入门、学习和演示 Google Cloud Deploy。熟悉 Google 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 配置文件,以及用于本地开发的默认部署 Stanza。

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

使用 Skaffold 实现 CI/CD

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

渲染、部署和应用

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

渲染和应用之间的这种分离可让您捕获应用在配置中的完整声明状态,以便可以安全且可重复应用(例如,用于回滚)。此外,这种方法还可以让审批更轻松。由于清单会在首次发布之前针对所有目标进行渲染,因此您可以查看将应用于每个目标的已渲染 YAML。

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

如需详细了解 Google Cloud Deploy 如何使用 kubectl 作为部署者进行部署,请参阅 Google Cloud Deploy 服务架构

关于 Skaffold 配置文件

您可以在 profiles: 节中创建单独的 Skaffold 配置文件(可在 skaffold.yaml 中找到)。

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

配置文件并非在 Google Cloud Deploy 中使用 Skaffold 所必需的,但有助于在目标中定义清单自定义,例如针对每个目标使用不同的 Kustomize kustomization.yaml 文件。

为您的 skaffold.yaml 添加 Kustomize 支持

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

  1. 在配置文件中包含 kustomization.yaml 文件。

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

  2. skaffold.yaml 文件中,为每个配置文件创建一个 deploy 节。

    如果您未使用配置文件或用于未与配置文件关联的默认部署配置,则还可以在已定义的任何配置文件之外添加 deploy 节。示例如下:

    apiVersion: skaffold/v2beta28
    kind: Config
    build:
      artifacts:
        - image: leeroy-web-profiles
          context: leeroy-web-profiles
        - image: leeroy-app-profiles
          context: leeroy-app-profiles
      googleCloudBuild:
        projectId: ${PROJECT_ID}
    profiles:
    - name: local
      deploy:
        kustomize:
          paths:
            - leeroy-app-profiles/kubernetes/local
    - name: test
      deploy:
        kustomize:
          paths:
            - leeroy-app-profiles/kubernetes/test
    - name: staging
      deploy:
        kustomize:
          paths:
            - leeroy-app-profiles/kubernetes/staging
    - name: prod
      deploy:
        kustomize:
          paths:
            - leeroy-app-profiles/kubernetes/prod
    

    此处显示的 Skaffold 配置针对 teststagingprod 目标设置了单独的配置文件。此外,它还会显示用于本地开发的配置文件。 在每个配置文件中,都有一个 deploy.kustomize 节,其中包含指向用于该目标的 kustomization 位置的路径。

skaffold.yaml 添加 Helm 支持

您可以使用 Helm 呈现您的清单。Google Cloud Deploy 不使用 Helm 部署应用,并且仅支持将 kubectl 用作部署者。

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

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

apiVersion: skaffold/v2beta28
kind: Config
build:
  artifacts:
  - image: skaffold-helm-image
deploy:
  helm:
    releases:
    - name: skaffold-helm-image
      chartPath: charts

skaffold.yaml 参考文档显示了此 helm 节的要求。

将 kpt 与 Skaffold 搭配使用

我们建议您不要在 Google Cloud Deploy 中将 kpt 与 Skaffold V1 搭配使用。

不受支持的 Skaffold 功能

无法在 Google Cloud Deploy 中使用 Skaffold 的以下功能:

后续步骤

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

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

  • 了解 Google Cloud Deploy 如何选择要使用的 Skaffold 版本、Skaffold 版本何时发生更改,以及如何确定使用哪个版本。

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