Helm是kubernetes的官方包管理工具。根据官网上的描述Helm is the best way to find, share, and use software built for Kubernetes.
可以看出helm在kubernetes社区中的定位。
这篇文章并不是helm的入门文章,而是着重于helm中的chart之间如何传递value。希望进行helm入门的同学可以参考官方文档。
概述
在helm的使用过程中,经常会出现两种需求:
- 在父chart中读取子chart的某些value的值
- 在父chart中修改子chart的某些value的值
helm对于这两种场景提供了比较完备的支持,下面我们来具体讲一下解决方案。
在父chart中读取子chart的值
helm提供了两种方法来应对这种情况:
使用export格式
如果说一个child的chart在values的root下有一个叫做export
的key,那么它的parent chart就可以直接在requirements里面通过指定需要import的key来将值import到自身的values里面,例子如下:
1 | # parent's requirements.yaml file |
1 | # child's values.yaml file |
helm会发现,我们指定了要import data
这个key,所以就去child的values.yaml里面寻找,发现了这个key有被export,于是就import了它的内容。
这时候的parent的values如下:
1 | # parent's values file |
需要注意,在parent的values中data
这个key不会被import进来,只会import data
的内容。如果希望把这个key也一起import进来,可以使用下面说的方法。
使用child/parent格式
如果我们想要获得一些不在exports这个key下面的值,我们就必须指定在child中要import的路径,以及在parent中的对应路径,如下:
1 | # parent's requirements.yaml file |
根据如上的这个requirements文件,helm将会在child的chart中寻找default.data的值,并导入到parent中的myimports这个路径下。
假设parent和child初始的values如下:
1 | # parent's values.yaml file |
1 | # subchart1's values.yaml file |
那么导入之后,真正渲染出来的parent的values的值为:
1 | # parent's final values |
可以看出来,parent中的values把myint和mybool从subchart1里面import了进来。
在父chart中修改子chart的值
想要再父chart中修改子chart的值比较容易,假设子chart的名字是mychartabc
,那么我们可以很简单地在父chart的values中通过以下方式进行修改:
1 | # in parent's values.yaml |
这样就可以修改子chart的值了。
出处
https://docs.helm.sh/developing_charts/#importing-child-values-via-requirements-yaml
https://docs.helm.sh/chart_template_guide/#overriding-values-from-a-parent-chart