ConfigMap概述
ConfigMap供容器使用的典型用法如下。
(1)生成為容器內的環境變量。
(2)設置容器啟動命令的啟動參數(需設置為環境變量)。
(3)以Volume的形式掛載為容器內部的文件或目錄。
ConfigMap以一個或多個key:value的形式保存在Kubernetes系統中供應用使用,既可以用於表示一個變量的值(例如apploglevel=info),也可以用於表示一個完整配置文件的內容(例如server.xml=<?xml...>...)
可以通過YAML配置文件或者直接使用kubectl create configmap命令行的方式來創建ConfigMap。
通過kubectl命令行方式創建
通過kubectl create configmap也可以創建ConfigMap,可以使用參數--from-file或--from-literal指定內容,並且可以在一行命令中指定多個參數。
(1)通過--from-file
參數從文件中進行創建,可以指定key的名稱,也可以在一個命令行中創建包含多個key的ConfigMap,語法為:
kubectl create configmap NAME --from-file=[key=]source --from-file=[key=]source
(2)通過--from-file
參數從目錄中進行創建,該目錄下的每個配置文件名都被設置為key,文件的內容被設置為value,語法為:
kubectl create configmap NAME --from-file=config-file-dir
(3)使用--from-literal時會從文本中進行創建,直接將指定的key#=value#
創建為ConfigMap的內容,語法為:
kubectl create configmap NAME --from-literal=key1=value1 --from-literal=key2=value2
使用ConfigMap的限制條件
- ConfigMap必須在Pod之前創建
- ConfigMap受Namespace限制,只有處於相同Namespace中的Pod才可以引用它
- kubelet只支持可以被API Server管理的Pod使用ConfigMap。kubelet在本Node上通過
--manifest-url
或--config
自動創建的靜態Pod將無法引用ConfigMap - 在Pod對ConfigMap進行掛載(volumeMount)操作時,在容器內部只能掛載為“目錄”,無法掛載為“文件”。
在掛載到容器內部后,在目錄下將包含ConfigMap定義的每個item,如果在該目錄下原來還有其他文件,則容器內的該目錄將被掛載的ConfigMap覆蓋。
如果應用程序需要保留原來的其他文件,則需要進行額外的處理。
可以將ConfigMap掛載到容器內部的臨時目錄,再通過啟動腳本將配置文件復制或者鏈接到(cp或link命令)應用所用的實際配置目錄下。