K8S数据存储(高级存储之 PV、PVC、PV和PVC生命周期)

本文介绍了Kubernetes中的高级存储概念,包括PV(Persistent Volume)和PVC(Persistent Volume Claim)。PV是存储资源的抽象,由管理员创建和维护,而PVC则是用户对存储需求的声明。PV和PVC的生命周期包括资源供应、绑定、使用、释放和回收。用户通过创建PVC申请存储,然后在Pod中使用PVC来间接使用PV资源,从而实现数据的持久化。当不再需要存储时,删除PVC会触发PV的释放和可能的数据清理过程。
摘要由CSDN通过智能技术生成

一、高级存储

使用NFS提供存储,此时就要求用户会搭建NFS系统,并且会在yaml配置nfs。由于kubernetes支持的存储系统有很多,要求客户全都掌握,显然不现实。为了能够屏蔽底层存储实现的细节,方便用户使用,kubernetes引入PV和PVC两种资源对象。

PV (Persistent Volume)是持久化卷的意思,是对底层的共享存储的一种抽象。一般情况下PV由kubernetes管理员进行创建和配置,它与底层具体的共享存储技术有关,并通过插件完成与共享存储的对接。

PVC (Persistent Volume Claim)是持久卷声明的意思,是用户对于存储需求的一种声明。换句话说,PVC其实就是用户向kubernetes系统发出的一种资源需求申请。
在这里插入图片描述

使用了PV和PVC之后,工作可以得到进一步的细分:

  • 存储:存储工程师维护

  • PV:kubernetes管理员维护

  • PVC: kubernetes用户维护

(一)PV

PV是存储资源的抽象,PV资源是属于集群资源,跨namespace(不受命名空间隔离)

PV资源清单文件:

apiVersion: v1
apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv2
spec:
  nfs: # 存储类型,与底层真正存储对应
  capacity: # 存储能力,目前只支持存储空间的设置
    storage: 2Gi
  accessModes: #访问模式
  storageClassName: #存储类别
  persistentVolumeReclaimPolicy: #回收策略

PV的关键配置参数说明:
存储类型
	底层实际存储的类型,kubernetes支持多种存储类型(nfs、cifs、glusterfs等),每种存储类型的配置都有所差异
存储能力(capacity)
	目前只支持存储空间的设置( storage=1Gi ),不过未来可能会加入IOPS、吞吐量等指标的配置
访问模式(accessModes)
	用于描述用户应用对存储资源的访问权限,访问权限包括下面几种方式:
		ReadWriteOnce (RWO) :读写权限,但是只能被单个节点挂载
		ReadOnlyMany (ROX) :只读权限,可以被多个节点挂载
		ReadWriteMany (RWX) :读写权限,可以被多个节点挂载
		需要注意的是,底层不同的存储类型可能支持的访问模式不同
回收策略(persistentVolumeReclaimPolicy)
	当PV不再被使用了之后,对其的处理方式。目前支持三种策略:
		Retain (保留) 保留数据,需要管理员手工清理数据
		Recycle (回收) 清除PV中的数据,效果相当于执行rm -rf /thevolume/*
		Delete (删除) 与PV相连的后端存储完成volume的删除操作,当然这常见于云服务商的存储服务
		需要注意的是,底层不同的存储类型可能支持的回收策略不同
存储类别
	PV可以通过storageClassName参数指定一个存储类别
		具有特定类别的PV只能与请求了该类别的PVC进行绑定
		未设定类别的PV则只能与不请求任何类别的PVC进行绑定
状态(status)
	一个PV的生命周期中,可能会处于4种不同的阶段:
		Available(可用):表示可用状态,还未被任何PVC绑定
		Bound(已绑定):表示PV已经被PVC绑定
		Released(已释放):表示PVC被删除,但是资源还未被集群重新声明
		Failed(失败):表示该PV的自动回收失败

【例 】

使用NFS作为存储,来演示PV的使用,创建3个PV,对应NFS中的3个暴露的路径。

准备NFS环境

# 创建目录
[root@nfs ~]# mkdir -p /root/data/{pv1,pv2,pv3}
# 配置共享目录及权限
[root@nfs ~]# vim /etc/exports
/root/data/pv1 192.168.126.0/24(rw,no_root_squash)
/root
PV(PersistentVolume)和PVC(PersistentVolumeClaim)是Kubernetes中用于实现持久化存储的重要概念。 PV是集群中的一块存储,可以是NFS、iSCSI、本地存储等,由管理员进行配置或使用存储类进行动态配置。PV定义了存储的容量、访问模式、持久化存储的类型等属性。PV生命周期是独立于Pod的,即使Pod被删除,PV仍然存在,可以被其他Pod继续使用。 PVC是一个持久化存储卷,用于访问各种类型的持久化存储,如本地存储、网络存储、云存储等。PVC的使用使应用程序更加灵活和可移植,同时也提高了存储资源的利用率。PVCPV是一一对应的关系,即一个PVC只能绑定一个PV,而一个PV也只能被一个PVC绑定。 下面是一个演示k8s持久化存储PVPVC的案例: 1. 创建PV: ```yaml apiVersion: v1 kind: PersistentVolume metadata: name: my-pv spec: capacity: storage: 1Gi accessModes: - ReadWriteOnce persistentVolumeReclaimPolicy: Retain storageClassName: my-storage-class nfs: path: /data server: nfs-server-ip ``` 2. 创建PVC: ```yaml apiVersion: v1 kind: PersistentVolumeClaim metadata: name: my-pvc spec: accessModes: - ReadWriteOnce resources: requests: storage: 1Gi storageClassName: my-storage-class ``` 3. 创建Pod,并挂载PVC卷: ```yaml apiVersion: v1 kind: Pod metadata: name: my-pod spec: containers: - name: my-container image: nginx volumeMounts: - name: my-volume mountPath: /data volumes: - name: my-volume persistentVolumeClaim: claimName: my-pvc ``` 4. 删除PVC的正确步骤: ```shell kubectl delete pod my-pod kubectl delete pvc my-pvc kubectl delete pv my-pv ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值