Kubernetes

要使用哪個 Kubernetes configmap 符號連結?

  • May 4, 2021

概括

應該通過..data符號連結還是通過正常路徑訪問 K8s 配置映射?

細節

我們通過以下方式將 configmap 附加到 pod

...
       volumeMounts:
       - mountPath: /var/opt/app_configs
         name: app-config
         readOnly: true
...
     volumes:
     - name: app-config
       configMap:
         name: app-kubernetes-configmap

然後,似乎在 pod 中,我們可以通過以下任一方式訪問配置文件

  • 使用 Kubernetes 符號連結 -/var/opt/app_configs/..data/app-config.yaml
  • 配置文件的“正常”路徑 -/var/opt/app_configs/app-config.yaml

推薦什麼?

在這裡尋找的主要區別是:

  • 如果使用ConfigMap掛載subPath則在 pod 重新啟動之前它不會更新
  • 如果您將其掛載為目錄(不帶subPath),您的容器將獲得持續更新的配置文件,無需重新啟動。

使用範例subPath

$ kubectl -n production exec go-conf-example-6b4cb86569-22vqv -- ls -lha /app/configfiles 
total 20K    
drwxr-xr-x    1 root     root        4.0K Mar  3 19:34 .
drwxr-xr-x    1 app      app         4.0K Mar  3 19:34 ..
-rw-r--r--    1 root     root          42 Mar  3 19:34 config.json
-rw-r--r--    1 root     root          47 Mar  3 19:34 database.yml

使用目錄的範例:

$ kubectl -n production exec go-conf-example-67c768c6fc-ccpwl -- ls -lha /app/configfiles 
total 12K    
drwxrwxrwx    3 root     root        4.0K Mar  3 19:40 .
drwxr-xr-x    1 app      app         4.0K Mar  3 19:34 ..
drwxr-xr-x    2 root     root        4.0K Mar  3 19:40 ..2020_03_03_16_40_36.675612011
lrwxrwxrwx    1 root     root          31 Mar  3 19:40 ..data -> ..2020_03_03_16_40_36.675612011
lrwxrwxrwx    1 root     root          18 Mar  3 19:40 config.json -> ..data/config.json
lrwxrwxrwx    1 root     root          19 Mar  3 19:40 database.yml -> ..data/database.yml

請注意,容器內的文件實際上是一個symlink.

所以,回答你的問題:

應該通過 ..data 符號連結還是通過正常路徑訪問 K8s 配置映射?

在您的案例中,您可以在掛載目錄時採用兩種方式。

我的朋友 Vitalii 也通過他的回答分享了一些關於這個話題的觀點。

引用自:https://serverfault.com/questions/1062463