Kubernetes(k8s)中文文件 名詞解釋:ConfigMap_Kubernetes中文社群
阿新 • • 發佈:2018-12-27
ConfigMap
ConfigMap用於儲存配置資料的鍵值對,可以用來儲存單個屬性,也可以用來儲存配置檔案。ConfigMap跟secret很類似,但它可以更方便地處理不包含敏感資訊的字串。
ConfigMap建立
可以使用kubectl create configmap從檔案、目錄或者key-value字串建立等建立ConfigMap。
# 從key-value字串建立ConfigMap $ kubectl create configmap special-config --from-literal=special.how=very configmap "special-config" created $ kubectl get configmap special-config -o go-template='{{.data}}' map[special.how:very] # 從env檔案建立 $ echo -e "a=b\nc=d" | tee config.env a=b c=d $ kubectl create configmap special-config --from-env-file=config.env configmap "special-config" created $ kubectl get configmap special-config -o go-template='{{.data}}' map[a:b c:d] # 從目錄建立 $ mkdir config $ echo a>config/a $ echo b>config/b $ kubectl create configmap special-config --from-file=config/ configmap "special-config" created $ kubectl get configmap special-config -o go-template='{{.data}}' map[a:a b:b ]
ConfigMap使用
ConfigMap可以通過多種方式在Pod中使用,比如設定環境變數、設定容器命令列引數、在Volume中建立配置檔案等。
注意
- ConfigMap必須在Pod引用它之前建立
- 使用envFrom時,將會自動忽略無效的鍵
- Pod只能使用同一個名稱空間內的ConfigMap
用作環境變數
首先建立ConfigMap:
$ kubectl create configmap special-config --from-literal=special.how=very --from-literal=special.type=charm $ kubectl create configmap env-config --from-literal=log_level=INFO
然後以環境變數方式引用
apiVersion: v1 kind: Pod metadata: name: test-pod spec: containers: - name: test-container image: gcr.io/google_containers/busybox command: [ "/bin/sh", "-c", "env" ] env: - name: SPECIAL_LEVEL_KEY valueFrom: configMapKeyRef: name: special-config key: special.how - name: SPECIAL_TYPE_KEY valueFrom: configMapKeyRef: name: special-config key: special.type envFrom: - configMapRef: name: env-config restartPolicy: Never
當pod執行結束後,它的輸出會包括
SPECIAL_LEVEL_KEY=very SPECIAL_TYPE_KEY=charm log_level=INFO
用作命令列引數
將ConfigMap用作命令列引數時,需要先把ConfigMap的資料儲存在環境變數中,然後通過$(VAR_NAME)的方式引用環境變數.
apiVersion: v1 kind: Pod metadata: name: dapi-test-pod spec: containers: - name: test-container image: gcr.io/google_containers/busybox command: [ "/bin/sh", "-c", "echo $(SPECIAL_LEVEL_KEY) $(SPECIAL_TYPE_KEY)" ] env: - name: SPECIAL_LEVEL_KEY valueFrom: configMapKeyRef: name: special-config key: special.how - name: SPECIAL_TYPE_KEY valueFrom: configMapKeyRef: name: special-config key: special.type restartPolicy: Never
當Pod結束後會輸出
very charm
使用volume將ConfigMap作為檔案或目錄直接掛載
將建立的ConfigMap直接掛載至Pod的/etc/config目錄下,其中每一個key-value鍵值對都會生成一個檔案,key為檔名,value為內容
apiVersion: v1 kind: Pod metadata: name: vol-test-pod spec: containers: - name: test-container image: gcr.io/google_containers/busybox command: [ "/bin/sh", "-c", "cat /etc/config/special.how" ] volumeMounts: - name: config-volume mountPath: /etc/config volumes: - name: config-volume configMap: name: special-config restartPolicy: Never
當Pod結束後會輸出
very
將建立的ConfigMap中special.how這個key掛載到/etc/config目錄下的一個相對路徑/keys/special.level。如果存在同名檔案,直接覆蓋。其他的key不掛載
apiVersion: v1 kind: Pod metadata: name: dapi-test-pod spec: containers: - name: test-container image: gcr.io/google_containers/busybox command: [ "/bin/sh","-c","cat /etc/config/keys/special.level" ] volumeMounts: - name: config-volume mountPath: /etc/config volumes: - name: config-volume configMap: name: special-config items: - key: special.how path: keys/special.level restartPolicy: Never
當Pod結束後會輸出
very
參考:https://feisky.gitbooks.io/kubernetes/concepts/configmap.html