持久化存储PV与PVC

news2025/7/19 16:52:19

1.PV与PVC
PV:

持久卷(PersistentVolume)简称PV,是集群中的一块存储,可以由管理员事先供应。
可以配置NFS、Ceph等常用存储配置,相对于volumes,提供了更多的功能,如生命周期管理、大小的限制。
PV 卷的供应有两种方式:静态供应或动态供应。

总的来说,PV是提供者,PVC是消费者,消费的过程就是绑定

静态:
集群管理员预先创建许多PV,在PV的定义中能够体现存储资源的特性。

动态:
集群管理员无须预先创建PV,而是通过StorageClass的设置对后端存储资源进行描述,标记存储的类型和特性。用户通过创建PVC对存储类型进行申请,系统将自动完成PV的创建及与PVC的绑定。如果PVC声明的Class为空"",则说明PVC不使用动态模式。

PVC:

持久卷申领(PersistentVolumeClaim,PVC)表达的是用户对存储的请求。就像Pod消耗Node的资源一样,PVC消耗PV资源。PVC可以申请存储空间的大小(size)和访问模式。

由管理员创建PV连接到后端存储,使用人员或管理员创建PVC使用PV资源。

2.PV资源回收
当用户不再使用其存储卷时,他们可以从 API 中将 PVC 对象删除,从而允许 该资源被回收再利用。PV 对象的回收策略告诉集群,当其被 从申领中释放时如何处理该数据卷。 目前,数据卷可以被 Retained(保留)、Recycled(回收)或 Deleted(删除)。

Retain:保留资源

保留策略可以管理员手动回收资源,当PVC被删除后,PV仍然存在,对应的数据卷被视为"已释放(released)",管理员可以手动回收资源。

Delete:删除数据

需要插件支持,如果支持,那么删除PVC时也会自动删除PV和相关的后端存储资源;动态卷默认为delete。

Recycle:回收(弃用)

