背景问题
最近在使用Kubernetes ConfigMap
过程当中,因为须要把配置文件复制ConfigMap yaml
编排文件中,在copy
的过程当中,容易出错,因而引入了Kustomize ConfigMapGenerate
,经过引用外部配置文件,自动生成配置,但在使用过程当中碰到新问题。java
-
ConfigMap
名称生成多余hash
。 -
加载到配置文件中内容格式错乱。
如下分别对这两个个问题进行分析、并给出具体解决方式。linux
ConfigMapGenerate使用
ConfigMapGenerator
是Kustomize ConfigMap
自动生成配置插件,使用方式很是简单,以下图所示:git
执行
kubectl apply -k .
执行完成以后查看ConfigMap
, ConfigMap
却是生成了,可是后边多了一堆hash
字符串如:test-conf-tmc5f824gt。
。github

why?web
deployment
里面还须要引用这个ConfigMap
呢?经过测试发现这个hash
后缀,是针对文件内容生成的hash
,若是文件内容没有变化,这个hash
不会变化,不然从新生成。正则表达式
原来这个hash
相似于ConfigMap
版本的一个概念,可是我在使用过程当中对配置文件的版本没有什么要求。vim
解决方案
经过查看文档能够发现https://github.com/kubernetes-sigs/kustomize/blob/master/examples/generatorOptions.md
,只须要添加参数便可控制版本号变化:windows

一顿操做以后,就能够经过一个引用把配置自动ConfigMap
资源对象,咱们只须要修改咱们原来的配置文件,而后从新生成便可完成ConfigMap
的更新,并且不会出现多余字符串,固然若是你使用了helm
等模板工具,能够考虑使用这个版本号,这样的话ConfigMap
也有了版本的概念。微信
ConfigMap中文本错乱

当我经过kubectl
获取ConfigMap
配置信息以后,日志xml
文本中出现了大量的\n\t
,虽然不影响使用,可是看起来糟心,并且当咱们须要临时修改配置的时候,看起来眼花缭乱,影响工做效率。(固然普通的properties
配置文件也可能会出现这种问题,可是KV
对配置文件不多使用tab
缩进功能)app
why?
经过idea
编辑器打开隐藏字符(或者经过vim set list
功能,也能够显示隐藏字符),会发现xml
文件中存在tab
缩进字符,而对于Kubernetes yaml
编排文件不容许使用tab
只能使用空格,以下图所示。


缘由分析
猜想缘由是由于Kubernetes ConfigMap
在load
过程当中发现文件中包含tab
,直接转化为\n\t
。若是把文本里面的tab所有替换空格,会不会直接解决问题呢?按照这个思路,我获得了以下两种解决方式。
解决方案(1)
经过编辑器正则表达式把\t
替换为4
个空格,再次上传日志配置文件,以后经过ConfigMapGenerate生成配置时,发现问题已经解决,以下所示:
解决方案(2)
使用xmllint --format logback.xml -o logback.xml
进行格式化配置文件,经过这种方式也能够解决如上问题。
另外由于配置文件的编辑可能在windows
操做系统上,而ConfigMap
的生成在linux
,这会致使文件中出现^M
不可见字符,可使用dos2unix
转换文件格式,解决该问题。
总结
本文主要介绍了如何使用Kustomize ConfigMapGenerate
自动生成Kubernetes ConfigMap
资源存储对象,以及生成的配置信息出现格式错乱问题如何解决。但愿可以帮助到你们,谢谢。
推荐阅读
Kustomize 轻松解决多环境 yaml 编排文件的管理
完整的Kubernetes Deployment yaml文件应该包含什么?
原创不易,随手关注或者”三连“,诚挚感谢!
本文分享自微信公众号 - 云原生技术爱好者社区(programmer_java)。
若有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一块儿分享。