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

k8s pv(PersistentVolume) 状态含义

一、PV 状态含义

在Kubernetes中,PersistentVolume(PV)有几种不同的状态,这些状态反映了PV的生命周期和可用性。以下是主要的PV状态及其含义:

  • Available: 表示该PV尚未被任何PersistentVolumeClaim (PVC)绑定,且可供使用。Kubernetes的存储类机制可能会自动将具有此状态的PV绑定到合适的PVC上,尤其是当PVC请求与PV的存储类相匹配时。

  • Bound: 当PV被成功绑定到一个PVC上时,其状态变为Bound。这意味着PV现在专属于那个PVC,直到PVC被删除或释放。绑定后,Pod可以通过PVC访问PV提供的存储。

  • Released: 当与PV绑定的PVC被删除,但PV的回收策略(Reclaim Policy)设置为Retain时,PV会进入Released状态。此时,PV虽然不再被任何PVC引用,但其上的数据会被保留,等待手动回收或重新绑定

  • Failed: 如果在PV的生命周期中发生了某些错误,如自动绑定失败等,PV可能会进入Failed状态。

  • Pending: 在某些情况下,如PV正等待与其他系统资源(如存储插件)的交互完成,或者等待满足特定条件(如标签选择器匹配),PV可能会处于Pending状态。这表明PV当前还不能被使用。

  • Terminating: 当PV的回收策略设置为Delete,并且开始执行删除流程时,PV会进入Terminating状态。这表示PV正在被Kubernetes系统清理,但尚未完全删除。

二、存储类 StorageClass(sc)

在Kubernetes中,存储类(StorageClass) 是一个核心概念,用于描述存储的类型、特性和动态供应策略。它是Kubernetes存储资源模型的一个重要组成部分,旨在提供存储资源的自动化和灵活管理,特别是在有状态应用的部署中。

2.1、存储类种类

通用型(General Purpose): 这是最基础的存储类型,适用于大部分工作负载,平衡了成本和性能。例如,EBS(Amazon Web Services的 Elastic Block Store)中的gp2就常被用作通用存储类。

高性能(High Performance): 专为需要快速读写速度和低延迟的应用设计,通常基于SSD等高性能介质。AWS EBS的io1或者GCP的pd-ssd就是高性能存储类的例子。

低成本(Low Cost): 侧重于成本效益,可能牺牲一定的性能,适合对I/O要求不高的应用场景。例如,使用旋转硬盘(HDD)的存储类,如AWS EBS的sc1或GCP的pd-standard

本地存储(Local Storage): 利用节点上的直接附加存储(如NVMe SSD或HDD),提供高性能和低延迟,但不提供跨节点的持久性。Kubernetes中有如local-storage这样的存储类示例。

只读(ReadOnly): 特殊用途的存储类,用于挂载只读数据,如镜像或者不可更改的参考数据。这可能涉及到特定的存储后端配置,以确保数据不可写。

加密存储(Encrypted): 提供加密功能的存储类,确保数据在静止状态下也是安全的。大多数云提供商支持配置加密的存储类。

2.2、 动态卷供应器

Kubernetes的动态卷供应器(Dynamic Volume Provisioner)是一个核心功能,它允许**自动创建和管理PersistentVolumes(PV)**以响应PersistentVolumeClaims(PVC)的需求。这简化了存储资源的管理和配置,特别是在有状态应用的部署场景下,无需手动创建和管理PV。动态供应器根据存储类(StorageClass)的定义,与云提供商或其他存储后端集成,按需供应存储资源。

动态卷供应器的工作原理

  • 用户请求: 用户通过创建PVC来请求存储资源,PVC中可以指定所需存储类的名称。

  • 存储类匹配: Kubernetes检查PVC中指定的存储类,寻找与之匹配的存储类配置。

  • 动态供应: 一旦找到匹配的存储类,且该类配置为动态供应,Kubernetes就会调用相应的动态供应器插件。

  • 资源创建: 动态供应器插件根据存储类的参数和限制,向底层存储系统(如云存储服务、本地磁盘阵列等)发出请求,创建相应的存储资源。

  • PV注册: 创建完成后,动态供应器会在Kubernetes集群中注册一个新的PV,并将其绑定到原始的PVC上,完成存储资源的供应过程。

常见动态卷供应器
AWS EBS: 为Amazon Web Services的Elastic Block Store(EBS)提供动态供应支持,可以按需创建GP2、IO1、ST1、SC1等不同类型的EBS卷。