回收策略已被弃用,代替者为动态供应。如果下层的卷插件支持,回收策略 Recycle 会在卷上执行一些基本的 擦除(rm -rf /thevolume/*)操作,之后允许该卷用于新的 PVC 申领。

3.访问模式
ReadWriteOnce:

卷可以被一个节点以读写方式挂载。 ReadWriteOnce 访问模式也允许运行在同一节点上的多个 Pod 访问卷,缩写为RWO。

ReadOnlyMany:

卷可以被多个节点以只读方式挂载,缩写为ROX。

ReadWriteMany:

卷可以被多个节点以读写方式挂载,缩写为RWX。

ReadWriteOncePod:

卷可以被单个 Pod 以读写方式挂载。 如果你想确保整个集群中只有一个 Pod 可以读取或写入该 PVC, 请使用ReadWriteOncePod 访问模式。这只支持 CSI 卷以及需要 Kubernetes 1.22 以上版本,缩写为RWOP。

注意: 你的存储支不支持这种访问模式,具体情况查看:官方文档

4.存储分类

文件存储(Filesystem):

一些数据可能需要多个节点使用,比如用户头像、用户上传文件等,实现方式:NFS、NAS、FTP等;NFS和FTP不推荐。

块存储(block):

一些数据只能被一个节点使用,或者是一块裸盘整个挂载使用,比如数据库、redis等,实现方式是Ceph、GlusterFS、公有云等。

对象存储:

由程序代码直接实现的一种存储方式,云原生应用无状态化常用的实现方式;实现方式:一般是符合53标准的云存储,比如AWS的53存储、Minio等。

5.创建PV卷
列举两个实例,其他类型可参考官网,因为我这资源有限。

5.1.实例:创建NAS/NFS类型的PV
生产不推荐NFS。可以使用NAS。

准备一台NFS服务器

第一步:准备一台NFS服务器,我这个装的有点多,你也可以只安装nfs服务器

第一步:准备一台NFS服务器,我这个装的有点多,你也可以只安装nfs服务器
yum -y install nfs* rpcbind

第二步:所有节点安装nfs客户端,不然不能识别,每一个需要挂载nfs的节点都需要装
yum -y install nfs-utils

第三步:在服务端创建共享目录
mkdir -p /data/k8s
第四步:服务端配置共享目录
cat /etc/exports
/data/k8s/ *(rw,sync,no_subtree_check,no_root_squash)
exportfs -r
systemctl restart nfs rpcbind
第五步:有另外一台机器挂载共享目录测试是否成功
mount -t nfs 192.168.10.6:/data/k8s /mnt

	# 启动rpcbind、nfs服务
	systemctl restart rpcbind && systemctl enable rpcbind
	systemctl restart nfs && systemctl enable nfs
	# 查看rpc服务的注册情况
	rpcinfo -p localhost
	# showmount测试
	showmount -e ip(ip地址)

创建一个PV

第一步:编写一个PV的yaml文件

apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv-nfs
spec:
  capacity:
    storage: 2Gi
  volumeMode: Filesystem
  accessModes:
    - ReadWriteOnce
  persistentVolumeReclaimPolicy: Recycle
  storageClassName: nfs-slow
  nfs:
    path: /data/k8s
    server: 192.168.10.6

kubectl create -f pv-nfs.yaml

kubectl get pv

第三步:说一下PV的状态(STATUS)

Available:可用,没有被PVC绑定的空闲资源
Bound:已绑定,已经被PVC绑定
Released:已释放,PVC被删除,资源未被重新使用
Failed:失败,自动回收失败
5.2.实例:创建一个hostPath类型的PV
当你没有一个可靠的存储,但是数据又不能丢失,可以挂载到宿主机的路径,即使重启数据还在。

第一步:创建一个pv-host.yaml文件
 

apiVersion: v1
kind: PersistentVolume
metadata:
  name: host-pv-volume
  labels:
    type: local
spec:
  storageClassName: hostpath
  capacity:
    storage: 1Gi
  accessModes:
    - ReadWriteOnce
  hostPath:
    path: "/mnt/data"  # 宿主机路径

kubectl create -f pv-host.yaml

首先创建一个PV,它的名字是pv-nfs,storageClassName名字是nfs-slow(这个名字不唯一,就是说其他PV也可以叫这个名字)
然后创建一个PVC,它的名字是test-pv-claim,storageClassName名字是nfs-slow(PVC绑定PV也是根据这个名字判断,根据上一点说的特性也就是说一个PVC可以绑定多个storageClassName名字是nfs-slow的PV)注意PVC设置的资源大小要等于小于PV。
最后Pod使用的时候创建一个volumes,这个名字是test-pv-storage,这个volumes使用的PVC资源要写PVC的name,也就是test-pv-claim;等Pod中的容器挂载资源的时候挂载的名字是volumes的name,也就是test-pv-storage。

6.2.创建一个PVC挂载到Pod

注意:pvc要和Pod在同一个命名空间,而pv不需要;因为都是在默认空间,就没指定,需要注意。

第一步:编写一个PVC的yaml文件

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: test-pv-claim
spec:
  accessModes:
    - ReadWriteOnce
  volumeMode: Filesystem
  resources:
    requests:
      storage: 2Gi  # 小于等于pv
  storageClassName: nfs-slow

第二步:执行yaml文件创建PVC;从下面这个状态来看已经绑定成功了,绑定了pv-nfs,类型为nfs-slow,都是前面指定的。

kubectl create -f pvc-nfs.yaml

第三步:创建Pod挂载PVC

apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: dp-nginx
  name: dp-nginx
spec:
  replicas: 1
  selector:
    matchLabels:
      app: dp-nginx
  strategy: {}
  template:
    metadata:
      labels:
        app: dp-nginx
    spec:
      volumes:
      - name: test-pv-storage
        persistentVolumeClaim:
          claimName: test-pv-claim
      containers:
      - image: nginx
        name: nginx
        volumeMounts:
        - mountPath: "/usr/share/nginx/html"
          name: test-pv-storage

---
[root@master volume]# cat pvc-pod.yaml
apiVersion: apps/v1beta1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  replicas: 2
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx
        #启用数据卷的名字为wwwroot,并挂载到nginx的html目录下
        volumeMounts:
        - name: wwwroot
          mountPath: /usr/share/nginx/html
        ports:
        - containerPort: 80
    #定义数据卷名字为wwwroot,类型为pvc
      volumes:
      - name: wwwroot
        persistentVolumeClaim:
          claimName: my-pvc


---
# 定义pvc的数据来源,根据容量大小来匹配pv
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  #对应上面的名字
  name: my-pvc
spec:
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 5Gi

第四步:创建Pod,进入Pod查看挂载情况

kubectl replace -f dp-nginx.yaml
kubectl exec -ti dp-nginx-fcd88d6f8-prxcd -- bash

pvc挂载格式

        volumeMounts:
        - name: pvc-disk
          mountPath: /data
      volumes:
        - name: pvc-disk
          persistentVolumeClaim:
            claimName: disk-ssd

如果是使用阿里云的ack,就免去了创建pv的麻烦,直接可以使用阿里云的共享云盘挂载

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/368833.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

用了10年Postman,意想不到它的Mock功能也如此强大

最近在做一些app,前后端分离的开发模式是必须的。一直用的python flask做后端的快速POC,python本身就是一门胶水语言,开发起来方便快捷,而flask又是一个极简的webserver框架(比Django简洁)。但在这里推荐的…

关于我利用python开发的PC端标注软件及目标检测软件

如何利用python快速开发PC端目标检测及数据标注软件概述开发软件背景开发第一步:功能需求分析开发第二步: 前端分区设计开发第三步:功能开发开发第四步:程序功能的打包与检查开发第五步:程序的反馈与改善一个例子的展示…

算法设计与分析期末考试复习(二)

分治法 将一个难以直接解决的大问题,分割成一些规模较小的相同问题,以便各个击破,分而治之。最好使子问题的规模大致相同。 分解(Divide):将一个难以直接解决的大问题,分割成一些规模较小的子…

个人电脑需求严重疲软,联想集团财务前景仍不乐观

来源:猛兽财经 作者:猛兽财经 财务业绩 联想集团(00992)于2月16日盘后公布了2023财年第三季度财报。 财报显示联想集团2023年第三季度的收入为152.67亿美元,从2022年第三季度的2011.27亿美元下降了24.1%。这也导致该公…

那些开发中需要遵守的产研开发规范

入职新公司第三天,没干啥其他活,基本在阅读产研开发规范。公司在技术方面沿用的是阿里的一套技术,所以入职之前需要先阅读《阿里巴巴开发规范》。今天整理一些平时需要关注的阿里规约和数据库开发规范,方便今后在开发过程中查阅。…

如何判断你的孩子是否适合IB课程?

IB课程最开始是IBO为外交官子女开设全球统一标准的课程,后为全球学生开设从幼儿园到大学预科的课程,为学生提供智力、情感、个人发展、社会技能等方面的教育。IB课程分为标准难度课程和具有挑战性的高难度课程。要求学生至少选择6门课加Theory of Knowle…

Java 日期时间与正则表达式,超详细整理,适合新手入门

目录 1、java.time.LocalDate类表示日期; 2、java.time.LocalTime类表示时间; 3、java.time.LocalDateTime类表示日期和时间; 4、java.time.format.DateTimeFormatter类用于格式化日期和时间; 5、创建正则表达式对象 6、匹配…

spring-boot、spring-cloud、spring-cloud-alibaba版本对应

一、查询 spring-boot(spring-boot-starter-parent) 版本号 https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-parent 二、查询 spring-cloud(spring-cloud-dependencies) 版本号 https://mvnrepository.com/artifact/org.springframework…

NPC内网穿透教程-入门

安装 安装包安装 releases下载 下载对应的系统版本即可,服务端和客户端是单独的 源码安装 安装源码 go get -u ehang.io/nps 编译 服务端go build cmd/nps/nps.go 客户端go build cmd/npc/npc.go docker安装 server安装说明 client安装说明 启动 服务端 下…

企业容器云管理平台选型指南

作者简介 涂家英,SUSE 资深架构师,专注 Cloud-Native 相关产品和解决方案设计,在企业级云原生平台建设领域拥有丰富的经验。 数字时代下的容器云管理平台 数字时代,市场竞争加剧,业务需求日新月异,敏态 IT…

Java常用日期类(包含三代)_Date类及Calendar类等

一.java.util.Date类概述从JDK 1.0出现。表示一个日期和时间,精确到毫秒,内部getTime()从1970年1月1号开始算。1. java.util.Date类构造部份构造已经过时,重点看以下两个构造。public Date()从运行程序的此时此刻到时间原点经历的毫秒值&…

Java学习笔记 --- 正则表达式

一、体验正则表达式 package com.javase.regexp;import java.util.regex.Matcher; import java.util.regex.Pattern;/*** 体验正则表达式,给文本处理带来哪些便利*/ public class Regexp_ {public static void main(String[] args) {//假设,编写了爬虫&…

【2023】助力Android金三银四面试

前言 新气象,新生机。在2023年的Android开发行业中,又有那些新的面试题出现呢?对于Android面试官的拷问,我们又如何正确去解答?万变不离其宗,其实只要Android的技术层面没变化,面试题也就是差不…

江苏专转本考前焦虑自救指南

考前焦虑自救指南 考试即将来临,面对着人生里未知的门槛,我们的心里总是充满着各种迟疑,成功的对立面永远都充斥着各种不确定性。 陷入考前焦虑,需要立即调整状态。 1、将你的内心恐惧用笔写下来 这样做的目的就是,不要…

git的使用(终端输入指令) 上

git目录前言1.创建仓库2.创建文件和修改数据状态分区![分区](https://img-blog.csdnimg.cn/d124dec6b2b14769ad20b75490f29cae.png)3 .删除、撤销重置 、和比较前言 今天带大家手把手敲一遍 git 流程: 安装一下git(详细观看我之前发的git文档&#xff0…

内网渗透(五十六)之域控安全和跨域攻击-非约束委派攻击

系列文章第一章节之基础知识篇 内网渗透(一)之基础知识-内网渗透介绍和概述 内网渗透(二)之基础知识-工作组介绍 内网渗透(三)之基础知识-域环境的介绍和优点 内网渗透(四)之基础知识-搭建域环境 内网渗透(五)之基础知识-Active Directory活动目录介绍和使用 内网渗透(六)之基…

【无标题】智能工业安全用电监测与智慧能源解决方案

工业互联网已成为全球制造业发展的新趋势。在新基建的推动下,5G、人工智能、云计算等技术与传统工业深度融合,为实现智能制造提供了技术支撑,将有力促进制造强国早日实现。 十四五规划在新基建的基础上进一步加快了制造业转型升级的步伐&…

【添砖java】谁说编程第一步是hello world

编程第一步明明是下载编译器和配置环境(小声逼逼)。 Windows下的java环境安装: java的安装包分为两类,一类是JRE(Java Runtime Environmental),是一个独立的java运行环境;一类是JDK…

《Linux运维实战:Centos7.6基于ansible一键离线部署rabbitmq3.9.16+haproxy高可用镜像模式集群》

一、部署背景 由于业务系统的特殊性,我们需要针对不同的客户环境部署 rabbitmqhaproxy高可用镜像模式集群,由于大都数用户都是专网环境,无法使用外网,为了更便捷,高效的部署,针对业务系统的特性&#xff0c…

RT-Thread移植到STM32F407

文章目录第一步:获取RT-Thread源码第二步:项目结构介绍第三步:拷贝示例代码到裸机工程第四步:删除无用文件第五步:修改工程目录结构第六步:添加工程文件路径第七步:编译第八步:修改配…