k8s配置集ConfigMap詳解
ConfigMap介紹
ConfigMap和Secret是Kubernetes系統上兩種特殊類型的存儲卷,ConfigMap對象用於為容器中的應用提供配置文件等資訊。但是比較敏感的數據,例如密鑰、證書等由Secret對象來進行配置。它們將相應的配置資訊保存於對象中,而後在Pod資源上以存儲卷的形式掛載並獲取相關的配置,以實現配置與鏡像文件的解耦。
下面主要介紹使用Volume將ConfigMap作為文件或目錄掛載
1.首先在容器外面創建一個redis.conf的配置文件,然後根據這個配置文件創建出一個名為redis.conf的ConfigMap
2.通過kubectl get cm redis.conf -o yaml可以將剛才創建的ConfigMap以yaml格式輸出
3.剔除一些創建時間等元數據,精簡過後的ConfigMap的yaml文件的內容如下所示
apiVersion: v1
data: #data裡面是配置文件的名字以及相應的配置,以key:value的格式來書寫。
redis.conf: | #key:redis.conf (默認是你創建ConfigMap時--from-file=redis.conf那哪個配置文件就叫什麼名字)
appendonly yes #value:配置文件的內容
kind: ConfigMap
metadata:
name: redis-conf
namespace: default
註:data里可以包含多個配置文件的數據,所以data裡面是通過key:value的形式來表示對應的配置文件的名字及內容的
創建完ConfigMap後通過創建一個pod來具體講述一下ConfigMap是如何使用的
apiVersion: v1
kind: Pod
metadata:
name: redis
spec:
containers:
- name: redis
image: redis
command: #創建容器後在容器裡面執行的命令
- redis-server
- "/redis-master/redis.conf" #指的是redis容器內部的位置
ports:
- containerPort: 6379
volumeMounts:
- mountPath: /data #指的是容器內部的/data目錄
name: data #卷掛載的名字,與下面相同名字的volumes進行匹配並掛載
- mountPath: /redis-master
name: config
volumes:
- name: data
emptyDir: {}
- name: config #將volumeMounts需要進行掛載且name為config的目錄以配置集的方式進行掛載
configMap:
name: redis-conf #這是配置集的名稱,k8s會根據這個名字來尋找對應的ConfigMap
items:
- key: redis.conf #這是ConfigMap當中data裡面的key值,也就是要掛載的配置文件的名字,k8s要根據這個key值從名為redis.conf的ConfigMap中找到需要掛載的配置文件的真正內容。
path: redis.conf #這是最終容器當中配置文件的名字,也就是容器中配置文件路徑為/redis-master/redis.conf
用圖片描述對應關係就是如下所示:
4.另外還可通過kubectl edit來編輯ConfigMap從而直接修改容器內部的配置文件的內容:
綜上就是一個ConfigMap從創建到使用的全部過程,最近又有時間將之前的學習筆記編輯成部落格,以後也會一直堅持下去,用自己認為最通俗易懂的表達方式來分享自己所得,希望對大家有幫助,若轉載請標明出處。