【Kubernetes】ConfigMap配置管理:存儲配置參數,創建到容器掛載

在Kubernetes中,配置管理是應用部署的重要環節。ConfigMap作為存儲非敏感配置數據的資源對象,能幫助我們實現"配置與代碼分離",讓應用部署更靈活。

一、什么是ConfigMap?

ConfigMap是Kubernetes中用于存儲非加密配置數據的資源類型,它可以存儲鍵值對、配置文件等內容,然后被Pod中的容器引用。其核心作用是:

  • 實現配置與應用程序代碼分離
  • 方便不同環境(開發、測試、生產)使用不同配置
  • 避免配置硬編碼到鏡像或Pod定義中

簡單說,ConfigMap就像一個"配置文件倉庫",Pod可以按需獲取其中的配置。

二、創建ConfigMap的4種方式

1. 從目錄創建(適用于多配置文件)

如果有多個配置文件需要統一管理,可以直接從目錄創建ConfigMap:

# 目錄結構
test/
└── config/├── db.properties└── redis.properties# 從config目錄創建(注意執行命令時的路徑)
chenaws@k8smaster:~/test$ kubectl create configmap test-dir-config --from-file=config/
configmap/test-dir-config created

查看創建的ConfigMap:

chenaws@k8smaster:~/test$ kubectl describe cm test-dir-config
Name:         test-dir-config
Namespace:    default
Data
====
redis.properties:  # 文件名作為key
----
host: 127.0.0.1    # 文件內容作為value
port: 6379db.properties:
----
username=root
password=admin

2. 從單個文件創建(適用于獨立配置文件)

對于單個配置文件(如應用的.yaml配置),可以直接指定文件路徑創建:

# 創建application.yaml文件
chenaws@k8smaster:~/test$ cat application.yaml
spring:application:name: test-app
server:port: 8080# 從文件創建ConfigMap
chenaws@k8smaster:~/test$ kubectl create cm spring-boot-test-yaml --from-file=./application.yaml
configmap/spring-boot-test-yaml created

此時ConfigMap的key默認是文件名(application.yaml),value是文件內容。

3. 重命名配置文件的key

如果希望在ConfigMap中使用自定義的key(而非默認文件名),可以用key=value格式指定:

# 將application.yaml重命名為app.yml存入ConfigMap
chenaws@k8smaster:~/test$ kubectl create cm spring-boot-test-alises-yaml --from-file=app.yml=application.yaml
configmap/spring-boot-test-alises-yaml created# 查看結果(key已變為app.yml)
chenaws@k8smaster:~/test$ kubectl describe cm spring-boot-test-alises-yaml
Name:         spring-boot-test-alises-yaml
Data
====
app.yml:  # 自定義的key
----
spring:application:name: test-app
server:port: 8080

4. 直接指定鍵值對創建(適用于簡單配置)

對于簡單的鍵值對配置(如用戶名、密碼),可以用--from-literal直接創建:

# 創建包含用戶名和密碼的ConfigMap
chenaws@k8smaster:~/test$ kubectl create cm test-k-v-config --from-literal=username=root --from-literal=password=admin
configmap/test-k-v-config created# 查看結果
chenaws@k8smaster:~/test$ kubectl describe cm test-k-v-config
Name:         test-k-v-config
Data
====
password:  # 鍵
----
admin      # 值
username:
----
root

三、在Pod中使用ConfigMap的兩種方式

創建ConfigMap后,Pod可以通過環境變量文件掛載兩種方式使用其中的配置。

方式1:作為環境變量注入

適用于需要通過環境變量讀取配置的場景(如應用啟動參數)。

步驟1:創建存儲環境變量的ConfigMap
chenaws@k8smaster:~/test$ kubectl create configmap test-env-config \
--from-literal=JAVA_OPTS_TEST='-Xms521m -Xms512m' \
--from-literal=APP_NAME=springboot-env-test
configmap/test-env-config created
步驟2:定義引用ConfigMap的Pod

創建env-test-pod.yaml

apiVersion: v1
kind: Pod
metadata:name: test-env-po
spec:containers:- name: env-testimage: alpinecommand: ["/bin/sh", "-c", "env;sleep 3600"]  # 輸出環境變量后休眠env:# 引用ConfigMap中的key作為環境變量- name: JAVA_VM_OPTS  # 容器內的環境變量名valueFrom:configMapKeyRef:name: test-env-config  # 關聯的ConfigMap名稱key: JAVA_OPTS_TEST    # 引用的key- name: APP  # 另一個環境變量valueFrom:configMapKeyRef:name: test-env-configkey: APP_NAMErestartPolicy: Never  # Pod退出后不重啟
步驟3:創建Pod并驗證
# 創建Pod
chenaws@k8smaster:~/test$ kubectl create -f env-test-pod.yaml
pod/test-env-po created# 查看Pod狀態(等待容器創建完成)
chenaws@k8smaster:~/test$ kubectl get po test-env-po
NAME         READY   STATUS    RESTARTS   AGE
test-env-po  1/1     Running   0          30s# 查看環境變量(確認ConfigMap的配置已注入)
chenaws@k8smaster:~/test$ kubectl logs -f test-env-po
JAVA_VM_OPTS=-Xms521m -Xms512m  # 來自ConfigMap
APP=springboot-env-test          # 來自ConfigMap
...

