问题的引入:Pod 通常是由应用的开发人员维护,而 Volume 则通常是由存储系统的管理员维护。这样就带来一个管理上的问题:应用开发人员和系统管理员的职责耦合在一起了。如果系统规模较小或者对于开发环境这样的情况还可以接受。但当集群规模变大,特别是对于生成环境

一. PersistentVolume

     PersistentVolume (PV) 是外部存储系统中的一块存储空间,由管理员创建和维护。与 Volume 一样,PV 具有持久性,生命周期独立于 Pod。

 

二. PersistentVolumeClaim

     PersistentVolumeClaim (PVC) 是对 PV 的申请 (Claim)。PVC 通常由普通用户创建和维护。需要为 Pod 分配存储资源时,用户可以创建一个 PVC,指明存储资源的容量大小和访问模式(比如只读)等信息,Kubernetes 会查找并提供满足条件的 PV

 

三. StorageClass存储类介绍

  1. 创建存储类StorageClass
  2. 创建使用存储类的持久化存储声明(PVC:PersistentVolumeClaim)
  3. 存储持久化声明通知系统,需要一个持久化存储(PV: PersistentVolume)
  4. 系统读取存储类的信息
  5. 系统基于存储类的信息,自动创建PVC需要的PV
  6. 创建一个使用PVC的Pod
  7. Pod中的应用通过PVC进行数据的持久化
  8. PVC使用PV进行数据的最终持久化处理

 

定义storageclass存储类

        存储类都包含provisioner、parameters和reclaimPolicy这三个参数域,可以为PVC指定一个默认的存储类

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
   name: csi-rbd
provisioner: rbd.csi.ceph.com
parameters:
    monitors: 192.168.74.57:6789
    pool: rbd
    imageFormat: "2"
    imageFeatures: layering
    adminid: admin
reclaimPolicy: Delete

 

设置默认storageclass

  • 标记一个默认的StorageClass对象;
  • 确定API server中DefaultStorage接入控制器已被启用

   通过添加storageclass.kubernetes.io/is-default-class注释,标记一个特定的StorageClass作为默认的存储类。

 

默认 StorageClass 的注解 storageclass.kubernetes.io/is-default-class 设置为 true。注解的其它任意值或者缺省值将被解释为 false

要标记一个 StorageClass 为非默认的,您需要改变它的值为 false

 

回收策略:reclaimPolicy参数

  • Recycle:清除 PV 中的数据,效果相当于执行 rm -rf
  • Delete:删除 Storage Provider 上的对应存储资源
  • Retain:需要管理员手工回收

 

accessModes

  • ReadWriteOnce:以 read-write 模式 mount 到单个节点
  • ReadOnlyMany:read-only 模式 mount 到多个节点
  • ReadWriteMany:read-write 模式 mount 到多个节点

 

Phase

  • Available – PV可以被使用
  • Bound – PV被绑定到PVC
  • Released – 被绑定的PVC被删除,可以被Reclaim
  • Failed – 自动回收失败
Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