以 File 的方式掛載 Configmap 中的配置

配置文件掛載到 K8s 的 Pod 中有多種方式,可以用 hostPath 的方式將配置文件掛載到容器內,這種方式如果配置文件比較經常修改就不太適用,修改配置文件後,需要重新build 和部署鏡像才能使修改生效。比較推薦的是用 configMap 的方式來掛載配置。使用 configMap 方式掛載的配置,可以通過 kubectl edit cm xxxx-config來修改配置,然後 kubectl delete pods xxxxx後, pod 自動重啓後生效配置。

問題

以 configMap 方式掛載配置默認是將 configMap 中的配置掛載到某個 目錄下,比如下面的配置會把 configMap 中的 config.json 配置掛載到 /myproject/config1/config.json,而且有個附帶的效果,如果之前有其他的文件通過 COPY命令 COPY 到了/myproject/config/下面,這些文件會被抹去。

containers:
- image: alpine:latest
  name: myproject
  volumeMounts:
  - mountPath: /myproject/config1/
    name: myproject
volumes:
- name: myproject
  configMap:
    items:
      - key: config.json
        path: config.json

例子

比如 COPY了另外一個配置文件 test.json到 /myproject/config1/目錄下,然後通過上面的 configMap 方式掛載主要的配置文件 config.json 到 /myproject/config1/config.json,結果config1下原本的 test.json被刪除了。

掛載 configMap 前
掛載 configMap 後

解決方法

如何才能夠以文件的方式來掛載 configMap 中的配置呢?怎麼把 configMap 中的配置掛載到 /myproject/config1/config.json並且不刪除 /myproject/config1/目錄下的其他配置呢?可以通過 subPath 來實現,添加 subPath: config.json配置,同時需要修改 mountPath, mountPath: /myproject/config1/-> mountPath: /myproject/config1/config.json詳見如下配置:

containers:
- image: alpine:latest
  name: myproject
  volumeMounts:
  - mountPath: /myproject/config1/config.json
    subPath: config.json
    name: myproject
volumes:
- name: myproject
  configMap:
    items:
      - key: config.json
        path: config.json

通過這種方式掛載後是不會刪除 /myproject/config1/目錄下的其他配置的。
在這裏插入圖片描述

發佈了10 篇原創文章 · 獲贊 1 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章