方式2:作為文件掛載到容器

適用于需要通過配置文件讀取的場景(如數據庫配置文件、應用配置文件)。

步驟1:使用之前創建的test-dir-config(包含db.properties和redis.properties)
步驟2:定義掛載ConfigMap的Pod

創建file-test-pod.yaml

apiVersion: v1
kind: Pod
metadata:name: test-configfile-po
spec:containers:- name: file-testimage: alpinecommand: ["/bin/sh", "-c", "sleep 3600"]  # 休眠等待查看volumeMounts:- name: config-volume  # 與下面的volume名稱對應mountPath: /usr/local/mysql/conf  # 掛載到容器內的路徑items:  # 可選:指定只掛載部分文件(不指定則掛載全部)- key: db.properties  # ConfigMap中的key(文件名)path: db.properties  # 掛載到容器內的文件名volumes:- name: config-volumeconfigMap:name: test-dir-config  # 關聯的ConfigMap名稱restartPolicy: Never
步驟3:創建Pod并驗證
# 創建Pod
chenaws@k8smaster:~/test$ kubectl create -f file-test-pod.yaml
pod/test-configfile-po created# 進入容器查看掛載的文件
chenaws@k8smaster:~/test$ kubectl exec -it test-configfile-po -- sh
/ # cd /usr/local/mysql/conf/  # 掛載路徑
/usr/local/mysql/conf # ls
db.properties  # 已掛載的文件
/usr/local/mysql/conf # cat db.properties 
username=root  # 內容與ConfigMap一致
password=admin

注意

  • 如果不指定items,ConfigMap中的所有文件(db.properties和redis.properties)都會被掛載到目標路徑
  • 掛載的文件權限為只讀(ro),無法在容器內修改

四、ConfigMap使用總結

1. 創建方式對比

創建方式命令示例適用場景
從目錄創建--from-file=目錄路徑多配置文件統一管理
從單個文件創建--from-file=文件路徑單個獨立配置文件
重命名key創建--from-file=自定義key=文件路徑需要修改配置文件在ConfigMap中的key
鍵值對直接創建--from-literal=key=value簡單的鍵值對配置(如參數)

2. 使用方式對比

使用方式配置方式優點缺點
環境變量注入env.valueFrom.configMapKeyRef適合應用啟動參數,讀取方便配置更新后需重啟Pod才能生效
文件掛載volumeMounts + volumes.configMap適合配置文件,支持部分文件掛載配置更新后會自動同步(約1分鐘延遲)

3. 注意事項

  • ConfigMap與Pod必須在同一命名空間才能引用
  • 配置更新后:環境變量方式需重啟Pod,文件掛載方式會自動同步(有延遲)
  • 不要用ConfigMap存儲敏感信息(如密碼、密鑰),敏感信息應使用Secret

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/91747.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/91747.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/91747.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Promise和回調地獄

順序執行 vs. 異步操作: 當我們說“順序執行”,通常是指 操作按順序發生。而 異步操作 指的是操作在后臺執行,不會阻塞其他操作,通常會使用回調、Promise 或 async/await 來處理結果。 在 Promise 鏈式調用 的情況下,雖…

LeetCode 65:有效數字

LeetCode 65:有效數字問題本質與挑戰 需判斷字符串是否為有效數字,規則涉及整數、小數、指數(e/E)的復雜組合,如: 整數:123、-45、678小數:1.2、.3、4.、5.6指數:1e10、2…

數據結構之順序表應用與雙指針法

元素刪除通過元素移動的方式來模擬刪除操作:將指定下標后的所有元素依次向前移動一位,覆蓋要刪除的元素,從而達到 "刪除" 的效果。 通過自定義函數實現刪除功能,需要傳入數組、數組長度的指針(因為要修改長度…

Python編程基礎與實踐:Python基礎數據類型入門

Python變量與數據類型實踐 學習目標 通過本課程的學習,學員可以掌握Python中變量的基本概念,了解并能夠使用Python的基本數據類型,包括整型、浮點型、字符串和布爾值。此外,學員還將學習如何在實際編程中聲明和使用這些數據類型。…

深入解析C/C++函數變量傳遞:棧、堆與全局變量的生命周期之旅

資料合集下載鏈接: ?https://pan.quark.cn/s/472bbdfcd014? 在編程學習中,函數是構建程序的基石,而理解變量如何在函數之間正確、安全地傳遞,則是從入門到進階的關鍵一步。我們經常會遇到這樣的困惑:為什么一個指針在某個函數里工作正常,傳遞給另一個函數后卻變成了“…

Ubuntu18網絡連接不上也ping不通網絡配置問題排查與解決方法

Ubuntu 18啟動以后發現連接不上網絡,執行 ip a命令或者ifconfig都顯示不了正確的地址(192.168.xxx.xxx)。 剛裝好系統是沒問題的,打算使用FTP開啟ftp服務與windows互傳文件,安裝了net-tools插件就突然連不上網絡了,懷疑是網絡配置被修改了。 經過了一段時間折騰終于解決了,…

【計算機網絡】Socket網絡編程

目錄 一、主機字節序列和網絡字節序列 二、套接字地址結構 1、IPv4 地址結構 (sockaddr_in) 2、IPv6 地址結構 (sockaddr_in6) 3、通用套接字地址結構 (sockaddr) 4、Unix域套接字地址結構 (sockaddr_un) 5、專用 socket 地址結構 6、套接字地址結構的轉換 字符串轉二進制地址 …

網頁操作自動化解決方案:如何用Browser-Use+CPolar提升企業運營效率

文章目錄前言1. 安裝Ollama2. Gemma3模型安裝與運行3. 虛擬環境準備3.1 安裝Python3.2. 安裝conda4. 本地部署Brower Use WebUI4.1 創建一個新conda環境4.2 克隆存儲庫4.3 安裝依賴環境4.4 安裝瀏覽器自動化工具4.5 修改配置信息5. 本地運行測試6. 安裝內網穿透6.1 配置公網地址…

Pycharm的設置過程

20250802 用于記錄pycharm的設置過程 編輯器相關 python語言設置文件注釋 在設置的編輯器部分,按照需求設置模板! 函數生成注釋

GaussDB as的用法

通過使用 SQL,可以為表名稱或列名稱指定別名(Alias)。1 別名的作用SQL 別名用于為表或表中的列提供臨時名稱。 SQL 別名通常用于使列名更具可讀性。 SQL 一個別名只存在于查詢期間。 提高SQL執行效率與編寫SQL代碼效率。2 使用別名的場景在下…

Prim算法

一,prim算法邏輯1.理解:克魯斯卡爾算法關注的是邊,普里姆算法關注的是點把圖中每個頂點比作孤島,點亮一座孤島就可以解鎖附近的孤島每次解鎖的點都是離自身最近的點2.普里姆算法流程a.采用鄰接矩陣表示,考慮要查找最小…

嵌入式學習之硬件——51單片機 1.0

一、基礎知識1.什么是嵌入式?嵌入式以應用為中心,計算機技術為基礎,軟硬件可裁剪的專用計算機系統;2.嵌入式的應用?消費電子、無人駕駛、儲能、新能源........3.嵌入式發展?(1)第一階…

51c大模型~合集161

自己的原文哦~ https://blog.51cto.com/whaosoft/14079111 #這家國內公司,在給xx智能技術棧做「通解」 打通機器人智能化的關鍵:眼腦手。 xx智能(Embodied Intelligence)是 AI 領域里熱度極高的賽道:給大模型…

Linux9 root密碼修改

開機按e進入在linux行即quiet后面輸入rd.break ctrlx進入內核輸入mount -o remount,rw /sysrootchroot /sysrootpasswd root即可修改密碼輸入touch /.autorelabelexitexit等待即可

提示詞增強工程(Prompt Enhancement Engineering)白皮書草稿

提示詞增強工程(Prompt Enhancement Engineering)白皮書草稿 作者: 技術人進化社 Email:2819699195qq.com 日期: 2025年7月30日 1. 引言 隨著大型語言模型(LLM)能力的飛速發展,如何高…

電路元器件

電流單位 電壓 電阻單位 電阻的決定式 歐姆定律 交流電和直流電 交流電 串聯電路 并聯電路 在線模擬器 Circuitjs web 在線電路模擬器 下載

廣泛分布于內側內嗅皮層全層的速度細胞(speed cells)對NLP中的深層語義分析的積極影響和啟示

速度細胞(Speed Cells)作為內側內嗅皮層(MEC)的核心神經元,通過編碼運動速度信息與網格細胞協同實現動態路徑整合。這一神經機制為自然語言處理(NLP)的深層語義分析提供了以下關鍵啟示和影響&am…

sql中的多表查詢

在SQL中,多表查詢用于從多個表中組合數據,常見的方法包括 ?連接查詢(JOIN)?? 和 ?子查詢。以下是詳細說明和示例:一、連接查詢(JOIN)通過關聯字段將多個表的數據合并,分為以下幾…

Ruby 面向對象編程深入解析

Ruby 面向對象編程深入解析 引言 Ruby 作為一種動態、解釋型、面向對象的語言,自1995年由日本程序員Yukihiro Matsumoto創造以來,憑借其簡潔、靈活和強大的面向對象特性,在全球范圍內獲得了廣泛的認可。本文將深入探討Ruby的面向對象編程(OOP)特性,幫助讀者更好地理解和…

Baumer工業相機堡盟工業相機如何通過YoloV8深度學習模型實現圍欄羊駝的檢測識別(C#代碼,UI界面版)

Baumer工業相機堡盟工業相機如何通過YoloV8深度學習模型實現圍欄羊駝的檢測識別(C#代碼,UI界面版)工業相機使用YoloV8模型實現圍欄羊駝的檢測識別工業相機通過YoloV8模型實現圍欄羊駝的檢測識別的技術背景在相機SDK中獲取圖像轉換圖像的代碼分…