kubernetes自动生成ConfigMap中的坑怎么解决

本篇内容主要讲解“kubernetes自动生成ConfigMap中的坑怎么解决”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“kubernetes自动生成ConfigMap中的坑怎么解决”吧!

背景问题

最近在使用Kubernetes ConfigMap过程中,由于需要把配置文件复制ConfigMap yaml编排文件中,在copy的过程中,容易出错,于是引入了Kustomize ConfigMapGenerate,通过引用外部配置文件,自动生成配置,但在使用过程中碰到新问题。

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

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

ConfigMapGenerate使用

ConfigMapGeneratorKustomize ConfigMap自动生成配置插件,使用方式非常简单,如下图所示:

kubernetes自动生成ConfigMap中的坑怎么解决

执行kubectl apply -k .执行完成之后查看ConfigMap, ConfigMap倒是生成了,但是后边多了一堆hash字符串如:test-conf-tmc5f824gt。

kubernetes自动生成ConfigMap中的坑怎么解决  

why?

deployment里面还需要引用这个ConfigMap呢?通过测试发现这个hash后缀,是针对文件内容生成的hash,如果文件内容没有变化,这个hash不会变化,否则重新生成。

原来这个hash类似于ConfigMap版本的一个概念,但是我在使用过程中对配置文件的版本没有什么要求。

解决方案

通过查看文档可以发现https://github.com/kubernetes-sigs/kustomize/blob/master/examples/generatorOptions.md,只需要添加参数即可控制版本号变化:

kubernetes自动生成ConfigMap中的坑怎么解决  

一顿操作之后,就可以通过一个引用把配置自动ConfigMap资源对象,我们只需要修改我们原来的配置文件,然后重新生成即可完成ConfigMap的更新,而且不会出现多余字符串,当然如果你使用了helm等模板工具,可以考虑使用这个版本号,这样的话ConfigMap也有了版本的概念。

ConfigMap中文本错乱

kubernetes自动生成ConfigMap中的坑怎么解决  

当我通过kubectl获取ConfigMap配置信息之后,日志xml文本中出现了大量的\n\t,虽然不影响使用,但是看起来糟心,而且当我们需要临时修改配置的时候,看起来眼花缭乱,影响工作效率。(当然普通的properties配置文件也可能会出现这种问题,但是KV对配置文件很少使用tab缩进功能)

why?

通过idea编辑器打开隐藏字符(或者通过vim set list功能,也可以显示隐藏字符),会发现xml文件中存在tab缩进字符,而对于Kubernetes yaml编排文件不允许使用tab只能使用空格,如下图所示。

kubernetes自动生成ConfigMap中的坑怎么解决  
kubernetes自动生成ConfigMap中的坑怎么解决  
 

原因分析

猜测原因是因为Kubernetes ConfigMapload过程中发现文件中包含tab,直接转化为\n\t。如果把文本里面的tab全部替换空格,会不会直接解决问题呢?按照这个思路,我得到了如下两种解决方式。

 

解决方案(1)

通过编辑器正则表达式把\t替换为4个空格,再次上传日志配置文件,之后通过ConfigMapGenerate生成配置时,发现问题已经解决,如下所示:kubernetes自动生成ConfigMap中的坑怎么解决

解决方案(2)

使用xmllint --format logback.xml -o logback.xml进行格式化配置文件,通过这种方式也可以解决如上问题。

另外因为配置文件的编辑可能在windows操作系统上,而ConfigMap的生成在linux,这会导致文件中出现^M不可见字符,可以使用dos2unix转换文件格式,解决该问题。

到此,相信大家对“kubernetes自动生成ConfigMap中的坑怎么解决”有了更深的了解,不妨来实际操作一番吧!这里是亿速云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!