【问题标题】:rules_k8s - k8s_deploy template away imagesrules_k8s - k8s_deploy 模板远离图像
【发布时间】:2018-09-03 21:51:33
【问题描述】:

我们有一个项目,其中包含 20 多个小型服务,这些服务都驻留在同一个存储库中,并使用 bazel 构建。

为了减少管理开销,我们希望自动生成尽可能多的内容,包括我们的图像和 k8s 部署。 所以问题是:

有没有办法避免通过规则或函数在k8s_deploy步骤中设置image key?

我们已经有了一个规则,该规则将清单中的图像模板化为基于标签的图像名称(和 k8s 对象名称):

_TEMPLATE = "//k8s:deploy.yaml"

def _template_manifest_impl(ctx):
  name = '{}'.format(ctx.label).replace("//cmd/", "").replace("/", "-").replace(":manifest", "")
  ctx.actions.expand_template(
    template = ctx.file._template,
    output = ctx.outputs.source_file,
    substitutions = {
      "{NAME}": name,
    },
  )

template_manifest = rule(
  implementation = _template_manifest_impl,
  attrs = {
    "_template": attr.label(
      default = Label(_TEMPLATE),
      allow_single_file = True,
    ),
  },
  outputs = {"source_file": "%{name}.yaml"},
)

这样//cmd/endpoints/customer/log 下的服务将生成图像eu.gcr.io/project/endpoints-customer-log

虽然到目前为止这工作正常,但我们仍然必须手动设置 images 字典为 k8s_deploy 像这样:

k8s_deploy(
    name = "dev",
    images = {
        "eu.gcr.io/project/endpoints-customer-log:dev": ":image",
    },
    template = ":manifest",
)

摆脱它会很棒,但我还没有找到方法。 使用规则不起作用,因为图像不带标签,使用函数不起作用,因为我发现无法访问其中的上下文。

我错过了什么吗?

【问题讨论】:

    标签: kubernetes bazel


    【解决方案1】:

    我发现从构建步骤中获取容器注册表名称的解决方案是使用 bazel 进行构建,使用 skaffold 进行部署。这两个步骤都在同一个 CI 管道中执行。

    我的 skaffold.yaml 非常简单,并且提供了 bazel 目标到 gcr 名称的映射。

    apiVersion: skaffold/v2alpha4
    kind: Config
    metadata:
      name: my_services
    build:
      tagPolicy:
        gitCommit: 
          variant: AbbrevCommitSha
      artifacts:
      - image: gcr.io/jumemo-dev/service1
        bazel:
          target: //server1/src/main/java/server1:server1.tar
      - image: gcr.io/jumemo-dev/service2
        bazel:
          target: //server2/src/main/java/server2:server2.tar
    

    它是通过以下方式调用的:

    $ skaffold build
    

    【讨论】:

      猜你喜欢
      • 2018-09-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-22
      • 1970-01-01
      • 2021-12-14
      • 2013-08-11
      相关资源
      最近更新 更多