Volume 存储总结


the-volume-data

Volumes 用来保证在 k8s 集群中部署有存储需求应用的一类对象。

pod-pvc-pv

存储分类

  1. 持久化存储
    1. 预先制备,可以根据卷模式,容量,类,回收策略,读写方式,挂载选项,以及一些 alpha 特性(吞吐量,io 等)等制备一批存储卷 PV
    2. 动态制备,需要自己开发或者使用第三方存储
  2. 临时存储

卷类型

  1. emptyDir 在 Pod 被指派到某节点时,此卷会被创建,最初是空的,不具备持久性
  2. fc 光纤通道
  3. . hostPath 即将容器中的卷映射到节点宿主系统,此操作有安全风险,因为可以指定宿主系统任意位置去挂载
  4. iscsi 删除卷,数据会被保留,卷只是被卸载,缺点:不允许同时写入,只能由一个 Pod 读写
  5. local 卷只能用作静态创建的持久卷,不支持动态配置,代表的是被挂载的本地存储设备,如磁盘,分区或者目录
  6. nfs linux 提供的一种网络文件存储服务

卷模式 volumeMode

  1. FileSystem (default) 文件系统
  2. Block 块设备

存储容量

对于已经挂载 PV 的 PVC,是不允许执行容量变更的 (PVC 中的其他字段也不允许变更)

存储类 StorageClass

用于可自定义一些存储类,当没有给容器配置默认存储类的时候,系统中如果有默认存储类,则直接使用,如果集群中没有默认存储类,当添加了默认存储类的时候

回收策略

  1. Retain (default) 当 Pod 被回收的时候,存储会处于 Released 的状态,等待管理员人工干预
  2. Delete 当 Pod 被回收的时候,存储会自动被删除,需要用户自己实现删除策略,否则会删除失败 Failed
  3. Recycle (rm -rf /thevolume/*) 简单擦除,v1.29,只有nfshostPath支持

访问方式

  1. ReadWriteOnce (RWO) 卷可以被同一个节点以读写方式挂载
  2. ReadOnlyMany (ROX) 卷可以被多个节点以只读方式挂载
  3. ReadWriteMany (RWX) 卷可以被多个节点以读写方式挂载
  4. ReadWriteOncePod (RWOP) (v1.29 stable) 卷可以被一个 Pod 以读写方式挂载

NOTE: 此处的访问方式,并不会实际保证限制对应的读写,读写的具体限制,还是要看使用什么样的存储与存储服务

挂载选项 mountOptions

volume.beta.kubernetes.io/mount-options 该注解将来可能会被彻底废弃

  1. nfs linux 提供的一种网络文件存储服务
  2. iscsi 同上
  3. vsphereVolume
  4. azureFile

节点亲和性

需要为local卷显示地设置spec.nodeAffinity

持久卷状态

  1. Available 卷是一个空闲资源,尚未绑定到任何 PVC
  2. Bound 卷已经绑定到某 PVC
  3. Released 卷所绑定的 PVC 已经被删除,但是关联的存储资源尚未被回收
  4. Failed 卷的自动回收操作失败

卷快照 VolumeSnapshots

卷快照为集群用户提供了一种标准的方式,来在指定时间点复制卷的内容,并且不需要创建全新的卷。比如对某个数据库做更新或删除的时候,可以在这操作之前对卷做一个快照。

  • 制备方式,可以预制备,动态制备
  • 删除方式,删除 VolumeSnapshots 会出发 VolumeSnapshotContent 一起删除
  • VolumeSnapshotClass 可以根据一些参数(如回收策略,访问方式,driver 等)定义快照类对象

CSI 卷克隆

卷克隆会为卷副本拷贝原来的数据,需要使用dataSourcedataSourceRef来引用同一命名空间中现有的 PVC

跨命名空间使用卷

创建 ReferenceGrant 对象,声明fromto

Projected Volumes

  1. secret
  2. configMap
  3. downwardAPI 用来在容器内部挂载 Pod 元数据信息
  4. serviceAccountToken 服务账号令牌卷
  5. clusterTrustBundle (v1.29 alpha) 是一个作用域为集群的对象,向集群内的对象分发 X.509 根证书

Volume Attributes Classes (v1.29 alpha)

可以配置一些存储设备的特性如:iops,throughput

临时卷

  1. 类型
    1. emptyDir
    2. configMap,downwardAPI,secret
    3. CSI 临时卷
    4. 通用临时卷
  2. 其生命周期跟随 Pod,即删除 Pod 该卷也会同步删除,不同于 Docker 中的卷

卷健康监控

需要启用CSIVolumeHealth,可以上报节点失效事件,支持节点卷健康检测