kubernetes - 如何知道在 helm 图表中暴露了哪些值/可以自定义哪些值?
问题描述
我可能只是非常慢,但我无法解决这个问题。
- 有存储库/集线器(artifacthub 等),其中包含指向具有掌舵图的其他存储库的指针
- 如果我知道名称/版本/存储库,我可以在我的 helm Chart.yaml 文件中将这些图表添加为“依赖项”
- 例如,对于https://artifacthub.io/packages/helm/vultr/cert-manager-webhook-vultr,version=1.0.0,dependency=vultr/cert-manager-webhook-vultr,repo=https ://vultr.github.io/helm-charts (这是正确的吗?为什么这3个值不是超级可见的。尝试下拉图表时似乎总是猜谜游戏)
- 在 artifacthub 上,有一个“模板”部分,其中包含各种 yaml 文件。这是可以在图表上修改的属性吗?我定义的这些 helm 模板 yamls 如何应用于我已安装的图表?(例如,如果我同时拥有 nginx 和 traefik 入口,它们是否都会获得所有适用于 kind:Ingress 的 yaml?)
- 为什么 helm 要求我将集群下拉到本地 repo 才能使用它?人们是否使用 helm 来跟踪“现实世界”中的发布?
- 在什么情况下我会只执行“helm install X”而不是将其添加到我的 Chart.yaml 依赖项中?
helm 文档(和许多教程)非常简洁,只展示了一个脚本示例。我不应该想要我所有的“基础设施即代码”吗?我不明白对“helm add repo”和“helm install”的不断建议,然后移交任何定制?
解决方案
我认为这个问题的有趣部分是最后一个要点,围绕什么helm install
;剩下的就是细节。
我可以想象四种不同“种类”的 Helm 图表:
库图表仅包含
{{- define -}}
模板块,但不包含 Kubernetes 资源。这是 Helm 3 中的一流概念,但在野外非常罕见。“基础设施”图表包含您可能不直接使用的预打包软件,如 PostgreSQL 或 Redis。他们可以依赖图书馆图表。
例如,“应用程序”图表包含您直接使用的单个微服务。他们可能依赖于基础设施图表,例如获取本地服务数据库。
“伞形”图表取决于几个应用程序的特定版本并描述组合系统。
因此,如果您有一个由多个服务组成的系统,并且您想跟踪它们的发布,那么您有几个选择。一种是构建一个伞形图表,并且helm upgrade
该图表随着新组件的构建到达;这有 Helm 喜欢合并依赖项的机械问题,因此“服务本地”数据库依赖项将全部合并为一个。您可以helm install
单独使用应用程序图表,也可以使用Helmfile或Helmsman等工具来管理一组相邻的已安装图表。
但是,在该层次结构中,您通常会安装“伞形”或“应用程序”图表,但不会直接安装“基础设施”或库图表。除了在早期实验中,您通常不会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,与您的核心应用程序设置并行,或者如果您确定在集群中只运行系统的一个副本,则可以一起管理它们。
推荐阅读
- c# - 如何在c#中检查指定的正则表达式
- mysql - mysql:如何从两个表中进行选择
- python - Pytest - 测试解析器错误:无法识别的参数
- ios - 在 iOS 中构建警报应用程序
- css - Chrome 将 1px 计算为 6px,弄乱了使用 rem 的样式
- jquery - 在单独的 div 中以可视方式向用户显示选定的复选框
- php - 页脚脚本在 codeigniter 中不起作用
- javascript - 我们可以从一个无状态组件传递多个道具并将其作为另一个无状态组件中的单个参数获取吗?
- java - Spring Boot 在部署为传统战争时尝试运行嵌入式 Tomcat
- php - Laravel 传递可选变量来查看