当前位置: 首页 > news >正文

数据存储——高级存储之PV和PVC

一、概述

PV Persistent Volume )是持久化卷的意思,是对底层的共享存储的一种抽象。一般情况下 PV
kubernetes 管理员进行创建和配置,它与底层具体的共享存储技术有关,并通过插件完成与共享存储的对接。
PVC Persistent Volume Claim )是持久卷声明的意思,是用户对于存储需求的一种声明。换句话
说, PVC 其实就是用户向kubernetes系统发出的一种资源需求申请。

二、PV

PV 是存储资源的抽象,下面是资源清单文件 :
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv2
spec:
nfs: # 存储类型,与底层真正存储对应
capacity: # 存储能力,目前只支持存储空间的设置
storage: 2Gi
accessModes: # 访问模式
storageClassName: # 存储类别
persistentVolumeReclaimPolicy: # 回收策略
PV 的关键配置参数说明:
存储类型
        底层实际存储的类型,kubernetes 支持多种存储类型,每种存储类型的配置都有所差异
存储能力( 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个暴露的路径

1、准备NFS环境

 创建目录:

暴露服务,使服务生效:

2、创建pv.yaml
[root@k8s-master ~]# cat pv.yaml
apiVersion: v1
kind: PersistentVolume
metadata:name: pv1
spec:capacity:storage: 1GiaccessModes:- ReadWriteManypersistentVolumeReclaimPolicy: Retainnfs:path: /root/data/pv1server: master---apiVersion: v1
kind: PersistentVolume
metadata:name: pv2
spec:capacity:storage: 2GiaccessModes:- ReadWriteManypersistentVolumeReclaimPolicy: Retainnfs:path: /root/data/pv2server: master
---apiVersion: v1
kind: PersistentVolume
metadata:name: pv3
spec:capacity:storage: 3GiaccessModes:- ReadWriteManypersistentVolumeReclaimPolicy: Retainnfs:path: /root/data/pv3server: master

创建pv:

查看pv:

三、PVC 

PVC 是资源的申请,用来声明对存储空间、访问模式、存储类别需求信息。下面是资源清单文件:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: pvc
namespace: dev
spec:
accessModes: # 访问模式
selector: # 采用标签对PV选择
storageClassName: # 存储类别
resources: # 请求空间
requests:
storage: 5Gi
PVC 的关键配置参数说明:
访问模式( accessModes
        用于描述用户应用对存储资源的访问权限
选择条件( selector
        通过Label Selector 的设置,可使 PVC 对于系统中己存在的 PV 进行筛选
存储类别( storageClassName
        PVC在定义时可以设定需要的后端存储的类别,只有设置了该 class pv 才能被系统选出
资源请求( Resources
        描述对存储资源的请求

实验:

1、创建 pvc.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: pvc1
namespace: dev
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 1Gi
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: pvc2
namespace: dev
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 1Gi
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: pvc3
namespace: dev
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 1Gi
2、创建pvc、查看pvc
 3、创建pods.yaml,使用pv
[root@k8s-master ~]# vim pods.yaml
apiVersion: v1
kind: Pod
metadata:
name: pod1
namespace: dev
spec:
containers:
- name: busybox
image: busybox:1.30
command: ["/bin/sh","-c","while true;do echo "this is pod3" >> /root/out.txt; sleep
10; done;"]
volumeMounts:
- name: volume
mountPath: /root/
volumes:
- name: volume
persistentVolumeClaim:
claimName: pvc3
readOnly: false[root@k8s-master ~]# kubectl create -f pods.yaml
pod/pod66 created# 查看pod
[root@k98s-master ~]# kubectl get pods -n dev -o wide
NAME READY STATUS RESTARTS AGE IP NODE
pod66 1/1 Running 0 14s 10.244.1.69 node1

查看pod: 

查看NFS中的文件存储:

相关文章:

  • 力扣面试150题-- 翻转二叉树
  • ThreadLocal源码深度剖析:内存管理与哈希机制
  • GisWeb实战笔记(1)基于 Vue 3 + Vite + CesiumJS搭建gis开发环境
  • 深入探索Anthropic Claude与Spring AI的融合应用
  • 【STM32单片机】#13 RTC实时时钟
  • 分析strtol(),strtoul()和strtod()三个函数的功能
  • 从网页到桌面:将 Web 应用无缝迁移为 Electron 桌面程序
  • 电赛经验分享——模块篇
  • 定积分的定义式(黎曼和极限定义)
  • 协议(消息)生成
  • STA中的multi_cycle 和false_path详细讨论
  • 从Rtos到Linux:学习的策略
  • Dify框架面试内容整理-如何评估基于Dify开发的AI应用的效果?
  • 【Vue】Vue3源码解析与实现原理
  • 基于muduo库实现高并发服务器
  • Linux文件复制命令精要指南:cp与scp详解
  • DotNetBrowser 3.2.0 版本发布啦!
  • RPC是什么
  • 线程局部存储----TLS
  • 使用AI 将文本转成视频 工具 介绍
  • “半世纪来对无争议边界最深入袭击”:印巴冲突何以至此又如何收场?
  • 吴清:加强监管的同时传递监管温度,尽力帮助受影响企业应对美加征关税的冲击
  • 住宿行业迎“最火五一”:数千家酒店连续3天满房,民宿预订量创历史新高
  • 为什么所有动物里,只有人类幼崽发育得这么慢?
  • 全国铁路旅客发送量连续3天同比增幅超10%,今日预计发送1800万人次
  • AI世界的年轻人|与总书记交流过的“00后”,渴望紧握时代赋予的接力棒