gpt4 book ai didi

kubernetes - rules_k8s - k8s_deploy 模板离开图像

转载 作者:行者123 更新时间:2023-12-02 11:30:53 25 4
gpt4 key购买 nike

我们有一个项目,它由 20 多个小服务组成,这些服务都驻留在同一个存储库中,并使用 bazel 构建。

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

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

我们已经得到了一个规则,它在我们的 list 中模板化图像以具有基于标签的图像名称(和 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",
)

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

我错过了什么吗?

最佳答案

我发现从构建步骤中获取容器注册表名称的解决方案是使用 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

关于kubernetes - rules_k8s - k8s_deploy 模板离开图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52156512/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com