使用 Google Cloud 和 Kubernetes YAML

Cloud Code 旨在通过针对结构和有效值对架构执行 lint 请求并提供描述性错误来简化 Kubernetes 和 Cloud Build 配置。Cloud Code 提供针对常用架构的开箱即用解决方案、智能补全功能和通过悬停鼠标查看文档的功能。

支持的 YAML 配置文件

Cloud Code 还支持常用的 Kubernetes 自定义资源定义 (CRD),例如 Kubeflow,开箱即用。

使用自定义架构

借助 Cloud Code,您可以通过 settings.json 文件中的 cloudcode.yaml.crdSchemaLocations 设置提供自己的 CRD 架构。您可以指向本地文件或网址。指向 github.com 的网址会自动转换为 raw.githubusercontent.com

从集群中拉取架构

在 Kubernetes Explorer 中切换到运行 Kubernetes v1.16 及更高版本的集群时,Cloud Code 会自动拉取所有已安装的 CRD 的架构。

使用代码段进行配置

借助针对常用 YAML 架构的开箱即用代码段(使用 Command/Ctrl+Space 即可查看选项),您可以轻松启动新的 YAML 文件或向现有的 YAML 文件添加内容而不会产生错误,同时仍然遵循最佳做法。使用 Cloud Code,您可以更轻松地处理重复字段;只需填写一个字段,Cloud Code 即会填充其余的实例。

使用代码段处理重复字段

Cloud Code 提供以下代码段:

  • Anthos Config Management - Cluster
  • Anthos Config Management - Cluster Selector
  • Anthos Config Management - Config Management
  • Anthos Config Management - Namespace Selector
  • Cloud Build - Cloud Run deployment
  • Cloud Build - Docker container build
  • Cloud Build - GKE deployment
  • Cloud Build - GKE Skaffold deployment
  • Cloud Build - Go build
  • Cloud Build - Terraform plan + apply
  • Config Connector - BigQueryDataset
  • Config Connector - BigQueryTable
  • Config Connector - BigtableCluster
  • Config Connector - BigtableInstance
  • Config Connector - PubSubSubscription
  • Config Connector - PubSubTopic
  • Config Connector - RedisInstance
  • Config Connector - SpannerInstance
  • Kubernetes - ConfigMap
  • Kubernetes - Deployment
  • Kubernetes - Ingress
  • Kubernetes - Pod
  • Kubernetes - Secret
  • Kubernetes - Service
  • Migrate for Anthos - Export
  • Migrate for Anthos - PersistentVolumeClaim
  • Migrate for Anthos - StatefulSet
  • Skaffold - Bazel
  • Skaffold - Getting-started
  • Skaffold - Helm deployment
  • Skaffold - Kaniko

启用 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 指南

补全上下文

Cloud Code 将根据当前架构提供上下文补全信息和相关文档,以帮助您选择正确的选项。

针对 Kubernetes 架构补全上下文

验证 YAML 架构

Cloud Code 通过标记 YAML 文件中的无效标记和值并尽可能给出修正建议,来提供架构验证支持。

名称字段的值带红色下划线以突出显示无效值“1234”;悬停文字状态:“类型错误。预期字符串。”

通过悬停鼠标浏览文档

当您将鼠标悬停在架构中的某个值上方时,Cloud Code 会显示相关文档。

在架构中悬停鼠标可查看文档信息

访问资源定义

右键点击相应内容并选择 Go to DefinitionPeek Definition,即可快速查看资源定义。

右键点击架构可查看定义信息

应用 YAML 文件

如需使用当前文件应用配置更改,您可以使用 Command Palette(可通过管理菜单 “管理”图标 访问)中的 Cloud Code:使用 Kubernetes 部署的资源来应用当前 JSON/YAML 文件

此命令将显示一个比较差异视图,供您查看更改。当系统提示您是否要应用此更改时,请点击应用。这将运行 kubectl apply -f

YAML 文件之间的差异

如果您想要查看源代码控制系统中的 YAML 文件与已部署的 YAML 文件之间的差异,可以使用 Command Palette(可通过管理菜单 “管理”图标 访问)中的 Cloud Code: Diff the current JSON/YAML file with Kubernetes deployed resource。系统将显示一个差异视图,供您比较和对比两种架构文件。

Kubernetes 架构的“比较差异”视图

对 YAML 文件执行试运行

如需对配置执行试运行并检查其有效性,您可以使用 Command Palette(可通过管理菜单 “管理”图标 访问)中的 Cloud Code: Dry-run current config for server-side validationCloud Code: Dry-run current config for client-side validation

Command Palette 中列出的试运行命令和已选择进行服务器端验证的当前试运行配置

这将运行 kubectl apply -f dry-run=server(对于客户端选项,则为 kubectl apply -f dry-run=client),并以消息框通知形式显示成功验证(如果您的配置文件无效,则会显示错误消息)。

在以下示例中,配置文件 hello.deployment.yaml 的服务器端试运行验证会在尝试创建部署时返回错误,因为指定的命名空间 random-namespace 不存在。

“hello.deployment.yaml”上的服务器端试运行验证失败,并以消息框通知形式显示错误消息。错误详情可在输出通道中找到;命名空间“random-namespace”不存在

使用 Secret

使用配置映射和 Secret 是使用 Kubernetes 的关键环节。 如需使用 Cloud Code 查看 base64 Secret 的上下文,请将鼠标悬停在相应 Secret 上方以将其解码。

使用 Cloud Code 时悬停鼠标可将密文解密

获取支持

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