如需在 Cloud Shell 的 Cloud 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 artifacts.)这是 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 集群,而无需停止和移除部署、手动构建和标记映像或更新集群。
标准迭代周期如下所示:
在项目中进行更改。例如,如果使用 Cloud Code Java 留言板应用,请将新端点添加到
FrontendController
类,如下所示:打开
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); }
为新注释
RequestMapping
和ResponseBody
添加必要的导入项。
保存更改 (
Ctrl
/Cmd+S
) 或构建项目。您可以在控制台窗口中查看进度和部署日志。 部署更改后,确认更新。
如需结束持续开发会话,请点击停止图标。
Cloud Code 会删除用于开发会话的所有 Kubernetes 资源。
使用 Skaffold 配置开发微服务应用
在开发微服务应用时,单独使用 部分,以简化调试和部署。
您可以通过拆分每个部分来独立开发和调试应用的各个部分
转换为 Skaffold 模块。例如,
Bank of Anthos 示例
是一个包含十个微服务的应用该示例的
skaffold.yaml
文件将这些服务划分成五个 Skaffold 模块,分别名为 setup
、db
、
frontend
、backend
和 loadgenerator
。
定义 Skaffold 模块和配置依赖项
要定义 Skaffold 模块和配置依赖项,请执行以下操作:
打开要在其中定义模块的项目。
打开
skaffold.yaml
文件。如果您的
skaffold.yaml
文件有多个配置,如需 配置 Skaffold 模块,请指定以下行:metadata: name: MODULE_NAME_1
例如,在 Bank of Anthos
skaffold.yaml
中,db
模块定义了数据库部署:对于依赖于 可以部署当前配置,因此您必须将配置添加到 依赖项如需指定配置依赖项,请将
configs
列表添加到skaffold.yaml
文件的requires
部分。例如,Bank of Anthos
skaffold.yaml
文件包含配置依赖项setup
。如需定义依赖项,请将以下内容添加到
skaffold.yaml
文件中,其中 DEPENDENCY_NAME 是依赖项的名称。requires: - configs: DEPENDENCY_NAME
以这种方式列出的配置可以引用同一文件中定义的依赖项或当前项目中的其他
skaffold.yaml
文件。通过单独构建每个 Skaffold 模块来测试您的配置依赖项,以确保按照构建特定 Skaffold 模块及其依赖项中的步骤部署它们及其依赖项。
构建特定的 Skaffold 模块及其依赖项
定义模块及其依赖项后,您可以指定
launch.json
文件中使用 Cloud 代码运行的模块。
如果您的项目未定义 launch.json
文件,则当您运行 Cloud
代码:Run on Kubernetes 或 Cloud Code: Debug on Kubernetes,
提示您选择要构建的模块:
- 打开 Command Palette (
Ctrl
/Cmd
+Shift
+P
),然后运行 Cloud Code: Run on Kubernetes。 - 点击选择模块。
- 选择要部署的模块,然后点击确定。每个 模块是基于其依赖项构建的。
- 出现提示时,选择一个映像注册表,然后按
Enter
。
如果您的项目有 launch.json
,请按照以下步骤选择 Skaffold
要构建的模块:
打开项目的
launch.json
文件。修改启动配置,以添加
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, } }
运行您修改的启动配置。
在 Kubernetes 上进行持续开发
使用所需的选项配置运行目标后,您可以 选择定期运行您的应用,或开始开发 迭代周期,以便将对源代码和 添加到运行中的应用
Run on Kubernetes 运行目标启动 Kubernetes 应用的开发周期, Kubernetes 集群启动开发周期后, Cloud Code 使用 Skaffold 为 然后对其进行标记,将其推送到配置的代码库,并使用 kubectl 部署项目的 Kubernetes 清单。
- 使用可用的配置选项自定义部署。
- 如果您的应用配置为使用 Skaffold 模块,您可以 选择要构建或部署的特定模块。
- 打开 Command Palette(按
Ctrl
/Cmd
+Shift
+P
),然后运行 Cloud Code: Run on Kubernetes 命令。 - 确认要使用当前的 Kubernetes 上下文来运行应用(还是切换到首选 Kubernetes 上下文)。如需详细了解如何设置 Kubernetes 上下文,请参阅设置配置。
如果您选择了远程集群作为上下文,请在出现提示时选择将映像推送到其中的映像注册数据库。如果您使用的是 Container Registry,则可以浏览至现有注册数据库,或指定要创建的注册数据库的名称。如果您的项目已启用 Artifact Registry API 并且至少有一个 Artifact Registry 代码库,则可以浏览并选择现有的 Artifact Registry 代码库。
Cloud Code 会构建您的容器,将其推送到注册表,将 Kubernetes 配置应用到集群,并等待发布。
后续步骤
- 使用 Cloud Code 的内置 minikube 集群进行本地开发。
- 在 Cloud Code 中调试应用
- 详细了解 Skaffold 的文件同步功能