概括
..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
有什么推荐的?
答案1
这里要寻找的主要区别是:
如果
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 也对这个话题分享了一些见解。他的回答。