前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Kustomize ConfigMapGenerate自动生成ConfigMap中的坑

Kustomize ConfigMapGenerate自动生成ConfigMap中的坑

作者头像
用户5166556
发布2020-08-02 22:43:47
2.2K0
发布2020-08-02 22:43:47
举报
文章被收录于专栏:让技术和时代并行

ConfigMap作为Kubernetes中配置资源存储对象,通过ConfigMap可以存储各种各样的配置文件,具体使用方式: 深入探究 K8S ConfigMap 和 Secret,但在使用过程中会碰到各种不方便,一般情况下,特别是没有接入分布式配置中心的服务,配置文件是存储在服务所在特定目录下,这就导致需要我们把配置copy或者loadKubernetes ConfigMap配置资源对象中,因为ConfigMap使用yaml格式进行存储,改变原来的使用习惯,使用和修改过程中难免出错,于是就引入了ConfigMapGenerator, 它是Kustomize ConfigMap自动生成配置插件,使用方式非常简单,如下图所示:

执行kubectl apply -k .执行完成之后查看ConfigMap, ConfigMap倒是生成了,但是后边多了一堆hash字符串如:test-conf-tmc5f824gt什么鬼?我deployment里面还需要引用这个ConfigMap呢,通过测试发现这个hash后缀,是针对文件内容生成的hash,如果文件内容没有变化,这个hash不会变化,否则重新生成。原来这个hash类似于ConfigMap版本的一个概念,但是我在使用过程中对配置文件的版本没有什么要求,通过查看文档可以发现https://github.com/kubernetes-sigs/kustomize/blob/master/examples/generatorOptions.md,只需要添加参数,即可去除版本号后缀:

一顿操作之后,就可以通过一个引用把配置自动生成ConfigMap资源对象,这样的话,如果配置出现变化,只需要修改我们原来的配置文件,然后重新生成即可完成ConfigMap的更新,而且不会出什么错误了。

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

猜测原因是因为Kubernetes ConfigMapload过程中发现文件中包含tab缩进,直接转化为\n\t,如果把文本里面的tab全部替换空格,会不会直接解决问题呢?按照这个思路,我通过编辑器正则表达式把\t替换为4个空格,再次上传日志配置文件,之后通过ConfigMapGenerate生成配置时,发现问题已经解决,如下所示:

当然你也可以使用xmllint --format logback.xml -o logback.xml进行格式化配置文件,通过这种方式也可以解决如上问题,另外因为配置文件的编辑可能在windows操作系统上,而ConfigMap的生成在linux,这会导致文件中出现^M不可见字符,可以使用dos2unix转换文件格式,解决该问题。

本文主要介绍了如何使用Kustomize ConfigMapGenerate自动生成Kubernetes ConfigMap资源存储对象,以及生成的配置信息出现格式错乱问题如何解决。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020/07/31 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档