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

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


http://www.kler.cn/a/326190.html

相关文章:

  • arkUI:网格布局(Grid)
  • 近几年新笔记本重装系统方法及一些注意事项
  • 解决Ubuntu18.04及以上版本高分辨率下导致字体过小问题
  • AWTK VSCode 实时预览插件端口冲突的解决办法
  • django从入门到实战(三)——CBV视图介绍
  • 蓝牙 HFP 协议详解及 Android 实现
  • 全自动ai生成视频MoneyPrinterTurbo源码 在线ai生成视频源码
  • 【艾思科蓝】网络安全的隐秘战场:构筑数字世界的铜墙铁壁
  • 66 使用注意力机制的seq2seq_by《李沐:动手学深度学习v2》pytorch版
  • 生产者和消费者
  • WinRAR技巧:如何给多个压缩包设置同一个密码
  • 09_React 扩展
  • 网络安全:保护您的数字世界
  • 基于单片机电容测量仪仿真设计
  • 基于大数据的高校新生数据可视化分析系统
  • 华为源NAT技术与目的NAT技术
  • unity 打包安卓 RenderTexture显示红色
  • 命令回显echo
  • SpringBoot使用@Slf4j注解实现日志输出
  • uniapp数据缓存
  • golang学习笔记20-面向对象(二):方法与结构体【重要】
  • React和Vue对比
  • Oracle数据库物理结构操作管理
  • kubeadm部署k8s集群,版本1.23.6;并设置calico网络BGP模式通信,版本v3.25--未完待续
  • C++ STL(1)迭代器
  • Kafka 在 Linux 下的集群配置和安装