在 Cloud Code for VS Code 中运行 Kubernetes 应用

借助 Cloud Code,您可以利用 skaffold dev 在 Kubernetes 集群上轻松运行应用并查看其实时状态。您可以在本地集群(如 minikube 或 Docker Desktop)、Google Kubernetes Engine 或任何其他云服务商上运行应用。

运行应用

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

    以下示例展示了如何为一些常用的注册表指定容器映像的存储位置:

    Artifact Registry {region}-docker.pkg.dev/{project_id}/{repo-name}
    Container Registry gcr.io/{project_id}
    Docker Hub docker.io/{account}
    如果您使用的是专用 Docker Hub 代码库,请确保已正确进行身份验证
    AWS Container Repository (ECR) {aws_account_id}.dkr.ecr.{region}.amazonaws.com/{my-app}
    Azure Container Registry (ACR) {my_acr_name}.azurecr.io/{my-app}

    Cloud Code 会将此映像注册表与 Kubernetes 清单中指定的映像名称连接,以生成最终映像代码库名称。

    如需了解详情,请参阅映像注册表处理指南

    您的选择会存储在 cloudcode.kubernetes 启动配置(可在 .vscode/launch.json 中找到)中

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

    发布完成后,Cloud Code 会自动将所有声明的容器端口转发到您的机器,并在输出窗口中显示网址,以便您可以浏览正在运行的应用。

  4. 会话完成后,您可以使用以下上下文菜单命令:

    • Open Deployment Logs:使用 Cloud Code Logs Explorer 打开特定部署的应用日志
    • 打开服务网址:在 Web 浏览器中打开特定服务的应用服务网址
  5. 如果您已在启动配置中关闭监视模式,并且想要更改应用并重新构建和部署应用,请在“Develops Sessions”窗格中暂停运行操作,然后点击 “重新构建和重新部署”图标 Rebuild and redeploy the application

  6. 如需停止运行应用,请点击调试工具栏中的 调试停止图标 停止

    停止应用后,所有已部署的 Kubernetes 资源都将从集群中删除。您可以使用启动配置中的 cleanUp 标志来更改此行为。

启用 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(仅适用于 Jib 和 Buildpacks 工件。如果没有为 Buildpack 指定,则这是默认设置)。
  • infer
  • manual

skaffold.yaml 文件中的以下示例 sync 部分指定了 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 指南

存储密文

如果您的代码包含潜在的敏感数据,例如 API 密钥、密码和证书,我们建议您将它们存储为密文。借助 Cloud Code,您可以安全地将这些密文存储在 Secret Manager 中,并在需要时以编程方式提取它们。如需详细了解如何使用 Cloud Code 创建和管理密文,请参阅 Secret Manager 指南

选择构建器和构建环境

在根目录下不包含 skaffold.yaml 文件或未在其 .vscode/launch.json 文件中引用 skaffold.yaml 的项目中,您可以使用 Cloud Code 界面选择构建器和构建环境。本地构建是免费的,因为它使用您自己的资源。使用 Cloud Build 进行构建适用于速度较慢的机器或与目标集群的处理器架构不匹配的机器。如需了解使用 Cloud Build 构建应用的费用,请参阅 Cloud Build 价格

如果您要使用其中一个示例,请先删除 skaffold.yaml 文件,然后再运行构建操作。如需了解在没有界面的情况下选择构建器和构建环境的步骤,请参阅手动创建 Skaffold 配置

  1. 在没有 skaffold.yaml 文件的项目中,打开命令面板(按 Ctrl/Cmd+Shift+P 或点击 View > Command Palette),然后运行 Cloud Code: Run on KubernetesCloud Code: Debug on Kubernetes

  2. 选择构建环境。

    如果您选择 Cloud Build,请指定映像注册表。

  3. 为每个映像指定构建器(Docker 或 Buildpack)及其设置。

  4. 选中或取消选中任何配置选项,然后点击 DebugRun

您选择的选项将保存到一个 skaffold.yaml 文件中,您可以直接修改此文件,以便进一步进行自定义。

自定义启动配置

如需配置应用的运行方式,您可以自定义 skaffold.yaml 文件。

您还可以通过在 .vscode/launch.json 文件的 cloudcode.kubernetes 配置中指定以下字段来配置启动:

  • skaffoldConfig:指定 Skaffold 配置文件,其中包含构建和部署设置。
  • profile:指定您的首选 Skaffold 配置文件。 如果未定义此项,则使用默认配置文件。
  • imageRegistry:指定要将映像推送到的映像注册表。
  • watch:指定是否监控工作区中的更改并重新运行应用。除非明确设置为 false,否则默认为 true。
  • cleanUp:指定应用终止后是否删除集群中已部署的 Kubernetes 资源。除非明确设置为 false,否则默认为 true。
  • portForward:指定是否将集群上公开的 Kubernetes 资源的端口转发到本地机器。除非明确设置为 false,否则默认为 true。

获取支持

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