k8s配置集ConfigMap詳解

ConfigMap介紹

ConfigMap和Secret是Kubernetes系統上兩種特殊類型的存儲卷,ConfigMap對象用於為容器中的應用提供配置文件等資訊。但是比較敏感的數據,例如密鑰、證書等由Secret對象來進行配置。它們將相應的配置資訊保存於對象中,而後在Pod資源上以存儲卷的形式掛載並獲取相關的配置,以實現配置與鏡像文件的解耦。

下面主要介紹使用Volume將ConfigMap作為文件或目錄掛載

1.首先在容器外面創建一個redis.conf的配置文件,然後根據這個配置文件創建出一個名為redis.conf的ConfigMap

image

2.通過kubectl get cm redis.conf -o yaml可以將剛才創建的ConfigMap以yaml格式輸出

image

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

用圖片描述對應關係就是如下所示:

image

4.另外還可通過kubectl edit來編輯ConfigMap從而直接修改容器內部的配置文件的內容:

image
綜上就是一個ConfigMap從創建到使用的全部過程,最近又有時間將之前的學習筆記編輯成部落格,以後也會一直堅持下去,用自己認為最通俗易懂的表達方式來分享自己所得,希望對大家有幫助,若轉載請標明出處。

Tags: