k8s存储pv/pvc中的subPath的使用详解

有些场景下我们需要在多个POD中使用同一个volume,这种情况在就不能直接直接写在同一个目录下,而需要使用该目录下针对每个POD的子目录,这个时候就可以使用subPath。

同时如果configMap/Secret挂载在容器的路径是会覆盖原有路径的下所有文件,这种场景在使用subPath也可以很好的解决该问题。

我们来看下用法吧。

我们先创建一套测试的pv/pvc

cat test-storage.yaml
kind: PersistentVolume
apiVersion: v1
metadata:
  name: test-pv
  labels:
    release: stable
spec:
  capacity:
    storage: 1Gi
  accessModes:
    - ReadWriteOnce
  persistentVolumeReclaimPolicy: Recycle
  hostPath:
    path: /tmp/test
    type: DirectoryOrCreate
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: test-pvc
  namespace: default
spec:
 accessModes: ["ReadWriteOnce"]
 resources:
   requests: 
     storage: 1Gi
---
apiVersion: v1
kind: Pod
metadata:
  name: test-pod
  namespace: default
spec:
    containers:
    - name: test-pod
      command: ["bash", "-c"]
      args: ["while true; do sleep 30; done;"]
      image: ubuntu
      imagePullPolicy: IfNotPresent
      volumeMounts:
      - mountPath: /data/tool/
        name: volst
        subPath: subpath1
    - name: test-pod2
      command: ["bash", "-c"]
      args: ["while true; do sleep 30; done;"]
      image: ubuntu
      imagePullPolicy: IfNotPresent
      volumeMounts:
      - mountPath: /data/tool/
        name: volst
        subPath: subpath2
    volumes:
    - name: volst
      persistentVolumeClaim:
        claimName: test-pvc

然后进行创建

kubectl apply -f test-storage.yaml

POD被创建以后我们进入POD中的test-pod容器,查看/data/tool路径创建一个sub1_file的文件,然后接着退出进入test-pod2容器,也创建一个sub2_file文件

微信截图_20240619145822.png

然后我们直接登录挂载的存储的节点上,查看/tmp/test目录

微信截图_20240619145900.png

虽然它们都是挂载的的/tmp/test目录,但是通过subPath又创建了一个子目录,每个容器都是使用/tmp/test目录下的自己所定义的子目录。

同时使用subPath挂载configMap/Secret文件时不会覆盖原有/tmp目录下的文件和目录。


内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://sulao.cn/post/994.html