Kubernetes永久卷

时间:2020-05-21 14:43:36

标签: kubernetes kubernetes-pod

有人可以澄清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: {}

1 个答案:

答案 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中:

  • mountPath /my-test-project/user-cache保留在路径empty-dir-volume中的user-cache-subpath
  • mountPath /my-test-project/data-cache保留在路径empty-dir-volume中的data-cache-subpath

在容器2中:

  • mountPath /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时,数据都会丢失。此类型仅用于在容器之间共享数据。