k8s初級實戰08--ConfigMap
- 1 基礎概念
- 2 常見用法
-
- 2.1 建立configmap
- 2.2 使用configmap
- 3 注意事項
- 4 說明
1 基礎概念
ConfigMap 是一種 API 對象,用來将非機密性的資料儲存到鍵值對中。使用時, Pods 可以将其用作環境變量、指令行參數或者存儲卷中的配置檔案。
ConfigMap 将環境配置資訊和容器鏡像解耦,便于應用配置的修改。
2 常見用法
2.1 建立configmap
- 通過 yaml 建立
vim configmap.yaml kind: ConfigMap apiVersion: v1 metadata: name: cm-data01 data: username: config_name password: config_pwd 建立: $ kubectl apply -f configmap.yaml 檢視configmap詳細資訊: $ kubectl describe configmaps cm-data01 Name: cm-data01 Namespace: default ...... Data ==== password: ---- config_pwd username: ---- config_name Events: <none>
- 通過指令行file建立
通過指令行建立data的時候,檔案名稱即為對應資料的key $ cat << EOF >username > config_name > EOF $ cat << EOF >password > config_pwd > EOF $ kubectl create configmap cm-data02 --from-file=password --from-file=username configmap/cm-data02 created
- 通過指令行key-value字元串建立
$ kubectl create configmap cm-data03 --from-literal=username=config_name03 --from-literal=password=config_pwd03 --dry-run=client -o yaml apiVersion: v1 data: password: config_pwd03 username: config_name03 kind: ConfigMap metadata: creationTimestamp: null name: cm-data03
- 通過env檔案建立
$ vim config.env username=config_name04 password=config_pwd04 $ kubectl create configmap cm-data04 --from-env-file=config.env --dry-run=client -o yaml >cm-data04.yaml $ kubectl apply -f cm-data04.yaml configmap/cm-data04 created 檢視cm-data04 的資料 $ kubectl get cm cm-data04 -o go-template='{{.data}}' map[password:config_pwd04 username:config_name04]
-
建立不可變更的configMap
1.19 版本的k8s 可以通過 immutable: true 來設定不可變更的cm。
對于大量使用 ConfigMap 的 叢集(至少有數萬個各不相同的 ConfigMap 給 Pod 挂載)而言,禁止更改 ConfigMap 的資料有以下好處:
1)保護應用,使之免受意外(不想要的)更新所帶來的負面影響。
2)通過大幅降低對 kube-apiserver 的壓力提升叢集性能,這是因為系統會關閉 對已标記為不可變更的 ConfigMap 的監視操作。
一旦某 ConfigMap 被标記為不可變更,則 無法 逆轉這一變化,,也無法更改 data 或 binaryData 字段的内容。你隻能删除并重建 ConfigMap。 因為現有的 Pod 會維護一個對已删除的 ConfigMap 的挂載點,建議重新建立 這些 Pods。$ vim cm-data-im.yaml kind: ConfigMap apiVersion: v1 metadata: name: cm-data-im data: username: config_name_im password: config_pwd_im immutable: true 測試: 将密碼更新為 password: config_pwd_im+ $ kubectl apply -f cm-data-im.yaml The ConfigMap "cm-data-im" is invalid: data: Forbidden: field is immutable when `immutable` is set
2.2 使用configmap
ConfigMap 可以通過三種方式在 Pod 中使用,三種分别方式為:
1)設定環境變量,
2)設定容器指令行參數,
3)在 Volume 中直接挂載檔案或目錄,
4)編寫代碼在 Pod 中運作,使用 Kubernetes API 來讀取 ConfigMap。
- 建立pod 使用上述configMap
注意:當卷中使用的 ConfigMap 被更新時,所投射的鍵最終也會被更新。$ vim pod-cm-data01.yaml kind: Pod apiVersion: v1 metadata: name: cm-data01 spec: containers: - name: test-cm01 image: busybox:1.32 command: ['sh', '-c', 'sleep 1000000'] volumeMounts: - name: config-volume mountPath: /my-config volumes: - name: config-volume configMap: name: cm-data01 建立pod: $ kubectl apply -f pod-cm-data01.yaml 檢視挂載的資料: / # ls bin dev etc home my-config proc root sys tmp usr var / # cat /my-config/username config_name/ # / # cat /my-config/password config_pwd/ # 此時更新cm-data01的password的值為: config_pwd01+, 發現pod中挂載的内容也同步更新了 $ kubectl exec cm-data01 -- cat /my-config/password config_pwd01+
3 注意事項
- ConfigMap 必須在 Pod 引用它之前建立
- 使用 envFrom 時,将會自動忽略無效的鍵
- Pod 隻能使用同一個命名空間内的 ConfigMap
4 說明
概念->配置->ConfigMap
github feiskyer/kubernetes-handbook/blob/master/concepts/configmap