Kubernetes 配置映射符号链接 (..data/):有办法避免它们吗?

2024-04-03

我注意到,当我创建并安装包含一些文本文件的配置映射时,容器会将这些文件视为符号链接../data/myfile.txt .

例如,如果我的配置映射名为 tc-configs 并包含 2 个名为 stripe1.xml 和 stripe2.xml 的 xml 文件,如果我将此配置映射挂载到容器中的 /configs,则容器中将包含:

bash-4.4# ls -al /configs/
total 12
drwxrwxrwx    3 root     root          4096 Jun  4 14:47 .
drwxr-xr-x    1 root     root          4096 Jun  4 14:47 ..
drwxr-xr-x    2 root     root          4096 Jun  4 14:47 ..2018_06_04_14_47_03.291041453
lrwxrwxrwx    1 root     root            31 Jun  4 14:47 ..data -> ..2018_06_04_14_47_03.291041453
lrwxrwxrwx    1 root     root            18 Jun  4 14:47 stripe1.xml -> ..data/stripe1.xml
lrwxrwxrwx    1 root     root            18 Jun  4 14:47 stripe2.xml -> ..data/stripe2.xml

我猜 Kubernetes 需要这些符号链接以及 ../data 和 ..timestamp/ 文件夹,但我知道一些应用程序如果看到非预期的文件或文件夹,可能无法启动

有没有办法告诉 Kubernetes 不要生成所有这些符号链接并直接挂载文件?


我认为这个解决方案是令人满意的:在 mountPath 中指定确切的文件路径,将摆脱到的符号链接..data and ..2018_06_04_19_31_41.860238952

因此,如果我应用这样的清单:

apiVersion: v1
kind: Pod
metadata:
  name: my-lamp-site
spec:
    containers:
    - name: php
      image: php:7.0-apache
      volumeMounts:
      - mountPath: /var/www/html/users.xml
        name: site-data
        subPath: users.xml
    volumes:
    - name: site-data
      configMap:
        name: users

---

apiVersion: v1
kind: ConfigMap
metadata:
  name: users
data:
  users.xml: |
      <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
      <users>
      </users>

显然,我正在利用subpath https://kubernetes.io/docs/concepts/storage/volumes/#using-subpath明确地,它们不是 ConfigMaps 的“自动更新魔法”的一部分,我不会再看到任何符号链接:

$ kubectl exec  my-lamp-site -c php -- ls -al /var/www/html
total 12
drwxr-xr-x 1 www-data www-data 4096 Jun  4 19:18 .
drwxr-xr-x 1 root     root     4096 Jun  4 17:58 ..
-rw-r--r-- 1 root     root       73 Jun  4 19:18 users.xml

小心不要忘记subPath,否则users.xml将是一个目录!

回到我最初的清单:

spec:
    containers:
    - name: php
      image: php:7.0-apache
      volumeMounts:
      - mountPath: /var/www/html
        name: site-data
    volumes:
    - name: site-data
      configMap:
        name: users

我会看到这些符号链接回来:

$ kubectl exec  my-lamp-site -c php -- ls -al /var/www/html
total 12
drwxrwxrwx 3 root root 4096 Jun  4 19:31 .
drwxr-xr-x 3 root root 4096 Jun  4 17:58 ..
drwxr-xr-x 2 root root 4096 Jun  4 19:31 ..2018_06_04_19_31_41.860238952
lrwxrwxrwx 1 root root   31 Jun  4 19:31 ..data -> ..2018_06_04_19_31_41.860238952
lrwxrwxrwx 1 root root   16 Jun  4 19:31 users.xml -> ..data/users.xml

非常感谢精神病0 https://stackoverflow.com/users/46842/psycotica0 on K8s 加拿大松弛 https://k8scanada.slack.com/让我走上正确的轨道subpath https://kubernetes.io/docs/concepts/storage/volumes/#using-subpath(它们很快被提到配置映射文档 https://kubernetes.io/docs/tasks/configure-pod-container/configure-pod-configmap/#add-configmap-data-to-a-volume)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Kubernetes 配置映射符号链接 (..data/):有办法避免它们吗? 的相关文章

随机推荐