Volume 存储总结
Volumes 用来保证在 k8s 集群中部署有存储需求应用的一类对象。
存储分类
- 持久化存储
- 预先制备,可以根据卷模式,容量,类,回收策略,读写方式,挂载选项,以及一些 alpha 特性(吞吐量,io 等)等制备一批存储卷 PV
- 动态制备,需要自己开发或者使用第三方存储
- 临时存储
卷类型
- emptyDir 在 Pod 被指派到某节点时,此卷会被创建,最初是空的,不具备持久性
- fc 光纤通道
- . hostPath 即将容器中的卷映射到节点宿主系统,此操作有安全风险,因为可以指定宿主系统任意位置去挂载
- iscsi 删除卷,数据会被保留,卷只是被卸载,缺点:不允许同时写入,只能由一个 Pod 读写
- local 卷只能用作静态创建的持久卷,不支持动态配置,代表的是被挂载的本地存储设备,如磁盘,分区或者目录
- nfs linux 提供的一种网络文件存储服务
- …
卷模式 volumeMode
- FileSystem (default) 文件系统
- Block 块设备
存储容量
对于已经挂载 PV 的 PVC,是不允许执行容量变更的 (PVC 中的其他字段也不允许变更)
存储类 StorageClass
用于可自定义一些存储类,当没有给容器配置默认存储类的时候,系统中如果有默认存储类,则直接使用,如果集群中没有默认存储类,当添加了默认存储类的时候
回收策略
- Retain (default) 当 Pod 被回收的时候,存储会处于 Released 的状态,等待管理员人工干预
- Delete 当 Pod 被回收的时候,存储会自动被删除,需要用户自己实现删除策略,否则会删除失败 Failed
- Recycle (rm -rf /thevolume/*) 简单擦除,v1.29,只有
nfs
和hostPath
支持
访问方式
- ReadWriteOnce (RWO) 卷可以被同一个节点以读写方式挂载
- ReadOnlyMany (ROX) 卷可以被多个节点以只读方式挂载
- ReadWriteMany (RWX) 卷可以被多个节点以读写方式挂载
- ReadWriteOncePod (RWOP) (v1.29 stable) 卷可以被一个 Pod 以读写方式挂载
NOTE: 此处的访问方式,并不会实际保证限制对应的读写,读写的具体限制,还是要看使用什么样的存储与存储服务
挂载选项 mountOptions
volume.beta.kubernetes.io/mount-options
该注解将来可能会被彻底废弃
- nfs linux 提供的一种网络文件存储服务
- iscsi 同上
- vsphereVolume
- azureFile
节点亲和性
需要为local
卷显示地设置spec.nodeAffinity
持久卷状态
- Available 卷是一个空闲资源,尚未绑定到任何 PVC
- Bound 卷已经绑定到某 PVC
- Released 卷所绑定的 PVC 已经被删除,但是关联的存储资源尚未被回收
- Failed 卷的自动回收操作失败
卷快照 VolumeSnapshots
卷快照为集群用户提供了一种标准的方式,来在指定时间点复制卷的内容,并且不需要创建全新的卷。比如对某个数据库做更新或删除的时候,可以在这操作之前对卷做一个快照。
- 制备方式,可以预制备,动态制备
- 删除方式,删除 VolumeSnapshots 会出发 VolumeSnapshotContent 一起删除
- VolumeSnapshotClass 可以根据一些参数(如回收策略,访问方式,driver 等)定义快照类对象
CSI 卷克隆
卷克隆会为卷副本拷贝原来的数据,需要使用dataSource
或dataSourceRef
来引用同一命名空间中现有的 PVC
跨命名空间使用卷
创建 ReferenceGrant 对象,声明from
与to
Projected Volumes
- secret
- configMap
- downwardAPI 用来在容器内部挂载 Pod 元数据信息
- serviceAccountToken 服务账号令牌卷
- clusterTrustBundle (v1.29 alpha) 是一个作用域为集群的对象,向集群内的对象分发 X.509 根证书
Volume Attributes Classes (v1.29 alpha)
可以配置一些存储设备的特性如:iops,throughput
临时卷
- 类型
- emptyDir
- configMap,downwardAPI,secret
- CSI 临时卷
- 通用临时卷
- 其生命周期跟随 Pod,即删除 Pod 该卷也会同步删除,不同于 Docker 中的卷
卷健康监控
需要启用CSIVolumeHealth
,可以上报节点失效事件,支持节点卷健康检测