问题原因: 配置信息要和docker image解耦,不能修改配置就重做镜像。
作用:ConfigMap可以保存但个属性或整个配置文件
原理:保存key-value配置数据,该数据可以在pods里面使用。
可以理解为是多个属性文件的引用,认为是/etc目录,专门用来存储配置文件的目录。
示例文件1:
ceilometer/temp
{{- if empty .Values.conf.ceilometer.api.aodh_url -}}
{{- tuple "alarming" "internal" "api" . | include "helm-toolkit.endpoints.keystone_endpoint_uri_lookup"| set .Values.conf.ceilometer.api "aodh_url" | quote | trunc 0 -}}
{{- end -}}
---
apiVersion: v1
kind: ConfigMap
metadata:
name: ceilometer-etc
data:
rally_tests.yaml: |+
{{- tuple .Values.conf.rally_tests "etc/_rally_tests.yaml.tpl" . | include "helm-toolkit.utils.configmap_templater" }}
ceilometer.conf: |+
{{ include "helm-toolkit.utils.to_oslo_conf" .Values.conf.ceilometer | indent 4 }}
解释:
data 一栏包括了配置数据,ConfigMap可以被用来保存单个属性,也可以用来保存一个配置
文件。
ConfigMap也可以在数据卷里面被使用。还是这个ConfigMap。
apiVersion: v1
kind: ConfigMap
metadata:
name: special-config
namespace: default
data:
special.how: very
special.type: charm
在数据卷里面使用这个ConfigMap,有不同的选项。最基本的就是将文件填入数据卷,在这个
文件中,键就是文件名,键值就是文件内容:
apiVersion: v1
kind: Pod
metadata:
name: dapi-test-pod
spec:
containers:
- name: test-container
image: gcr.io/google_containers/busybox
command: [ "/bin/sh", "-c", "cat /etc/config/special.how" ]
volumeMounts:
- name: config-volume
mountPath: /etc/config
volumes:
- name: config-volume
configMap:
name: special-config
restartPolicy: Never
其中每一个key-value键值对都会生成一个文件,key为文件名,value为内容,下面是一个示例:
data 一栏包括了配置数据,ConfigMap可以被用来保存单个属性,也可以用来保存一个配置文件。
配置数据可以通过很多种方式在Pods里被使用。ConfigMaps可以被用来:
1) 设置环境变量的值
2) 在容器里设置命令行参数
3) 在数据卷里面创建config文件
ConfigMap用于存储属性键值对或者属性文件,可以后续通过volumes的形式挂在到pod中。其格式通常如下: data下面跟随键值对,键是(文件)名称,值是(文件)内容。使用方法是:
往往会在congfigmap-etc.yaml的同级目录新建etc目录,填写配置文件模板,然后在configmap-etc.yaml中指定模板文件名称和具体生成方法。
在pod中的volumes(与containers平级)的段落下,填写如下内容:
volumes:
- name: myproject-etc
configMap:
name: myproject-etc
defaultMode: 0644
类似上述内容: 其中指定挂载的是configMap,并指定configMap的名称。
然后在容器的volumeMounts段落下,填写如下内容:
volumeMounts:
- name: myproject-etc
mountPath: /etc/myproject.conf
subPath: myproject.conf
注意: name对应的名字,需要和volumes中某个name匹配,mountPath:指定了挂载到该容器的位置,subPath:指定的是该volumes中某个name对应的子路径。
可以用类似如下命令dry-run进行调试:
helm install --dry-run --debug myproject --namespace mynamespace
请将myproject替换为自己需要的项目名称
请将mynamespace替换为自己需要的命名空间
参考:
[1] kubernetes-handbook.pdf
[2] https://www.cnblogs.com/breezey/p/6582082.html