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
资源存储对象,以及生成的配置信息出现格式错乱问题如何解决。希望能够帮助到大家,如有其它问题,可以关注、加我微信、拉你进群讨论。谢谢!
- use vue vuex vue-router, not use webpack
- 从尾到头打印链表
- Webpack+Vue如何导入Jquery和Jquery的第三方插件
- [Hadoop大数据]——Hive部署入门教程
- Vuex原来可以这样上手
- 《Hive编程指南》—— 读后总结
- Event(事件)的传播与冒泡
- [Hadoop大数据]——Hive数据的导入导出
- 区块链技术在电子游戏与博彩行业备受追捧 有望实现数字商品货币化
- vue原来可以这样上手
- [Hadoop大数据]——Hive连接JOIN用例详解
- 扑克牌的顺子
- 数组前半部分和后半部分有序的全排序
- restful Api 风格契约设计器:Swagger-editor和swagger-ui的应用
- 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 数组属性和方法
- 为了满足UI小姐姐要求,自己动手实现了Android面包屑效果(支持Fragment联动)
- Jenkins持续集成「编译打包、代码检查、单元测试、环境部署、软件测试」
- 斗鱼直播带你实现:你主播最爱的Android音视频开发
- 深度解析Redis线程模型设计原理
- 聊聊claudb的hash command
- Exceptionless 5.x 无法正常发送邮件的问题解决
- 详解 Linux 中的硬链接与软链接
- 程序员进阶之算法练习(四十七)
- Git 合并多个 commit,保持历史简洁
- Vue开源项目使用探索
- 自定义View | 仿QQ运动步数进度效果
- TS 设计模式05 - 装饰者模式
- 四、学编程语言前,不了解Git,怎么入坑
- 【设计模式系列(三)】彻底搞懂原型模式
- 分享一个可以装逼的开发技巧