在 Cloud Code for VS Code 中加快开发速度

要加快在 Cloud Code for VS Code 中进行本地开发的速度,请利用文件同步和热重载、保存时自动部署,并使用 Skaffold 模块单独开发应用的各个部分。

启用 Skaffold 文件同步和热重载

为了提高本地开发工作流的效率,并避免必须重新构建、重新部署和重启 pod,Skaffold 支持将更改的文件复制到已部署的容器中。这意味着,在对静态代码和源代码文件进行更改时,所做更改在几秒钟内即可生效,从而加快了反馈循环的速度。

对于静态文件(例如 HTML 和 CSS 文件),这种文件复制行为称为文件同步

对于源代码文件,此行为称为“热重载”,它支持以下文件类型:

  • Go: *.go
  • Java: *.java, *.kt, *.scala, *.groovy, *.clj
  • NodeJS: *.js、*.mjs、*.coffee、*.litcoffee、*.json

配置热重载后,Skaffold 会检测受支持文件的更改,并将这些更改同步到集群上正在运行的容器中。对不支持热重载的文件类型的更改会触发映像重新构建和 Pod 重启。

当您将 Buildpacks 作为首选构建器使用时,系统会默认启用自动文件同步和热重载。对于 Docker 等其他构建器,您可以在 skaffold.yaml 文件中为您要自定义的工件指定 sync 部分。

您的同步设置可以是以下其中一项(按优先顺序排列):

  • auto:Skaffold 会自动配置同步。(仅适用于 Jib 和 Buildpack 工件。)这是 Buildpack 的默认设置。
  • infer:每个更改后的文件的目标位置都是从构建器推断出来的。
  • manual:您必须指定本地工作区中的文件及其在正在运行的容器中的目标。

以下示例 sync 部分在 skaffold.yaml 文件中指定了 manual 同步,用于将所有 /static-html HTML 文件同步到容器中的 static 文件夹:

build:
  artifacts:
    - image: gcr.io/k8s-skaffold/node-example
      context: node
      sync:
        manual:
          - src: 'static-html/*.html'
            dest: static

如需详细了解文件同步和指定同步规则,请参阅有关文件同步的 Skaffold 指南

在 Kubernetes 上进行开发时添加新功能

设置文件同步和热重载后,启动迭代周期并向项目中添加更多功能。您无需停止和移除部署、手动构建和标记映像或更新集群,即可将更改部署到 Kubernetes 集群。

标准迭代周期类似于以下内容:

  1. 在项目中进行更改。例如,如果使用 Cloud Code Java Guestbook 应用,请将新端点添加到 FrontendController 类,如下所示:

    1. src/main/java/cloudcode/guestbook/frontend 打开 FrontendController.java 文件,并添加以下内容:

      @RequestMapping("/greeting")
      @ResponseBody
      public String greeting(@RequestParam(value="name", defaultValue="World") String name) {
         return String.format("Hello from Kubernetes with IntelliJ, %s!", name);
      }
      
    2. 为新注释 RequestMappingResponseBody 添加必要的导入项。

  2. 保存更改 (Ctrl/Cmd+S) 或构建项目。

    您可以在控制台窗口中查看进度和部署日志。 部署更改后,确认更新。

  3. 如需结束持续开发会话,请点击停止图标。

    Cloud Code 会删除用于开发会话的所有 Kubernetes 资源。

使用 Skaffold 配置开发微服务应用

在开发微服务应用时,分别处理不同的部分以简化调试和部署会很有帮助。

您可以通过将应用拆分为 Skaffold 模块来独立开发和调试应用的各个部分。例如,Bank of Anthos 示例是一个包含 10 项微服务的应用。该示例的 skaffold.yaml 文件将这些服务分组为五个 Skaffold 模块,名称分别为 setupdbfrontendbackendloadgenerator

定义 Skaffold 模块和配置依赖项

