K8S之持久化存储
K8S为了更好的支持有状态应用的数据存储问题,除了基本的HostPath和EmptyDir提供的数据持久化方案之外还提供了PV、PVC和
StorageClass资源对象来对存储进行管理
PV全称Persistent Volume(持久化卷),是对底层数据存储的抽象,PV由管理员创建、维护以及配置,和底层
的数据存储事先方法有关,比如Ceph NFS ClusterFS等,都是通过插件机制完成和共享存储对接
PVC全称Persistent Volume Claim(持久化声明),把PV当作接口,里面封装了我们底层的数据存储,PVC就是
调用接口实现数据存储操作,PVC消耗的是PV的资源
PV
以NFS作为存储设备为例,PV作为存储设备,主要包括存储能力、访问模式、存储类型、回收信息等关键信息。PV有四种状态值:
Availabele=可用状态,表示还未被任何PVC绑定, Bound=已绑定,表示已被PVC绑定,Released=已释放PVC被删除,但资源还未被集群重> 新声明,Failed=失败,表示PV自动回收失败
apiVersion: v1
kind: PersistentVolume
metadata:
name: my-pv01
labels:
storage: pv
spec:
accessModes:
- ReadWriteOnce
capacity:
storage: 1Gi
persistentVolumeReclaimPolicy: Recycle
nfs:
path: /data/k8s
server: xx.xx.xx.xx
kubectl create -f pv01.yaml
参数说明
- accessMode: 访问模式
- ReadWriteOnce 表示读写权限,但只能被一个node挂载一次
- ReadOnyMany 表示只读权限,可以被多个node多次挂载
- ReadWriteMany 表示读写权限,可以被多个node多次挂载
- capacity: 持久卷资源和容器的描述,存储大小是唯一可设置或请求的资源
- persistentVolumeReclaimPolicy: 回收策略
- Retain 保留数据,如果要清理需要手动清理数据,,默认值
- Delete 删除,将从K8S中删除PV对象,以及外部基础设施中相关的存储资产
- Recycle 回收,清除PV中所有的数据,相当执行rm -rf /pv-volume/*
PVC
定义PVC的yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: pvc-test
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
kubectl apply -f psv-test.yaml
参数说明
- accessModes: 定义卷有的访问模式
- resouces: 定义卷的最小资源
- dataSource: 定义如果提供者具有卷快照功能,就会创建卷,并将数据恢复到卷中,反之不创建
- selector: 定义绑定卷的标签查询
- storageClassName: 定义storageClass名字
- volumeMode: 定义卷的类型
- volumeName: 需要绑定PV的名称链接
一个PV只能运行一个PVC绑定,PVC需求的容量大于PV的可用容量,则绑定失败。如果PVC的需求的
容量小于PV的可用容量,绑定的容量是PV的可用容量