kubernetes -- helm charts 开发: 1、 编写ConfigMap

冯和硕
2023-12-01

1 Configmap基础

问题原因: 配置信息要和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可以被用来保存单个属性,也可以用来保存一个配置
文件。    

2 使用configmap的方式

2.1 通过数据卷插件使用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


2.2 使用volume将ConfigMap作为文件或目录直接挂载

其中每一个key-value键值对都会生成一个文件,key为文件名,value为内容,下面是一个示例:
data    一栏包括了配置数据,ConfigMap可以被用来保存单个属性,也可以用来保存一个配置文件。    
配置数据可以通过很多种方式在Pods里被使用。ConfigMaps可以被用来:
1) 设置环境变量的值
2) 在容器里设置命令行参数
3) 在数据卷里面创建config文件

3 总结

ConfigMap用于存储属性键值对或者属性文件,可以后续通过volumes的形式挂在到pod中。其格式通常如下: data下面跟随键值对,键是(文件)名称,值是(文件)内容。使用方法是:


3.1 编写configmap-etc.yaml


往往会在congfigmap-etc.yaml的同级目录新建etc目录,填写配置文件模板,然后在configmap-etc.yaml中指定模板文件名称和具体生成方法。

3.2填写volumes信息

在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对应的子路径。

3.3 调试configmap是否挂载成功

可以用类似如下命令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

 

 类似资料: