首页 > 解决方案 > 如何知道在 helm 图表中暴露了哪些值/可以自定义哪些值?

问题描述

我可能只是非常慢,但我无法解决这个问题。

helm 文档(和许多教程)非常简洁,只展示了一个脚本示例。我不应该想要我所有的“基础设施即代码”吗?我不明白对“helm add repo”和“helm install”的不断建议,然后移交任何定制?

标签: kuberneteskubernetes-helm

解决方案


我认为这个问题的有趣部分是最后一个要点,围绕什么helm install;剩下的就是细节。

我可以想象四种不同“种类”的 Helm 图表:

  1. 库图表包含{{- define -}}模板块,但不包含 Kubernetes 资源。这是 Helm 3 中的一流概念,但在野外非常罕见。

  2. “基础设施”图表包含您可能不直接使用的预打包软件,如 PostgreSQL 或 Redis。他们可以依赖图书馆图表。

  3. 例如,“应用程序”图表包含您直接使用的单个微服务。他们可能依赖于基础设施图表,例如获取本地服务数据库。

  4. “伞形”图表取决于几个应用程序的特定版本并描述组合系统。

因此,如果您有一个由多个服务组成的系统,并且您想跟踪它们的发布,那么您有几个选择。一种是构建一个伞形图表,并且helm upgrade该图表随着新组件的构建到达;这有 Helm 喜欢合并依赖项的机械问题,因此“服务本地”数据库依赖项将全部合并为一个。您可以helm install单独使用应用程序图表,也可以使用HelmfileHelmsman等工具来管理一组相邻的已安装图表。

但是,在该层次结构中,您通常会安装“伞形”或“应用程序”图表,但不会直接安装“基础设施”或库图表。除了在早期实验中,您通常不会helm install bitnami/redis,而是将其作为实际应用程序的依赖项包含在内。


您在使用依赖关系图的机制上基本上是正确的。每个图表都包含一个templates目录,其中的模板化 YAML 文件安装在集群中。每个图表还在values.yaml其顶层包含一个文件,这是配置依赖关系图表的唯一方法。父图表可以在具有依赖项名称的键下包含其依赖项的配置

# application/values.yaml
#   Chart.yaml depends on a specific chart named "infrastructure"
infrastructure:
  # This would be a top-level key in values.yaml in
  # the "infrastructure" chart
  username: foo

您不能真正从依赖关系图中修改实际的模板内容;您只能自定义通过设置值生成的内容。有些图表比其他图表具有更好的记录值,而更好的图表则在其README.md文件中包含所有详细信息。


你问了几个实现选择,很难给出具体的答案。您需要将依赖项下载到本地charts子目录中(例如, with helm dep up),但我不知道为什么;我可以想象离线使用的用例,您将图表及其依赖项传输到隔离网络并在那里运行安装,但我也可以想象 Helm 更喜欢charts目录并自动下载。同样,查找图表实际上可能很棘手,但其中一个原因是维护包存储库在财务和运营上都很复杂。曾经有一个官方的“稳定”图表存储库,但已停产。


我将在这里提出的最后一件是“集群基础设施”的概念。例如,您可以想象想要运行一个入口控制器或日志代理,它们可能被打包为一个 Helm 图表。在我最初的层次结构中,我将这些视为“应用程序”;服务图表可能有type: Ingress资源,但它本身不依赖于 Nginx 或 Traefik 入口控制器。您可以为集群基础设施设置 Helmfile,与您的核心应用程序设置并行,或者如果您确定在集群中只运行系统的一个副本,则可以一起管理它们。


推荐阅读