kubernetes資源對象--ConfigMap

原理

很多生產環境中的應用程序配置較爲複雜,可能需要多個config文件、命令行參數和環境變量的組合。使用容器部署時,把配置應該從應用程序鏡像中解耦出來,以保證鏡像的可移植性。儘管Secret允許類似於驗證信息和祕鑰等信息從應用中解耦出來,但在K8S1.2前並沒有爲了普通的或者非secret配置而存在的對象。在K8S1.2後引入ConfigMap來處理這種類型的配置數據。

ConfigMap是存儲通用的配置變量的,類似於配置文件,使用戶可以將分佈式系統中用於不同模塊的環境變量統一到一個對象中管理;而它與配置文件的區別在於它是存在集羣的“環境”中的,並且支持K8S集羣中所有通用的操作調用方式。

從數據角度來看,ConfigMap的類型只是鍵值組,用於存儲被Pod或者其他資源對象(如RC)訪問的信息。這與secret的設計理念有異曲同工之妙,主要區別在於ConfigMap通常不用於存儲敏感信息,而只存儲簡單的文本信息。

ConfigMap可以保存環境變量的屬性,也可以保存配置文件。

創建pod時,對configmap進行綁定,pod內的應用可以直接引用ConfigMap的配置。相當於configmap爲應用/運行環境封裝配置。

pod使用ConfigMap,通常用於:設置環境變量的值、設置命令行參數、創建配置文件。

創建configmap

命令行

kubectl create configmap lykops-config --from-file=db_config_file=database.conf --from-file=ver.conf --from-literal=username=test --from-literal=hostname=localhost

–from-file表示來自文件,直接把文件內容寫入configmap中,可以爲目錄也可以爲文件,如果是文件的話,可以使用db_config_file=database.conf來修改key值
–from-literal表示使用鍵值對配置

yaml文件

kubectl delete -f lykops-config.yaml
cat << EOF > lykops-config.yaml
kind: ConfigMap
apiVersion: v1
metadata:
 name: lykops-config
 namespace: default 
 labels:
 software: apache
 project: lykops
 app: configmap
 version: v1
data:
 PWD: /
 user: lykops
 mysql.config : |-
 username: lykops
 host: localhost
 port: 3306
EOF
kubectl create -f lykops-config.yaml

data就是配置變量:
PWD和user兩行就是兩個環境變量屬性
mysql.config : |-就是配置文件,下面的內容是配置文件mysql.config內容

使用ConfigMap

兩種方式讓pod使用,第一種是環境變量或參數,第二種是文件掛載。

cat << EOF > lykops-cm-pod.yaml
apiVersion: v1  kind: Pod  metadata:
 name: lykops-cm-pod
 labels:
 project: lykops
 app: lykops-cm
 version: v1 
spec:
 containers:
 - name: lykops-cm-pod
 image: web:apache 
 command: ['sh',/etc/run.sh] 
 env:
 - name: SPECIAL_USER
 valueFrom:
 configMapKeyRef:
 name: lykops-config
 key: username
 resources: 
 requests: 
 cpu: 0.01 
 memory: 8Mi 
 limits: 
 cpu: 0.1
 memory: 16Mi
 volumeMounts:
 - name: config-volume
 mountPath: /data/
 volumes:
 - name: config-volume
 configMap:
 name: lykops-config
EOF
kubectl create -f lykops-cm-pod.yaml

當ConfigMap以數據卷的形式掛載進Pod時,更新ConfigMap(或刪掉重建ConfigMap),Pod內掛載的配置信息會熱更新,但使用環境變量方式加載到pod,則不會自動更新。

本文轉自開源中國-kubernetes資源對象--ConfigMap

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章