PVC 只有绑定了 PV 之后才能被 Pod 使用,而 PVC 绑定 PV 的过程即是消费 PV 的过程,这个过程是有一定规则的,下面规则都满足的 PV 才能被 PVC 绑定:
- VolumeMode:被消费 PV 的 VolumeMode 需要和 PVC 一致;
- AccessMode:被消费 PV 的 AccessMode 需要和 PVC 一致;
- StorageClassName:如果 PVC 定义了此参数,PV 必须有相关的参数定义才能进行绑定;
- LabelSelector:通过 label 匹配的方式从 PV 列表中选择合适的 PV 绑定;
- storage:被消费 PV 的 capacity 必须大于或者等于 PVC 的存储容量需求才能被绑定。
PVC模板:
- apiVersion: v1
- kind: PersistentVolumeClaim
- metadata:
- name: disk-1
- spec:
- accessModes:
- – ReadWriteOnce
- resources:
- requests:
- storage: 20Gi
- storageClassName: test-disk
- volumeMode: Filesystem
PV模板:
- apiVersion: v1
- kind: PersistentVolume
- metadata:
- labels:
- failure-domain.beta.kubernetes.io/region: cn-zn
- failure-domain.beta.kubernetes.io/zone: cn-zn
- name: d-wz9g2j5qbo37r2lamkg4
- spec:
- accessModes:
- – ReadWriteOnce
- capacity:
- storage: 30Gi
- flexVolume:
- driver: alicloud/disk
- fsType: ext4
- options:
- VolumeId: d-wz9g2j5qbo37r2lamkg4
- persistentVolumeReclaimPolicy: Delete
- storageClassName: test-disk
- volumeMode: Filesystem
开源存储项目Ceph&Rook
围绕云原生技术的工具和项目正在大量涌现。作为生产中最突出的问题之一,有相当一部分开源项目致力于解决“在云原生架构上处理存储”这个问题。
目前最受欢迎的存储项目是Ceph和Rook。
Ceph是一个动态管理的、水平可伸缩的分布式存储集群。Ceph提供了对存储资源的逻辑抽象。它被设计成不存在单点故障、可自我管理和基于软件的。Ceph同时为相同的存储集群提供块、对象或文件系统接口。它能够提供非常稳定的块存储系统,并且K8S对Ceph放出了完整的生态,几乎可以说是全面兼容。
Ceph的架构非常复杂,有许多底层技术,如RADOS、librados、RADOSGW、RDB,它的CRUSH 算法和监视器、OSD和MDS等组件。这里不深入解读其架构,关键在于,Ceph是一个分布式存储集群,它可提供更高的可伸缩性,在不牺牲性能的情况下消除了单点故障,并提供了对对象、块和文件的访问的统一存储。