资源清单:
    image.png

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
    name: pvc
    namespace: dev
    spec:
    accessModes: # 访问模式
    selector: # 采用标签对PV选择
    storageClassName: # 存储类别
    resources: # 请求空间
    requests:
    storage: 5Gi

    参数解读:
    image.png
    访问模式(accessModes)

    用于描述用户应用对存储资源的访问权限

    image.png
    选择条件(selector)

    通过Label Selector的设置,可使PVC对于系统中己存在的PV进行筛选

    image.png
    存储类别(storageClassName)

    PVC在定义时可以设定需要的后端存储的类别,只有设置了该class的pv才能被系统选出

    image.png
    资源请求(Resources )

    描述对存储资源的请求

    配置演示:
    image.png
    创建pvc清单:

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
    name: pvc1
    namespace: dev
    spec:
    accessModes:
    - ReadWriteMany
    resources:
    requests:
    storage: 1Gi
    —-
    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
    name: pvc2
    namespace: dev
    spec:
    accessModes:
    - ReadWriteMany
    resources:
    requests:
    storage: 1Gi
    —-
    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
    name: pvc3
    namespace: dev
    spec:
    accessModes:
    - ReadWriteMany
    resources:
    requests:
    storage: 1Gi

    image.png
    应用并查看对应关系:

    # 创建pvc
    [root@k8s-master01 ~]# kubectl create -f pvc.yaml
    persistentvolumeclaim/pvc1 created
    persistentvolumeclaim/pvc2 created
    persistentvolumeclaim/pvc3 created

    # 查看pvc
    [root@k8s-master01 ~]# kubectl get pvc -n dev -o wide
    NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE VOLUMEMODE
    pvc1 Bound pv1 1Gi RWX 15s Filesystem
    pvc2 Bound pv2 2Gi RWX 15s Filesystem
    pvc3 Bound pv3 3Gi RWX 15s Filesystem

    # 查看pv绑定情况
    [root@k8s-master01 ~]# kubectl get pv -o wide
    NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM AGE VOLUMEMODE
    pv1 1Gi RWx Retain Bound dev/pvc1 3h37m Filesystem
    pv2 2Gi RWX Retain Bound dev/pvc2 3h37m Filesystem
    pv3 3Gi RWX Retain Bound dev/pvc3 3h37m Filesystem

    image.png
    创建pod清单,并编写与之对应的pvc:

    apiVersion: v1
    kind: Pod
    metadata:
    name: pod1
    namespace: dev
    spec:
    containers:
    - name: busybox
    image: busybox:1.30
    command: [“/bin/sh”,”-c”,”while true;do echo pod1 >> /root/out.txt; sleep 10; done;”]
    volumeMounts:
    - name: volume
    mountPath: /root/
    volumes:
    - name: volume
    persistentVolumeClaim:
    claimName: pvc1
    readOnly: false
    —-
    apiVersion: v1
    kind: Pod
    metadata:
    name: pod2
    namespace: dev
    spec:
    containers:
    - name: busybox
    image: busybox:1.30
    command: [“/bin/sh”,”-c”,”while true;do echo pod2 >> /root/out.txt; sleep 10; done;”]
    volumeMounts:
    - name: volume
    mountPath: /root/
    volumes:
    - name: volume
    persistentVolumeClaim:
    claimName: pvc2
    readOnly: false

    image.png
    应用并查看对应关系以及效果:

    # 创建pod
    [root@k8s-master01 ~]# kubectl create -f pods.yaml
    pod/pod1 created
    pod/pod2 created

    # 查看pod
    [root@k8s-master01 ~]# kubectl get pods -n dev -o wide
    NAME READY STATUS RESTARTS AGE IP NODE
    pod1 1/1 Running 0 14s 10.244.1.69 node1
    pod2 1/1 Running 0 14s 10.244.1.70 node1

    # 查看pvc
    [root@k8s-master01 ~]# kubectl get pvc -n dev -o wide
    NAME STATUS VOLUME CAPACITY ACCESS MODES AGE VOLUMEMODE
    pvc1 Bound pv1 1Gi RWX 94m Filesystem
    pvc2 Bound pv2 2Gi RWX 94m Filesystem
    pvc3 Bound pv3 3Gi RWX 94m Filesystem

    # 查看pv
    [root@k8s-master01 ~]# kubectl get pv -n dev -o wide
    NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM AGE VOLUMEMODE
    pv1 1Gi RWX Retain Bound dev/pvc1 5h11m Filesystem
    pv2 2Gi RWX Retain Bound dev/pvc2 5h11m Filesystem
    pv3 3Gi RWX Retain Bound dev/pvc3 5h11m Filesystem

    image.png
    效果验证:

    # 查看nfs中的文件存储
    [root@nfs ~]# more /root/data/pv1/out.txt
    node1
    node1
    [root@nfs ~]# more /root/data/pv2/out.txt
    node2
    node2