Google Persistent Disk (GPD): 与Google Cloud Platform的Persistent Disk集成,支持多种磁盘类型,如SSD(pd-ssd)、标准硬盘(pd-standard)等。

Azure Disk: 针对Microsoft Azure的托管磁盘服务,允许动态创建Premium SSD、Standard SSD和Standard HDD等磁盘。

OpenStack Cinder: 为OpenStack环境中的Cinder块存储提供动态供应能力。

Local Volume Provisioner: 支持在Kubernetes节点上的本地磁盘上动态供应存储,适用于需要高性能或成本效益的场景,但不提供跨节点的高可用性。

Rook: Rook是一个开源存储编排平台,特别为Ceph分布式存储系统设计了动态供应器,允许在Kubernetes中无缝集成和管理Ceph存储。

Longhorn: 一个轻量级、云原生的分布式块存储解决方案,提供了Kubernetes的动态卷供应能力。

配置示例:

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:name: nfs-storage
provisioner: k8s-sigs.io/nfs-subdir-external-provisioner
parameters:archiveOnDelete: "false"

三、pv 回收策略

在Kubernetes(k8s)中,PersistentVolume (PV)回收策略定义了当与之关联的 PersistentVolumeClaim (PVC) 被删除时,PV 应该如何处理。回收策略是存储类(StorageClass)定义中的一个关键属性,影响着存储资源的生命周期管理。Kubernetes支持三种基本的PV回收策略:

1. Retain(保留)

  • 描述:当PVC被删除时,PV的回收策略为Retain,则PV不会被Kubernetes自动回收或删除。其状态会变为Released,意味着PV不再被任何PVC绑定,但仍然存在于集群中,并且保留其上的数据。
  • 使用场景:适合于那些希望手动管理PV生命周期和数据的场景,或者计划将来重新使用相同PV的情况。

2. Recycle(回收)【已废弃】

  • 描述:该策略曾经用于清理PV上的数据以便重用,但在Kubernetes v1.7之后已被废弃,不再推荐使用,因为它不安全且功能有限,无法处理非空目录或特定于卷插件的数据。
  • 注意:尽管仍可能在一些较旧的文档或遗留集群中见到,但现代实践中不应使用Recycle策略。

3. Delete(删除)

  • 描述:当PVC被删除,且PV的回收策略设置为Delete时,Kubernetes会自动删除对应的PV。如果PV是动态供应的(即通过动态卷供应器创建的),这通常意味着底层的存储资源也会被云提供商或存储系统清理。
  • 使用场景:适用于大多数动态供应的存储场景,特别是当不需要保留数据,或数据有其他备份方案时。这是最常用的回收策略,因为它简化了资源管理,避免了资源泄漏。

配置回收策略

回收策略通常在创建StorageClass时指定,并通过.spec.reclaimPolicy字段设置。例如,创建一个回收策略为Delete的StorageClass的YAML片段如下:

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:name: fast
provisioner: kubernetes.io/aws-ebs
parameters:type: gp2
reclaimPolicy: Delete

四、直接附加存储(Direct Attached Storage, DAS)

Linux下的直接附加存储(Direct Attached Storage, DAS)是一种传统的存储架构,其中存储设备(如硬盘驱动器、固态硬盘)直接连接到单一的计算机或服务器上,而不是通过网络共享。这种存储方式在Linux系统中广泛应用于各种场景,从个人电脑到企业级服务器均有应用。DAS的特点和组件包括:

特点

  1. 性能:由于数据直接在服务器内部或通过高速接口(如SATA、SAS、PCIe NVMe)传输,DAS往往能提供较低的延迟和较高的吞吐量,适合I/O密集型应用。

  2. 成本:相较于网络存储解决方案(如NAS或SAN),DAS的初始成本可能更低,因为不需要复杂的网络存储硬件和软件。

  3. 简易性:配置和管理相对简单,通常只需要操作系统层面的设置,无需复杂的网络存储配置。

  4. 扩展性限制:DAS直接与单个主机相连,因此扩展存储容量或共享存储资源较为困难,限制了其在大规模或高可用性环境中的应用。

组件

  • 硬盘驱动器:传统机械硬盘(HDD)或固态硬盘(SSD)是最基本的存储媒介。
  • 控制器:如SATA、SAS控制器或主板集成的控制器,管理硬盘与系统的通信。
  • 接口:如SATA、SAS、USB、Thunderbolt、PCIe等,用于物理连接存储设备。
  • RAID控制器(可选):用于配置硬盘为RAID阵列,提高数据冗余或性能。
  • Linux内核存储子系统:管理存储设备的识别、配置和访问,如使用/dev/sd*/dev/nvme*等设备文件。

