Kustomize ConfigMapGenerate自動生成ConfigMap中的坑

背景問題

最近在使用Kubernetes ConfigMap過程當中,因爲須要把配置文件複製ConfigMap yaml編排文件中,在copy的過程當中,容易出錯,因而引入了Kustomize ConfigMapGenerate,經過引用外部配置文件,自動生成配置,但在使用過程當中碰到新問題。java

  • ConfigMap名稱生成多餘 hash
  • 加載到配置文件中內容格式錯亂。

如下分別對這兩個個問題進行分析、並給出具體解決方式。linux

ConfigMapGenerate使用

ConfigMapGeneratorKustomize 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 ConfigMapload過程當中發現文件中包含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資源存儲對象,以及生成的配置信息出現格式錯亂問題如何解決。但願可以幫助到你們,謝謝。

推薦閱讀


深刻探究 K8S ConfigMap 和 Secret

Kustomize 輕鬆解決多環境 yaml 編排文件的管理

完整的Kubernetes Deployment yaml文件應該包含什麼?


原創不易,隨手關注或者」三連「,誠摯感謝!


本文分享自微信公衆號 - 雲原生技術愛好者社區(programmer_java)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。

相關文章
相關標籤/搜索