如何使用 Kustomize 并创建一个环境,如:“http://${namePrefix}service-a/some-path”或“jdbc:db2://${namePrefix}service-b:${dbPort}/${数据库名称}"

问题描述

假设我需要像这样创建环境变量或 ConfigMap 条目:

- name: JDBC_URL
  value: "jdbc:db2://alice-service-a:50000/db1"
- name: KEYCLOAK_BASE_URL
  value: "http://alice-keycloak:8080/auth"

其中 alice- 是 namePrefix。如何使用 Kustomize 执行此操作?

我实际使用的容器确实需要引用其他容器,这些容器是上述“变量”的字符串连接。

看起来 Kustomize 的 vars 无法做到这一点。文档条目 Unstructured Edits 似乎对此进行了描述,并且位于名为“避开的功能”的标题下,所以我想这不会发生。类似的功能请求 #775 Support envsubst style variable expansion 已关闭。

来自 Helm,这很容易。

如果我想从 Helm 移动到 Kustomize,但需要创建一个 env 或 ConfigMap 条目,例如jdbc:db2://${namePrefix}-service-b:${dbPort}/${dbName}(诚然是一个人为的例子)?

我猜我将不得不求助于 Kustomize 外部的功能,例如 envsubst。是否有将这些拼凑在一起的最佳做法,或者我是否正在编写自己的 custom-deploy-script.sh

解决方法

恐怕我遇到了 Kustomize 的限制之一。

The State of Kubernetes Configuration Management: An Unsolved Problem | by Jesse Suen | Argo Project 在“Kustomize: The Bad”下有这样的说法:

无参数和模板。使 kustomize 应用程序如此可读的相同属性也可以使其非常有限。例如,我最近试图让 kustomize CLI 为自定义资源而不是部署设置图像标签,但无法做到。 Kustomize 确实有一个“vars”的概念,它看起来很像参数,但不知何故不是,只能在 Kustomize 批准的字段路径白名单中使用。我觉得这是解决方案,尽管使困难的事情变得容易,但最终使容易的事情变得困难的时代之一。

相反,除了 Kustomize 之外,我还开始使用 gomplate: A flexible commandline tool for template rendering 来解决上述挑战,但不得不使用两个并非旨在协同工作的工具并不理想。

编辑:我们最终使用 ytt 而不是 gomplate

我强烈推荐这篇文章:The State of Kubernetes Configuration Management: An Unsolved Problem。很高兴知道我不是唯一一个遇到这个障碍的人。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...