ConfigMaps 介紹
ConfigMaps核心概念
提供K8S的Pods,儲存設定資訊的媒介。
有時我們不想把設定寫死在專案程式碼內部,例如排程幾秒觸發動作等等,因為若專案被包成容器映像檔案,要做修改的話會變得非常棘手
就可以用ConfigMaps將這資訊獨立出來,方便動態調整設定。
ConfigMaps幫助將設定資訊注入在Container內,這些資訊可以是:
- JSON
- XML
- keys/values
ConfigMap可以透過兩種方式取得
- Environment variables (key/value)
- ConfigMap volume (files)
創建ConfigMaps方式
Key/Values 方式設定
1 | apiVersion: v1 |
Files 方式設定
假設有個設定檔案叫做 game.config
1 | enemies=aliens |
可以指定要吃設定檔的方式來創建configMaps
1 | kubectl create configmap [configMap name] --from-file=[path to file] |
最後會產出如下的configMaps
1 | apiVersion: v1 |
要注意,給kubectl create configmap 的configmap name的格式須符合:
- 都是小寫
- 只能包含 - 與 . 特殊符號
- 開頭與結尾必須是小寫
不然會噴以下錯誤
1 | error: failed to create configmap: ConfigMap "wrongConfig" is invalid: metadata.name: Invalid value: "wrongConfig": a lowercase RFC 1123 subdomain must consist of lower case alphanumeric characters, '-' or '.', and must start and end with an alphanumeric character (e.g. 'example.com', regex used for validation is '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*') |
以環境變數設定方式創建
一樣用這個設定檔案
1 | kubectl create configmap [configMap name] --from-env-file=[path to file] |
透過這樣的方式創建,就會產出跟直接在configMaps的data欄位定義key/value是一樣的
1 | apiVersion: v1 |
可以使用下列指令來取得字串的base64格式
1 | ehco "要編碼的字串" | base64 |
以字面索引方式創建
可以索引多個設定來源
1 | kubectl create configmap [configmap name] \ |
取得ConfgiMap
取得ConfigMap和顯示資訊
1 | kubectl get cm [cm name] -o yaml |
在Pod中,透過configMapKeyRef
指定ConfigMaps名稱,與其key值來取值
下圖為範例,右邊為Pod,透過configMapKeyRef
指定app-settings
這個configMaps,取得key為enemies
的值為aliens
,來賦予環境變數ENEMIES
這個值
若是要取得整個configMaps的資訊,就直接使用configMapRef
以Volume方式取得ConfigMaps
可以將configMaps以Volumns方式存成檔案,掛載到Pod內
- 會透過kubelet先下載到Pod所在的Node,在用Volume掛載進Pod內
下圖範例將configMaps儲存到 /etc/config
目錄內,volumns名稱為app-config-vol
參考
- Kubernetes for Developers: Core Concepts - ConfigMaps and Secrets