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

参数说明

  1. accessMode: 访问模式
  • ReadWriteOnce 表示读写权限,但只能被一个node挂载一次
  • ReadOnyMany 表示只读权限,可以被多个node多次挂载
  • ReadWriteMany 表示读写权限,可以被多个node多次挂载
  1. capacity: 持久卷资源和容器的描述,存储大小是唯一可设置或请求的资源
  2. 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

参数说明

  1. accessModes: 定义卷有的访问模式
  2. resouces: 定义卷的最小资源
  3. dataSource: 定义如果提供者具有卷快照功能,就会创建卷,并将数据恢复到卷中,反之不创建
  4. selector: 定义绑定卷的标签查询
  5. storageClassName: 定义storageClass名字
  6. volumeMode: 定义卷的类型
  7. volumeName: 需要绑定PV的名称链接

一个PV只能运行一个PVC绑定,PVC需求的容量大于PV的可用容量,则绑定失败。如果PVC的需求的
容量小于PV的可用容量,绑定的容量是PV的可用容量

posted @ 2024-08-23 14:13  秋水秋色  阅读(18)  评论(0编辑  收藏  举报