云原生应用管理:原理与实践
上QQ阅读APP看书,第一时间看更新

2.10.2 给template添加动态变量

直接定义ConfigMap的名字不是一种好的方式,在资源较多的大型Kubernetes集群中,不方便直观寻找到对应的资源,因此我们希望能够给ConfigMap的名字前增加对应的release名称。

下面我们把ConfigMap内容更新成如下的样子。


apiVersion: v1
kind: ConfigMap
metadata:
  name: {{ .Release.Name }}-configmap
data:
  myvalue: "Hello World"

这里最大的改变就是ConfigMap的名称改为了{{.Release.Name}}-configmap。这个表达式中{{.Release.Name}}就是自动将Relase名称注入ConfigMap名字前面。这个Release是Helm的一个内置对象,里面涵盖了很多Release的内置信息,下面再安装一下这个Chart。


[root@iZ8vb0qditk1qw27yu4k5nZ templates]# helm install ../../myChart/
NAME:   bald-orangutan
LAST DEPLOYED: Tue Aug 27 20:40:06 2019
NAMESPACE: default
STATUS: DEPLOYED

RESOURCES:
==> v1/ConfigMap
NAME                      DATA  AGE
bald-orangutan-configmap  1     0s

[root@iZ8vb0qditk1qw27yu4k5nZ templates]# helm get manifest bald-orangutan

---
# Source: myChart/templates/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: bald-orangutan-configmap
data:
  myvalue: "Hello World"

注意这个Release名称为bald-orangutan,ConfigMap的名称为bald-orangutan-configmap,可以发现Release的名字已经被放到ConfigMap名字前了,说明{{.Release.Name}}是生效的。

这里有一个小技巧,如果你只想看一下Helm渲染完毕后Chart输出的结果是什么,并不想直接安装它,可以使用--dry-run功能。--dry-run会简单渲染Chart后输出结果,但是不会真正将资源安装到对应的Kubernetes集群中。


[root@iZ8vb0qditk1qw27yu4k5nZ templates]# helm install ../../myChart/ --dry-run  --debug
[debug] Created tunnel using local port: '44209'

[debug] SERVER: "127.0.0.1:44209"

[debug] Original Chart version: ""
[debug] CHART PATH: /root/myChart

NAME:   reeling-ibis
REVISION: 1
RELEASED: Tue Aug 27 20:46:02 2019
CHART: myChart-0.1.0
USER-SUPPLIED VALUES:
{}

COMPUTED VALUES:
{}

HOOKS:
MANIFEST:

---
# Source: myChart/templates/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: reeling-ibis-configmap
data:
  myvalue: "Hello World"

使用--dry-run可以很方便地测试你的Chart编写是否正确,但是并不检验yaml的正确性,不能保证Kubernetes一定会接受输出的yaml资源。