目的是什么:
    pvc要能实现自主调度节点,执行任务
    前提:

    1. pvc
    2. pvc类型
    3. 哪些配置决定这个能实现调度
    4. 有没有不支持的类型

    关键字段两个:
    访问模式
    pv亲和性
    https://kubernetes.io/zh/docs/concepts/storage/volumes/


    用这四个 CSI NFS, LOCAL, HostPath 验一下访问模式(accessModes)和 亲和性

    1. 先创建pv
    2. 创建pvc,申请pv,会根据配置的属性自动匹配pv
    3. 创建pod,pod能够挂卷,能够连上pvc,实现挂载
    4. pv有一个节点亲和性的配置可以指定哪个节点的pod可以访问它
    5. PV可以设置节点亲和性来限制只能通过某些Node访问Volume,可以在PV定义中的nodeAffinity字段进行设置。使用这些Volume的Pod将被调度到满足条件的Node上。
    6. pod可以设置volumes,pv可以设置哪些node能访问volume,就能实现符合pv要求的pod调度到可用节点上。对于Local类型的PV,需要手工设置。
    7. Kubernetes支持的PV类型:
      • NFS:网络文件系统
      • Local:本地存储设备,可以通过指定块设备(Block Device)提供local PV
      • HostPath:宿主机目录,仅用于单机测试
      • Glusterfs:一种开源共享存储系统
      • Cinder:OpenStack块存储系统

    PVC节点亲和性 - 图1
    local
    image.png


    所以想干嘛!

    1. 新建pv,给PV带上节点亲和性
    2. 给pvc绑定pv,给pvc带上和pv相同的访问模式
    3. 创建pod,存储模式分别是nfs,local、hostpath,csi,指定pvc
    4. 查看pod所在节点,是不是和节点亲和性规定的相关
    5. 删除pod,查看pv或pvc

    测试一下:

    pv 存储:nfs 节点亲和性: 访问模式:RWX
    pvc 存储类别: 访问模式:RWX
    pod pvc claimName:

    pv.yaml

    1. apiVersion: v1
    2. kind: PersistentVolume
    3. metadata:
    4. name: pv1
    5. spec:
    6. capacity:
    7. storage: 1Gi
    8. accessModes:
    9. - ReadWriteMany
    10. persistentVolumeReclaimPolicy: Retain
    11. nfs:
    12. path: /root/data/pv1
    13. server: 192.168.5.6
    14. ---
    15. apiVersion: v1
    16. kind: PersistentVolume
    17. metadata:
    18. name: pv2
    19. spec:
    20. capacity:
    21. storage: 2Gi
    22. accessModes:
    23. - ReadWriteMany
    24. persistentVolumeReclaimPolicy: Retain
    25. nfs:
    26. path: /root/data/pv2
    27. server: 192.168.5.6
    28. ---
    29. apiVersion: v1
    30. kind: PersistentVolume
    31. metadata:
    32. name: pv3
    33. spec:
    34. capacity:
    35. storage: 3Gi
    36. accessModes:
    37. - ReadWriteMany
    38. persistentVolumeReclaimPolicy: Retain
    39. nfs:
    40. path: /root/data/pv3
    41. server: 192.168.5.6

    pvc.yaml

    1. apiVersion: v1
    2. kind: PersistentVolumeClaim
    3. metadata:
    4. name: pvc1
    5. namespace: dev
    6. spec:
    7. accessModes:
    8. - ReadWriteMany
    9. resources:
    10. requests:
    11. storage: 1Gi
    12. ---
    13. apiVersion: v1
    14. kind: PersistentVolumeClaim
    15. metadata:
    16. name: pvc2
    17. namespace: dev
    18. spec:
    19. accessModes:
    20. - ReadWriteMany
    21. resources:
    22. requests:
    23. storage: 1Gi
    24. ---
    25. apiVersion: v1
    26. kind: PersistentVolumeClaim
    27. metadata:
    28. name: pvc3
    29. namespace: dev
    30. spec:
    31. accessModes:
    32. - ReadWriteMany
    33. resources:
    34. requests:
    35. storage: 1Gi

    pod.yaml

    1. apiVersion: v1
    2. kind: Pod
    3. metadata:
    4. name: pod1
    5. namespace: dev
    6. spec:
    7. containers:
    8. - name: busybox
    9. image: busybox:1.30
    10. command: ["/bin/sh","-c","while true;do echo pod1 >> /root/out.txt; sleep 10; done;"]
    11. volumeMounts:
    12. - name: volume
    13. mountPath: /root/
    14. volumes:
    15. - name: volume
    16. persistentVolumeClaim:
    17. claimName: pvc1
    18. readOnly: false
    19. ---
    20. apiVersion: v1
    21. kind: Pod
    22. metadata:
    23. name: pod2
    24. namespace: dev
    25. spec:
    26. containers:
    27. - name: busybox
    28. image: busybox:1.30
    29. command: ["/bin/sh","-c","while true;do echo pod2 >> /root/out.txt; sleep 10; done;"]
    30. volumeMounts:
    31. - name: volume
    32. mountPath: /root/
    33. volumes:
    34. - name: volume
    35. persistentVolumeClaim:
    36. claimName: pvc2
    37. readOnly: false

    操作