Step -1 :创建存储路径
    image.png
    image.png
    先创建一个目录用以存放PV/PVC的试验相关存储路径

    “mkdir /opt/testpv”+“cd /opt/testpv”+“mkdir pv-1 pv-2 pv-3”

    Step - 2:暴露存储路径:
    image.png
    image.png
    增加暴露存储路径:

    “vim /etc/exports”

    /opt/testdirectory 10.1.10.0/24(rw,no_root_squash)

    /opt/testpv/pv-1 10.1.10.0/24(rw,no_root_squash)
    /opt/testpv/pv-2 10.1.10.0/24(rw,no_root_squash)
    /opt/testpv/pv-3 10.1.10.0/24(rw,no_root_squash)

    image.png
    重启NFS服务以及查看状态:

    “ systemctl restart nfs”

    “ systemctl status nfs”

    Step - 3:创建PV资源
    image.png
    image.png
    编辑pv.yaml

    “vim pv.yaml”

    apiVersion: v1
    kind: PersistentVolume
    metadata:
    name: pv-1
    spec:
    capacity:
    storage: 1Gi #(明确申明,需要1G以上的存储空间作为存储卷)
    accessModes:
    - ReadWriteMany #(访问模式)
    persistentVolumeReclaimPolicy: Retain #(回收策略)
    nfs:
    path: /opt/testpv/pv-1 #(指定存储路径)
    server: 10.1.10.128 #(存储服务器节点)
    —-
    apiVersion: v1
    kind: PersistentVolume
    metadata:
    name: pv-2
    spec:
    capacity:
    storage: 2Gi
    accessModes:
    - ReadWriteMany
    persistentVolumeReclaimPolicy: Retain
    nfs:
    path: /opt/testpv/pv-2
    server: 10.1.10.128
    —-
    apiVersion: v1
    kind: PersistentVolume
    metadata:
    name: pv-3
    spec:
    capacity:
    storage: 3Gi
    accessModes:
    - ReadWriteMany
    persistentVolumeReclaimPolicy: Retain
    nfs:
    path: /opt/testpv/pv-3
    server: 10.1.10.128

    image.png
    image.png
    声明式创建pv资源清单配置,并检查状态,结合dashboard辅证

    “kubectl apply -f pv.yaml”

    “ kubectl get pv -o wide”

    NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE VOLUMEMODE
    pv-1 1Gi RWX Retain Available 14s Filesystem
    pv-2 2Gi RWX Retain Available 14s Filesystem
    pv-3 3Gi RWX Retain Available 14s Filesystem

    Step - 4:创建PVC
    image.png
    编辑pvc.yaml

    “vim pvc.yaml”

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
    name: pvc-1
    namespace: storage
    spec:
    accessModes:
    - ReadWriteMany
    resources:
    requests:
    storage: 1Gi(申明我需要对应多少大小的存储卷)
    —-
    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
    name: pvc-2
    namespace: storage
    spec:
    accessModes:
    - ReadWriteMany
    resources:
    requests:
    storage: 1Gi
    —-
    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
    name: pvc-3
    namespace: storage
    spec:
    accessModes:
    - ReadWriteMany
    resources:
    requests:
    storage: 1Gi

    image.png
    image.png
    image.png
    声明式创建pvc配置,并结合dashboard辅证,可以看到pvc创建完成,并自动完成与之对应的pv绑定

    “kubectl apply -f pvc.yaml”

    “ kubectl get pvc -n storage -o wide”

    Step - 5:创建POD,并绑定PVC
    image.png
    image.png
    编辑pvc-pod.yaml

    “vim pvc-pod.yaml”

    apiVersion: v1
    kind: Pod
    metadata:
    name: pod-1
    namespace: storage
    spec:
    containers:
    - name: busybox
    image: busybox:latest
    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: pvc-1
    readOnly: false
    —-
    apiVersion: v1
    kind: Pod
    metadata:
    name: pod-2
    namespace: storage
    spec:
    containers:
    - name: busybox
    image: busybox:latest
    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: pvc-2
    readOnly: false

    image.png
    image.png
    声明式创建资源

    “ kubectl apply -f pvc-pod.yaml”

    “kubectl get pods -n storage -o wide”

    NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
    pod-1 1/1 Running 0 17s 10.244.2.51 node-2
    pod-2 1/1 Running 0 17s 10.244.1.54 node-1
    volume-emptydir 2/2 Running 0 6h26m 10.244.1.52 node-1
    volume-hostpath 2/2 Running 0 5h48m 10.244.2.50 node-2
    volume-nfs 2/2 Running 0 3h46m 10.244.1.53 node-1

    image.png
    点击pod-1进去,可以看到,已经成功和pvc进行绑定

    image.png
    结合命令行,可以看到,存储路径已经出现了在创建pod时指定的命令,并成功创建出了文件

    PS:注意完成这个时候之后可以把这两个pod给删了,因为我们之前的配置里面的命令,是每10s写个pod到out.txt这个文件里去,所以删了以免占用资源