【问题标题】:Bazel k8s_deploy Does not Apply Kubernetes Resources to ClusterBazel k8s_deploy 不会将 Kubernetes 资源应用到集群
【发布时间】:2020-02-02 12:05:58
【问题描述】:

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

  1. deployments:
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. services:
k8s_object(
  name = "k8s_service",
  kind = "service",
  template = ":ideas.service.yaml",
)

我已将所有这些 k8s_object 放在一个 k8s_objects 中,例如 this

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

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

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

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

Here 是完整的构建日志。

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

【问题讨论】:

    标签: kubernetes google-kubernetes-engine bazel google-cloud-build


    【解决方案1】:

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

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

    bazel run //:k8s.create
    

    其中 k8s 是您的目标名称。

    【讨论】:

    • 我试过 .create.apply 但它们都导致了这个错误:stackoverflow.com/questions/60029288
    • 建议 1:你的构建器镜像中安装了 kubectl 吗?我构建了一个包含特定版本的 bazel + kubectl 的云构建器映像。
    • 建议 2:在您的 cloudbuild.yaml 中,您需要获取集群凭据:gcloud container clusters get-credentials --zone
    • 建议 2 是否只是又一个步骤?或者它会是什么样子?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-09-06
    • 1970-01-01
    • 2021-05-22
    • 2021-01-09
    • 2020-07-03
    • 1970-01-01
    • 2018-05-11
    相关资源
    最近更新 更多