2025,每天10分钟,跟我学K8S(三十二)- 对象属性 - Volume - PV PVC

        前面我们讲解了 hostPath 或者 emptyDir 的方式来持久化数据,但是他们也有各自的缺点,是否有更加可靠的存储来保存应用的持久化数据,这样容器在重建后,依然可以使用之前的数据?而且显示情况会出现存储资源和 CPU 资源以及内存资源有很大不同,为了屏蔽底层的技术实现细节,让用户更加方便的使用,Kubernetes 便引入了 PV 和 PVC 两个重要的资源对象来实现对存储的管理。这也是本章节需要和大家讲解的核心:PV 和 PVC。

一、什么是PV/PVC?

1. PersistentVolume (PV)

        PV 是对底层的共享存储的一种抽象,PV 由管理员进行创建和配置,它和具体的底层的共享存储技术的实现方式有关,比如 Ceph、GlusterFS、NFS 等,都是通过插件机制完成与共享存储的对接。

2. PersistentVolumeClaim (PVC)

        PVC 是用户存储的一种声明,PVC 和 Pod 比较类似,Pod 消耗的是节点,PVC 消耗的是 PV 资源,Pod 可以请求 CPU 和内存,而 PVC 可以请求特定的存储空间和访问模式。对于真正使用存储的用户不需要关心底层的存储实现细节,只需要直接使用 PVC 即可。

3. PV 与 PVC 的关系

  Admin[管理员创建 PV/StorageClass] --> PV
  User[用户创建 PVC] -->|匹配条件| PVC
  PVC -->|动态绑定| PV((动态生成的 PV))
  Pod -->|挂载| PVC

二、配置示例

为了演示方便,采用 NFS 这种存储资源作为后端存储,在k8s-node01(172.21.176.4)这个节点上安装NFS

需要注意的是,虽然只是在k8s-node01一台服务器上挂载NFS,但是所有的节点都是需要安装NFS服务的。也就是需要(apt-get install nfs-kernel-server)

# 安装 NFS 服务端 这一步需要所有服务器运行
sudo apt-get install nfs-kernel-server

# 创建共享目录
sudo mkdir -p /data/nfs_share
sudo chmod 777 /data/nfs_share

# 配置导出规则(/etc/exports)
echo "/data/nfs_share *(rw,sync,no_subtree_check,no_root_squash)" | sudo tee -a /etc/exports

# 应用配置
sudo exportfs -a
sudo systemctl restart nfs-kernel-server

1. 静态供给示例​

创建 PV

apiVersion: v1
kind: PersistentVolume
metadata:
  name: nfs-pv
spec:
  capacity:
    storage: 10Gi
  accessModes:
    - ReadWriteMany
  storageClassName: nfs
  persistentVolumeReclaimPolicy: Retain
  nfs:
    path: /data/nfs_share
    server: 172.21.176.4
    readOnly: false

创建 PVC

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: nfs-pvc
spec:
  storageClassName: nfs
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 5Gi

Pod 挂载 PVC

apiVersion: v1
kind: Pod
metadata:
  name: web-server
spec:
  containers:
    - name: nginx
      image: m.daocloud.io/docker.io/nginx
      volumeMounts:
        - name: data
          mountPath: /usr/share/nginx/html
  volumes:
    - name: data
      persistentVolumeClaim:
        claimName: nfs-pvc

查看演示结果​:

① 创建pv

② 创建pvc

③ 创建pod挂载pvc

④ 查看pv,pvc 这里面包含一些pv,pvc的属性参数具体查看下文

⑤ 查看创建成功的pod

三、关键配置参数

1. PV 配置参数

参数说明
capacity.storage存储容量(如 10Gi

访问模式

accessModes

ReadWriteOnce:

 RWO 存储卷可被单个节点上的一个 Pod ​以读写模式挂载单Pod独占读写(如数据库)

ReadOnlyMany:

 ROX 存储卷可被多个节点上的多个 Pod ​以只读模式挂载多 Pod 共享静态数据(如配置文件)

ReadWriteMany:

  RWX 存储卷可被多个节点上的多个 Pod ​以读写模式挂载    多 Pod 并发读写(如日志共享目录)

回收策略

persistentVolumeReclaimPolicy

Retain(保留数据)

  保留 PV 和底层存储数据,需手动清理。PV 状态变为 Released,不可被新 PVC 复用(如数据库)

Delete(删除数据)

  随着pod的删除而自动删除 PV 对象及底层存储资源(如云存储卷、磁盘)

Recycle(新版本废弃)
storageClassName关联的 StorageClass 名称
volumeMode存储类型:Filesystem(文件系统)、Block(块设备)

2. PVC 配置参数

参数说明
resources.requests.storage请求的存储容量
accessModes必须与 PV 的访问模式兼容,具体pvc参数讲解
storageClassName指定动态供给时使用的 StorageClass
selector筛选符合条件的 PV(如匹配标签)

四、其他类型的后端

上面举例是最常用的NFS类型,除了NFS以外,pv/pvc还支持多种类型的后端卷,例如云存储(各大平台云盘、文件存储 NAS、对象存储 OSS等)、分布式存储(Ceph、GlusterFS)等,操作都大同小异,这里不单独举例。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值