我认为这个解决方案是令人满意的:在 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)