在Helm模板中使用集群ConfigMap值作为条件检查



我有一个Kubernetes集群和一个应用程序,我试图使用Helm在它上面部署。我要修改的模板文件是_helpers.tpl文件。

我的集群没有特定的ConfigMap值(假设是API_FLAG),我的应用程序需要运行Values.yaml文件中定义的可选作业(假设是publishapi,默认设置为true)。还有其他ConfigMap值需要出现才能使作业成功完成,然后我可以进一步将其添加到检查用例中。

我需要创建一个特定的工作流来检查:

  • 如果API_FLAG在我们的集群中存在,那么其他ConfigMap值将被验证并且publishapi继续作为默认值(true),但是
  • 如果API_FLAG不存在于我的集群中,那么整个publishapi步骤必须不运行,即,像设置false一样,
  • ,也不会抛出错误情况。

我知道如何使用和调用ConfigMap值,但我无法使用条件ConfiMap值作为检查。一个简单的代码片段来解释这个问题和我正在尝试的可能是:

if (env.API_FLAG) {
// get other ConfigMap values/secrets from the environment
// set Values.publishapi -> true
} else {
// set Values.publishapi -> false
}
到目前为止,我看到的关于这个模板的唯一文档只考虑了从Values中获取变量。但是我无法从kubernetes集群本身获取ConfigMap值而不抛出任何错误的任何文档。

一些进一步阅读的链接:

  • https://helm.sh/docs/chart_template_guide/named_templates/
  • https://helm.sh/docs/howto/charts_tips_and_tricks/
  • https://helm.sh/docs/chart_best_practices/templates/
  • https://helm.sh/docs/chart_template_guide/control_structures/

Kubernetes没有任何"集群变量"的概念;或者"集群环境变量"。甚至像"这个集群的名字是什么?"必须通过在部署时注入它们的值来回答。

在Helm上下文中,我将通过在每个集群中使用单独的YAML值文件来解决这个问题。这与作为图表一部分的values.yaml文件是分开的。然后你可以直接在那里指定你需要的变量:

# values.prod.yaml
apiFlag: true
publishapi: true
# values.qa.yaml
apiFlag: false
publishapi: false

这些可以与部署基础结构的其余部分一起签入源代码控制。如果你有多个类似的服务,有一个这些文件的中心副本是有意义的,或者在每个图表中复制它们是有意义的。

当您(或您的部署系统)去部署这些时,它需要传入带有helm install -f选项的正确值文件。

kubectl config use-context qa
helm upgrade my-chart . -f values.qa.yaml
...
kubectl config use-context prod
helm upgrade my-chart . -f values.prod.yaml

相关内容

  • 没有找到相关文章

最新更新