涉及的'知识点': configmap资源对象、yaml'|- |+ >'语法
目的: 彻底解决'YAML 多行文本'格式化'丢失'问题
场景:将业务部署到k8s时,'应用的配置文件'通常写在ConfigMap中,然后以文件的形式挂载到Pod中
kubectl create configmap -h
直接使用'字符串'进行创建,通过 --from-literal 参数传递配置信息,同样这个参数可以使用'多次'
Resource Quotas | Kubernetes configmap个数限制案例
大部分Kubernetes版本'默认'开启了ResourceQuota
'低版本'在APIServer配置文件'--enable-admission-plugins'参数中添加ResourceQuota开启
个数和大小限制
ResourceQuotas 会限制'命名空间'中 configmap 的'数量'
思考: 但有没有这样的选项来限制'单个' configmap 的 'size'大小?
目的: 不希望某些用户开始将'大型文本文件'作为'配置'映射上传
ConfigMap 的大小'默认限制'为 '1MB'
解读:
1、实际ConfigMap 或 Secret 对象上都'没有'硬限制。
2、然而'etcd'端有 '1MB' 的限制,这是 Kubernetes '存储其对象'的地方
1、主程序是'非pid=1'的常驻进程 --> 多个命令通过';'进行串连
2、'健康检查'常驻进程的'port端口' --> '必须'
3、每'10s'检查'配置文件'的md5值,如果跟上次不一致就进行'reload|restart'
在">"符号应用的'多行文本'值中,所有'换行符'都会被视为'空格'
> 右尖括号,用来表示'折叠换行',只有'空白行'才会被识别为'换行',原来的换行符都会被转换成'空格'
竖线符'|',这在 yaml 中表示保留换行,每行的'缩进和行尾空白'都会被'去掉',而额外的缩进会被保留
"|+": 保留'每行尾部的换行符\n'的同时,'保留'内容结尾处的换行符\n
"|-": 保留'每行尾部的换行符\n'的同时,'删除'内容结尾处的换行符\n
"|-":保留'行尾'换行符,但不保留'字符末尾'的换行符
">+":将行尾换行符'替换'成空格,保留'字符末尾'的换行符
">-":将行尾换行符替换成空格,'不保留'字符末尾的换行符
换行主要使用 | 和 > , '|'保留行尾'换行符', '>'将行尾换行符替换成'空格'
保留字符末尾的换行使用'+',删除字符末尾的换行使用'-',一般用于与'|'和'>'组合使用
K8S的yaml文件'只允许'有'空格'
说明: 补充一些'知识点'与本文关系不大
③ \n 问题引入
通过一个'对比实验'说明如何彻底'解决 YAML 多行文本格式化丢失'问题
备注: 不小心在'字符结尾换行前'多打了个'空格'
vimdiff ceshi{,1}.yml '对比二者的差异性'
++++++++++++++++ "问题思考" ++++++++++++++++
现象: configmap 的data中的文件内容'格式'错乱,可读性不强,不便于'edit'在线编辑
"推荐":
kubectl create configmap my-config --from-file=path/to/file
细节: 通过'file'文件的形式创建'cm',会产生'|'形式
备注: cm中推荐'配置文件'的形式引入,而不是直接将'相关配置数据'写入cm资源对象中,便于管理更新
进阶: 推荐'配置文件'也纳入'git'等版本控制中,跟'代码'放在一起一块管理
++++++++++++++++ "file中应该怎么操作" ++++++++++++++++
# 使用以下方法删除'尾随'空格
sed -i -E 's/[[:space:]]+$//g' file
# 使用空格'替换'制表符
sed -i 's/\t/ /g' file
思考: nginx的配置文件'nginx.conf'
④ 结论
+++++++++ "主要是data中" +++++++++
1、文本'每行'不要以'空格'结尾
2、不要'换行'前再'带个空格'
3、不要在文本中添加'不可见'特殊字符
推荐: 将文本拷贝并'格式化yaml文本',可使用在线格式化工具