有人可以澄清Kubernetes中的持久卷吗?
在下面的示例中,/ my-test-project在持久卷中。然后,为什么我需要这些挂载,因为从技术上讲我的整个目录/ my-test-project是持久的?如果整个目录都保留下来,这些mountpath和subpath将如何提供帮助。谢谢!
volumeMounts:
- name: empty-dir-volume
mountPath: /my-test-project/data-cache
subPath: data-cache
- name: empty-dir-volume
mountPath: /my-test-project/user-cache
subPath: user-cache
volumes:
- name: empty-dir-volume
emptyDir: {}
答案 0 :(得分:1)
您的/my-test-project
整个目录未保留。
主机/my-test-project/data-cache
中的mountPath或路径保留在路径empty-dir-volume
中的data-cache
中
mountPath /my-test-project/user-cache
保留在路径empty-dir-volume
中的user-cache
中
这意味着当您在/my-test-project/data-cache
中创建文件时,该文件将保留在emtpy-dir-volume中的data-cache
(子路径)中。用户缓存也是如此。每当您在/my-test-project/
内创建文件时,它都会永久保存。假设您创建了/my-test-project/new-dir
,现在new-dir
将不会保留。
为获得更好的解释,让我们以下面的示例为例(两个容器共享该卷,但在 mounthPath 中不同):
apiVersion: v1
kind: Pod
metadata:
name: share-empty-dir
spec:
containers:
- name: container-1
image: alpine
command:
- "bin/sh"
- "-c"
- "sleep 10000"
volumeMounts:
- name: empty-dir-volume
mountPath: /my-test-project/data-cache
subPath: data-cache-subpath
- name: empty-dir-volume
mountPath: /my-test-project/user-cache
subPath: user-cache-subpath
- name: container-2
image: alpine
command:
- "bin/sh"
- "-c"
- "sleep 10000"
volumeMounts:
- name: empty-dir-volume
mountPath: /tmp/container-2
volumes:
- name: empty-dir-volume
emptyDir: {}
在容器1中:
/my-test-project/user-cache
保留在路径empty-dir-volume
中的user-cache-subpath
中/my-test-project/data-cache
保留在路径empty-dir-volume
中的data-cache-subpath
中在容器2中:
/tmp/container-2
保留在路径“”(表示“ /”)的empty-dir-volume
中观察:
/my-test-project/user-cache/a.txt
。我们可以在/tmp/container-2/user-cache-subpath/a.txt
的container-2中看到此文件,并且可以进行反向操作/my-test-project/data-cache/b.txt
。我们可以在/tmp/container-2/data-cache-subpath/a.txt
的container-2中看到此文件,并且可以进行反向操作/tmp/container-2/new.txt
,我们永远无法将容器1中的这个文件作为在容器1中指定子路径的基本路径注意:请注意,您正在使用emptyDir
类型的卷,这意味着每当删除pod时,数据都会丢失。此类型仅用于在容器之间共享数据。