Kustomize ConfigMapGenerate自动生成ConfigMap中的坑
ConfigMap
作为Kubernetes
中配置资源存储对象,通过ConfigMap
可以存储各种各样的配置文件,具体使用方式: 深入探究 K8S ConfigMap 和 Secret,但在使用过程中会碰到各种不方便,一般情况下,特别是没有接入分布式配置中心的服务,配置文件是存储在服务所在特定目录下,这就导致需要我们把配置copy
或者load
到Kubernetes 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
文本中出现了大量的nt
,虽然不影响使用,但是看起来糟心,而且当我们需要临时修改配置的时候,看起来眼花缭乱,影响工作效率。(当然普通的properties
配置文件也可能会出现这种问题,但是KV
对配置文件很少使用tab
缩进功能)什么原因呢?通过idea
编辑器打开隐藏字符(或者通过vim set list
功能,也可以显示隐藏字符),会发现xml
文件中存在tab
缩进字符,而对于Kubernetes yaml
编排文件不允许使用tab
只能使用空格,如下图所示。
猜测原因是因为Kubernetes ConfigMap
在load
过程中发现文件中包含tab
缩进,直接转化为nt
,如果把文本里面的tab全部替换空格,会不会直接解决问题呢?按照这个思路,我通过编辑器正则表达式把t
替换为4
个空格,再次上传日志配置文件,之后通过ConfigMapGenerate生成配置时,发现问题已经解决,如下所示:
当然你也可以使用xmllint --format logback.xml -o logback.xml
进行格式化配置文件,通过这种方式也可以解决如上问题,另外因为配置文件的编辑可能在windows
操作系统上,而ConfigMap
的生成在linux
,这会导致文件中出现^M
不可见字符,可以使用dos2unix
转换文件格式,解决该问题。
本文主要介绍了如何使用Kustomize ConfigMapGenerate
自动生成Kubernetes ConfigMap
资源存储对象,以及生成的配置信息出现格式错乱问题如何解决。希望能够帮助到大家,如有其它问题,可以关注、加我微信、拉你进群讨论。谢谢!
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 磁盘高可用解决方案(DBA).md
- Python 3.7 + HttpRunner 初探
- 数据库PostrageSQL-服务器配置(复制)
- 高可用服务解决方案(DBA).md
- dotnet 使用 Interlocked 实现一个无锁的快速无序仅写集合
- 利用Python将gff3转换成gtf格式
- 单细胞DoHeatmap画热图标签出界
- FastSpar | 用更快的 SparCC 进行微生物组相关性分析
- GO和KEGG富集倍数(Fold Enrichment)如何计算
- 监控域名HTTPS证书过期时间
- 使用hmmlearn分析股票数据
- Flink源码阅读之Checkpoint执行过程
- 一文了解Kudu的核心原理
- 回归问题的中的常用方法
- 深度优先搜索(DFS)两点之间的可行路径