首页 > 解决方案 > Bazel k8s_deploy 不会将 Kubernetes 资源应用到集群

问题描述

我有多个用于部署 Kubernetes 的 Bazel 规则

  1. 部署
load("@k8s_deploy//:defaults.bzl", "k8s_deploy")
k8s_object(
  name = "k8s_deployment",
  kind = "deployment",
  cluster = "cents-ideas",
  template = ":ideas.deployment.yaml",
  images = {
    "gcr.io/cents-ideas/ideas:latest": ":image"
  },
)
  1. 服务
k8s_object(
  name = "k8s_service",
  kind = "service",
  template = ":ideas.service.yaml",
)

我把所有这些k8s_object放在一起,k8s_objects这样

load("@io_bazel_rules_k8s//k8s:objects.bzl", "k8s_objects")
k8s_objects(
    name = "k8s",
    objects = [
      ":k8s_deployment",
      ":k8s_service"
    ]
)

最后,我有一个cloudbuild.yaml运行k8s_objects规则的文件:

steps:
  - id: 'push docker images and deploy changes to kubernetes'
    name: gcr.io/cloud-builders/bazel
    args: ['run', '//:kubernetes']

但是 Kubernetes 资源并没有应用到集群,虽然 Cloud Build 成功了: 云构建

是完整的构建日志。

所以基本上图像被推送到容器注册表,然后.yaml记录修改的文件,但应用于我的 Google Kubernetes Engine 集群。

标签: kubernetesgoogle-kubernetes-enginebazelgoogle-cloud-build

解决方案


我认为您需要使用“.create”或“.replace”为目标添加后缀,请参阅文档

所以你会想要这样的东西:

bazel run //:k8s.create

其中 k8s 是您的目标名称。


推荐阅读