背景問題
最近在使用Kubernetes ConfigMap
過程當中,因爲須要把配置文件複製ConfigMap yaml
編排文件中,在copy
的過程當中,容易出錯,因而引入了Kustomize ConfigMapGenerate
,經過引用外部配置文件,自動生成配置,但在使用過程當中碰到新問題。java
-
ConfigMap
名稱生成多餘hash
。 -
加載到配置文件中內容格式錯亂。
如下分別對這兩個個問題進行分析、並給出具體解決方式。linux
ConfigMapGenerate使用
ConfigMapGenerator
是Kustomize ConfigMap
自動生成配置插件,使用方式很是簡單,以下圖所示:git
執行
kubectl apply -k .
執行完成以後查看ConfigMap
, ConfigMap
卻是生成了,可是後邊多了一堆hash
字符串如:test-conf-tmc5f824gt。
。github

why?web
deployment
裏面還須要引用這個ConfigMap
呢?經過測試發現這個hash
後綴,是針對文件內容生成的hash
,若是文件內容沒有變化,這個hash
不會變化,不然從新生成。正則表達式
原來這個hash
相似於ConfigMap
版本的一個概念,可是我在使用過程當中對配置文件的版本沒有什麼要求。vim
解決方案
經過查看文檔能夠發現https://github.com/kubernetes-sigs/kustomize/blob/master/examples/generatorOptions.md
,只須要添加參數便可控制版本號變化:windows

一頓操做以後,就能夠經過一個引用把配置自動ConfigMap
資源對象,咱們只須要修改咱們原來的配置文件,而後從新生成便可完成ConfigMap
的更新,並且不會出現多餘字符串,固然若是你使用了helm
等模板工具,能夠考慮使用這個版本號,這樣的話ConfigMap
也有了版本的概念。微信
ConfigMap中文本錯亂

當我經過kubectl
獲取ConfigMap
配置信息以後,日誌xml
文本中出現了大量的\n\t
,雖然不影響使用,可是看起來糟心,並且當咱們須要臨時修改配置的時候,看起來眼花繚亂,影響工做效率。(固然普通的properties
配置文件也可能會出現這種問題,可是KV
對配置文件不多使用tab
縮進功能)app
why?
經過idea
編輯器打開隱藏字符(或者經過vim set list
功能,也能夠顯示隱藏字符),會發現xml
文件中存在tab
縮進字符,而對於Kubernetes yaml
編排文件不容許使用tab
只能使用空格,以下圖所示。


緣由分析
猜想緣由是由於Kubernetes ConfigMap
在load
過程當中發現文件中包含tab
,直接轉化爲\n\t
。若是把文本里面的tab所有替換空格,會不會直接解決問題呢?按照這個思路,我獲得了以下兩種解決方式。
解決方案(1)
經過編輯器正則表達式把\t
替換爲4
個空格,再次上傳日誌配置文件,以後經過ConfigMapGenerate生成配置時,發現問題已經解決,以下所示:
解決方案(2)
使用xmllint --format logback.xml -o logback.xml
進行格式化配置文件,經過這種方式也能夠解決如上問題。
另外由於配置文件的編輯可能在windows
操做系統上,而ConfigMap
的生成在linux
,這會致使文件中出現^M
不可見字符,可使用dos2unix
轉換文件格式,解決該問題。
總結
本文主要介紹瞭如何使用Kustomize ConfigMapGenerate
自動生成Kubernetes ConfigMap
資源存儲對象,以及生成的配置信息出現格式錯亂問題如何解決。但願可以幫助到你們,謝謝。
推薦閱讀
Kustomize 輕鬆解決多環境 yaml 編排文件的管理
完整的Kubernetes Deployment yaml文件應該包含什麼?
原創不易,隨手關注或者」三連「,誠摯感謝!
本文分享自微信公衆號 - 雲原生技術愛好者社區(programmer_java)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。