Kustomize ConfigMapGenerate自动生成ConfigMap中的坑

背景问题

最近在使用Kubernetes ConfigMap过程当中,因为须要把配置文件复制ConfigMap yaml编排文件中,在copy的过程当中,容易出错,因而引入了Kustomize ConfigMapGenerate,经过引用外部配置文件,自动生成配置,但在使用过程当中碰到新问题。java

  • ConfigMap名称生成多余 hash
  • 加载到配置文件中内容格式错乱。

如下分别对这两个个问题进行分析、并给出具体解决方式。linux

ConfigMapGenerate使用

ConfigMapGeneratorKustomize 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 ConfigMapload过程当中发现文件中包含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资源存储对象,以及生成的配置信息出现格式错乱问题如何解决。但愿可以帮助到你们,谢谢。

推荐阅读


深刻探究 K8S ConfigMap 和 Secret

Kustomize 轻松解决多环境 yaml 编排文件的管理

完整的Kubernetes Deployment yaml文件应该包含什么?


原创不易,随手关注或者”三连“,诚挚感谢!


本文分享自微信公众号 - 云原生技术爱好者社区(programmer_java)。
若有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一块儿分享。

相关文章
相关标签/搜索