要定义 Skaffold 模块和配置依赖项,请执行以下操作:

  1. 打开要在其中定义模块的项目。

  2. 打开 skaffold.yaml 文件。

  3. 如果您的 skaffold.yaml 文件有多个配置,要将某个配置设为 Skaffold 模块,请指定以下代码行:

    metadata:
      name: MODULE_NAME_1
    

    例如,在 Bank of Anthos skaffold.yaml 中,db 模块定义了数据库部署:

    apiVersion: skaffold/v3
    kind: Config
    metadata:
      name: db # module defining database deployments
    requires:
    - configs:
      - setup
    build:
      artifacts:
      - image: accounts-db
        context: src/accounts-db
      - image: ledger-db
        context: src/ledger-db
    manifests:
      rawYaml:
      - dev-kubernetes-manifests/accounts-db.yaml
      - dev-kubernetes-manifests/ledger-db.yaml
    deploy:
      kubectl: {}
  4. 对于依赖于在部署当前配置之前所部署的其他配置的配置,您必须将相应配置添加到您的依赖项中。如需指定配置依赖项,请将 configs 列表添加到 skaffold.yaml 文件的 requires 部分。

    例如,Bank of Anthos skaffold.yaml 文件包含配置依赖项 setup

    如需定义依赖项,请将以下内容添加到 skaffold.yaml 文件中,其中 DEPENDENCY_NAME 是依赖项的名称。

    requires:
        - configs: DEPENDENCY_NAME
    

    以这种方式列出的配置可以引用当前项目中的同一文件或其他 skaffold.yaml 文件中定义的依赖项。

  5. 通过单独构建每个 Skaffold 模块来测试您的配置依赖项,以确保按照构建特定的 Skaffold 模块及其依赖项中的步骤,将这些模块与其依赖项一起部署。

构建特定的 Skaffold 模块及其依赖项

定义模块及其依赖项后,您可以在 launch.json 文件中指定要使用云代码运行的模块。

如果您的项目未定义 launch.json 文件,则当您运行 Cloud Code: Run on KubernetesCloud Code: Debug on Kubernetes 时,系统会提示您选择要构建的模块:

  1. 打开 Command Palette (Ctrl/Cmd+Shift+P),然后运行 Cloud Code: Run on Kubernetes
  2. 点击选择模块
  3. 选择要部署的模块,然后点击确定。每个模块都是使用其依赖项构建的。
  4. 出现提示时,选择一个映像注册表,然后按 Enter

如果您的项目具有 launch.json,请按照以下步骤选择要构建的 Skaffold 模块:

  1. 打开项目的 launch.json 文件。

  2. 修改启动配置,以添加要构建的 skaffoldFlags 选项以及以英文逗号分隔的 modules 列表。如果省略 skaffoldFlags,则会构建所有模块。

      {
        "name": "Run on Kubernetes",
        "type": "cloudcode.kubernetes",
        "request": "launch",
        "skaffoldConfig": "${workspaceFolder}/skaffold.yaml",
        "skaffoldFlags": {
           "modules": ["MODULE_NAME_2,MODULE_NAME_2"],
        "watch": true,
        "cleanUp": true,
        }
      }
    
  3. 运行您修改的启动配置。

在 Kubernetes 上进行持续开发

使用所需选项配置运行目标后,您可以选择定期运行应用,或在 IDE 上启动开发迭代周期,以将对源代码和依赖项所做的任何更改传播到您的实时应用。

Run on Kubernetes 运行目标会启动 Kubernetes 集群的开发周期。启动开发周期后,Cloud Code 会使用 Skaffold 为项目构建映像,然后对其进行标记,将其推送到已配置的代码库,并使用 kubectl 部署项目的 Kubernetes 清单。

  1. 使用可用的配置选项自定义部署。
  2. 如果您的应用配置为使用 Skaffold 模块,您可以选择要构建或部署的特定模块
  3. 打开 Command Palette(按 Ctrl/Cmd+Shift+P),然后运行 Cloud Code: Run on Kubernetes 命令。
  4. 确认要使用当前的 Kubernetes 上下文来运行应用(还是切换到首选 Kubernetes 上下文)。如需详细了解如何设置 Kubernetes 上下文,请参阅设置配置
  5. 如果您选择了远程集群作为上下文,请在出现提示时选择将映像推送到其中的映像注册数据库。如果您使用的是 Container Registry,则可以浏览至现有注册数据库,或指定要创建的注册数据库的名称。如果您的项目已启用 Artifact Registry API 并且至少有一个 Artifact Registry 代码库,则可以浏览并选择现有的 Artifact Registry 代码库。

    Cloud Code 会构建您的容器,将其推送到注册表,将 Kubernetes 配置应用到集群,并等待发布。

后续步骤

获取帮助

如需发送反馈,请在 GitHub 上报告问题,或者在 Stack Overflow 上提问。