应用场景

  • 个人电脑和工作站:直接使用内置硬盘或通过USB、Thunderbolt外接硬盘。
  • 小型服务器:作为操作系统或应用程序的存储,特别是在不需要共享存储的场景。
  • 数据库服务器:对于一些对I/O性能要求极高的应用,直接附加高性能SSD可以提供最优性能。
  • 备份和归档:作为离线备份或长期数据存储的解决方案。

参考文档

1、https://blog.csdn.net/Tiger_lin1/article/details/132545249
2、https://www.cnblogs.com/rdchenxi/p/17113820.html
3、https://www.cnblogs.com/bitepeng/p/4142676.html
4、https://cloud.tencent.com/developer/techpedia/1594
4、https://developer.aliyun.com/article/1556480

相关文章:

  • 连锁收银系统的五大功能 选择开源收银系统三要素
  • 【机器学习(十二)】机器学习回归案例之二手汽车价格预测—XGBoost回归算法—Sentosa_DSML社区版
  • 生成式人工智能在软件开发中的角色
  • SpringBoot开发——使用Hutool工具包处理日期时间详解
  • Cocos Creator 剪裁精灵图片方法记录(7)
  • C++20 std::format
  • Unity中Mesh使用MeshTopology.Lines模式绘制线条及MeshTopology.Quads模式绘制网格参考
  • C++学习笔记----8、掌握类与对象(一)---- 对象中的动态内存分配(5)
  • 1panel申请https/ssl证书自动续期
  • Kafka系列之:安装部署CMAK,CMAK管理大型Kafka集群参数调优
  • 微软Win11 22H2/23H2 九月可选更新KB5043145发布!
  • Mitsuba 渲染基础
  • 如何使用C语言接入Doris数据库
  • 【Linux服务器】git和github交互使用
  • docker pull镜像失败问题解决尝试
  • [笔记] php常见简单功能及函数
  • 《用数据讲故事》作者Cole N. Knaflic:消除一切无效的图表
  • CSS进阶篇--用CSS开启硬件加速来提高网站性能
  • Docker: 容器互访的三种方式
  • flask接收请求并推入栈
  • java 多线程基础, 我觉得还是有必要看看的
  • java正则表式的使用
  • MD5加密原理解析及OC版原理实现
  • MySQL-事务管理(基础)
  • RedisSerializer之JdkSerializationRedisSerializer分析
  • SOFAMosn配置模型
  • Three.js 再探 - 写一个跳一跳极简版游戏
  • Twitter赢在开放,三年创造奇迹
  • ucore操作系统实验笔记 - 重新理解中断
  • unity如何实现一个固定宽度的orthagraphic相机
  • 搞机器学习要哪些技能
  • 给自己的博客网站加上酷炫的初音未来音乐游戏?
  • 区块链技术特点之去中心化特性
  • 让你的分享飞起来——极光推出社会化分享组件
  • 验证码识别技术——15分钟带你突破各种复杂不定长验证码
  • media数据库操作,可以进行增删改查,实现回收站,隐私照片功能 SharedPreferences存储地址:
  • Java性能优化之JVM GC(垃圾回收机制)
  • ​sqlite3 --- SQLite 数据库 DB-API 2.0 接口模块​
  • # .NET Framework中使用命名管道进行进程间通信
  • #### golang中【堆】的使用及底层 ####
  • #微信小程序:微信小程序常见的配置传旨
  • (11)MSP430F5529 定时器B
  • (4)STL算法之比较
  • (delphi11最新学习资料) Object Pascal 学习笔记---第8章第2节(共同的基类)
  • (附源码)ssm经济信息门户网站 毕业设计 141634
  • (十)【Jmeter】线程(Threads(Users))之jp@gc - Stepping Thread Group (deprecated)
  • (十八)用JAVA编写MP3解码器——迷你播放器
  • (十三)Java springcloud B2B2C o2o多用户商城 springcloud架构 - SSO单点登录之OAuth2.0 根据token获取用户信息(4)...
  • (四)JPA - JQPL 实现增删改查
  • (学习日记)2024.04.10:UCOSIII第三十八节:事件实验
  • .NET C# 操作Neo4j图数据库
  • .net 调用海康SDK以及常见的坑解释
  • .NET 动态调用WebService + WSE + UsernameToken
  • .Net 垃圾回收机制原理(二)
  • .net 验证控件和javaScript的冲突问题