【Kubernetes基础--持久化存储原理】--查阅笔记5

news2025/4/19 15:39:23

目录

  • 持久化存储机制
  • PV 详解
    • PV 关键配置参数
    • PV 生命周期的各个阶段
  • PVC 详解
    • PVC 关键配置参数
    • PV 和 PVC 的生命周期
  • StorageClass 详解
    • StorageClass 关键配置参数
    • 设置默认的 StorageClass

持久化存储机制

k8s 对于有状态的容器应用或对数据需要持久化的应用,不仅需要容器内的目录挂载到宿主机的目录或者 emptyDir 临时存储卷,而且需要更加可靠的存储来保存应用产生的重要数据,以便容器应用在重建之后仍然可以使用之前的数据。

k8s 1.0 版本引入了 PersistentVolume(PV)和 PersistentVolumeClaim(PVC)两个资源对象来实现对存储的管理子系统。

PV 是底层网络共享存储的抽象,将共享存储定义为一种“资源”,类比 Node 是一种容器应用可以“消费”的资源。PVC 则是用户对存储资源的一个“申请”。就像 Pod “消费” Node的资源一样,PVC 能够“消费” PV 资源。PVC 可以申请特定的存储空间和访问模式。

通常应用程序都会对存储设备的特性和性能有不同的要求,包括读写速度、并发性能、数据冗余等更高的要求,k8s 从1.4版本开始引入了一个新的资源对象 StorageClass,用于标记存储资源的特性和性能。到1.6版本时,StorageClass 和动态资源供应的机制得到了完善,实现了存储卷的按需创建,在共享存储的自动化管理进程中实现了重要的一步。

通过 StorageClass 的定义,管理员可以将存储资源定义为某种类别(Class)​,正如存储设备对于自身的配置描述(Profile)​,例如“快速存储”​“慢速存储”​“有数据冗余”​“无数据冗余”等。用户根据 StorageClass 的描述就能够直观地得知各种存储资源的特性,就可以根据应用对存储资源的需求去申请存储资源了。

PV 详解

PV 作为存储资源,主要包括存储能力、访问模式、存储类型、回收策略、后端存储类型等信息的设置。

apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv1
spec:
  capacity:
    storage: 5Gi # 存储能力
  accessModes:  # 访问模式
    - ReadWriteOnce
  persistentVolumeReclaimPolicy: Recycle # 回收策略
  storageClassName: slow # 存储类别
  nfs:  # PV类型:网络文件系统
    path: /tmp
    server: 172.17.0.2

PV 关键配置参数

  • 存储能力(Capacity):storage=xx
  • 存储卷模式(Volume Mode):volumeMode=xxx,Filesystem(文件系统)和Block(块设备)​,默认值为Filesystem
  • 访问模式(Access Modes):1. ReadWriteOnce(RWO)​:读写权限,并且只能被单个Node挂载;2. ReadOnlyMany(ROX)​:只读权限,允许被多个Node挂载;3. ReadWriteMany(RWX)​:读写权限,允许被多个Node挂载
  • 存储类别(Class):storageClassName=xxx
  • 回收策略(Reclaim Policy):persistentVolumeReclaimPolicy=xxx
  • 挂载参数(Mount Options):在将 PV 挂载到一个 Node 上时,根据后端存储的特点,可能需要设置额外的挂载参数,可以根据 PV 定义中的 mountOptions 字段进行设置
  • 节点亲和性(Node Affinity):限制只能通过某些Node访问Volume,可以在PV定义中的nodeAffinity字段进行设置。这个参数仅用于Local存储卷。

PV 生命周期的各个阶段

  • Available:可用状态,还未与某个PVC绑定
  • Bound:已与某个PVC绑定
  • Released:绑定的PVC已经删除,资源已释放,但没有被集群回收
  • Failed:自动资源回收失败

PVC 详解

PVC 作为用户对存储资源的需求申请,主要包括存储空间请求、访问模式、PV 选择条件和存储类别等信息的设置。

kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: myclaim
spec:
  accessModes:  # 访问模式
    - ReadWriteOnce
  resources:
    requests:
      storage: 8Gi
  storageClassName: slow
  selector: # PV 条件选择
    matchLabels:
      release: "stable"
    matchExpressions:
      - {key: environment, operator: In, values: [dev]}

PVC 关键配置参数

  • 资源请求(Resources)​:描述对存储资源的请求,目前仅支持 request.storage 的设置,即存储空间大小
  • 访问模式(Access Modes)​:PVC 也可以设置访问模式,用于描述用户应用对存储资源的访问权限。其三种访问模式的设置与 PV 的设置相同
  • 存储卷模式(Volume Modes)​:PVC 也可以设置存储卷模式,用于描述希望使用的 PV 存储卷模式,包括文件系统和块设备
  • PV 选择条件(Selector)​:通过对Label Selector的设置,可使PVC对于系统中已存在的各种PV进行筛选。
  • 存储类别(Class)​: PVC 在定义时可以设定需要的后端存储的类别(通过 storageClassName 字段指定)​,以减少对后端存储特性的详细信息的依赖。只有设置了该 Class 的 PV 才能被系统选出,并与该 PVC 进行绑定。

注意,PVC 和 PV 都受限于 Namespace,PVC 在选择 PV 时受到 Namespace 的限制,只有相同 Namespace 中的 PV 才可能与 PVC 绑定。Pod 在引用 PVC 时同样受 Namespace 的限制,只有相同 Namespace 中的 PVC 才能挂载到 Pod 内。

PV 和 PVC 的生命周期

  • 资源供应:静态模式(Static,手工创建)和动态模式(Dynamic,通过StorageClass设置)​。资源供应的结果就是创建好的PV。
  • 资源绑定:根据 PVC 对存储资源的请求(存储空间和访问模式)在已存在的 PV 中选择一个,如果没有,PVC 则会无限期处于 Pending状态。PV 一旦绑定到某个 PVC 上,就会被这个 PVC 独占,不能再与其他 PVC 进行绑定了。
  • 资源使用:Pod 使用 Volume 的定义,将 PVC 挂载到容器内的某个路径进行使用。在容器应用挂载了一个 PVC 后,就能被持续独占使用。不过,多个 Pod 可以挂载同一个 PVC,应用程序需要考虑多个实例共同访问一块存储空间的问题。
  • 资源释放:删除 PVC,与该 PVC 绑定的 PV 将会被标记为“已释放”​,但还不能立刻与其他 PVC 进行绑定。通过之前 PVC 写入的数据可能还被留在存储设备上,只有在清除之后该 PV 才能再次使用。
  • 资源回收:对于 PV,管理员可以设定回收策略,用于设置与之绑定的 PVC 释放资源之后如何处理遗留数据的问题。只有 PV 的存储空间完成回收,才能供新的 PVC 绑定和使用。

StorageClass 详解

StorageClass 作为对存储资源的抽象定义,由系统自动完成 PV 的创建和绑定,实现了动态的资源供应。基于 StorageClass 的动态资源供应模式将逐步成为云平台的标准存储配置模式。

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

StorageClass 关键配置参数

  • 提供者(Provisioner):描述存储资源的提供者,也可以看作后端存储驱动。
  • 参数(Parameters):后端存储资源提供者的参数设置,不同的Provisioner包括不同的参数设置。

设置默认的 StorageClass

要在系统中设置一个默认的 StorageClass,则首先需要启用名为 DefaultStorageClass的admission controller,即在 kube-apiserver 的命令行参数 --admission-control 中增加:

--admission-control=...,DefaultStorageClass

在 StorageClass 的定义中设置一个 annotation:

kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
  name: gold
  annotations: storageclass.beta.kubernetes.io/is-default-class="true"
provisioner: kubernetes.io/gce-pd
parameters:
  type: pd-ssd

通过 kubectl create 创建,查看:

kubectl get sc
# NAME        TYPE
# gold (default)   kubernetes.io/gce-pd

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

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

相关文章

Langchain-构建向量数据库和检索器

向量数据库安装 pip install langchain-chroma 文档》向量存储》向量数据库。 和0416 提示词工程相同。 初始化 import osfrom langchain_chroma import Chroma from langchain_community.chat_message_histories import ChatMessageHistory from langchain_core.documents im…

首席人工智能官(Chief Artificial Intelligence Officer,CAIO)的详细解析

以下是**首席人工智能官(Chief Artificial Intelligence Officer,CAIO)**的详细解析: 1. 职责与核心职能 制定AI战略 制定公司AI技术的长期战略,明确AI在业务中的应用场景和优先级,推动AI与核心业务的深度…

2025华中杯数学建模B题完整分析论文(共42页)(含模型、数据、可运行代码)

2025华中杯大学生数学建模B题完整分析论文 目录 一、问题重述 二、问题分析 三、模型假设 四、 模型建立与求解 4.1问题1 4.1.1问题1解析 4.1.2问题1模型建立 4.1.3问题1样例代码(仅供参考) 4.1.4问题1求解结果(仅供参考&am…

游戏引擎学习第231天

设定当天的主题 我们现在到了一个很少出现在直播中的阶段,但今天是那种需要解释计算机科学基础概念的日子。因此,今天我们将讨论这个内容,今天的重点是“大O表示法”(Order Notation),我将用黑板来解释这些…

Linux网络编程实战:从字节序到UDP协议栈的深度解析与开发指南

网路通信的三大要素:协议,端口和IP 知识点1【字节序】 多字节在主机中的存放数据 把多字节看成一个整体存储的顺序。 为什么我们在文件中没有这个概念呢? 因为文件是字节流(流指针),流是以一个字节为操…

赋能能源 | 智慧数据,构建更高效智能的储能管理系统

行业背景 随着新能源产业的快速发展,大规模储能系统在电力调峰、调频及可再生能源消纳等领域的重要性日益凸显。 储能电站作为核心基础设施,其能量管理系统(EMS)需要处理海量实时数据,包括电池状态、功率变化、环境监…

【音视频】音视频FLV合成实战

FFmpeg合成流程 示例本程序会⽣成⼀个合成的⾳频和视频流,并将它们编码和封装输出到输出⽂件,输出格式是根据⽂件扩展名⾃动猜测的。 示例的流程图如下所示。 ffmpeg 的 Mux 主要分为 三步操作: avformat_write_header : 写⽂件…

猪行为视频数据集

猪行为数据集包含 23 天(超过 6 周)的日间猪行为视频,这些视频由近乎架空的摄像机拍摄。视频已配准颜色和深度信息。数据以每秒 6 帧的速度捕获,并以 1800 帧(5 分钟)为一批次进行存储。大多数帧显示 8 头猪。 这里可以看到颜色和深度图像的示例: 喂食器位于图片底部中…

【网络技术_域名解析DNS】一、DNS 基础剖析及其原理

一、DNS 在互联网架构中的基石地位​ 当我们在浏览器地址栏输入www.baidu.com按下回车键的瞬间,一场跨越全球的 “数字寻址游戏” 便悄然启动。DNS(Domain Name System)作为互联网的核心基础设施,承担着将人类易读的域名转换为机…

Java学习小册:Java并发容器与原子类

在Java并发编程中,并发容器和原子类是管理共享数据的重要工具。它们提供了线程安全的数据结构和原子操作,确保在多线程环境下数据的一致性和操作的正确性。本文将深入探讨Java中的并发容器和原子类,包括它们的基本概念、使用方法、关键类及其…

摄影跟拍预定|基于java+vue的摄影跟拍预定管理系统(源码+数据库+文档)

摄影跟拍预定管理系统 目录 基于SprinBootvue的摄影跟拍预定管理系统 一、前言 二、系统设计 三、系统功能设计 1系统功能模块 2管理员功能模块 3摄影师功能模块 4用户功能模块 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获…

【HFP】深入解析蓝牙 HFP 协议中呼叫转移、呼叫建立及保持呼叫状态的机制

目录 一、核心指令概述 1.1 ATCMER:呼叫状态更新的 “总开关” 1.2 ATBIA:指示器的 “精准控制器” 1.3 指令对比 1.4 指令关系图示 二、CIEV 结果码:状态传递的 “信使” 2.1 工作机制 2.2 三类核心指示器 三、状态转移流程详解 3…

Linux:显示 -bash-4.2$ 问题(CentOS 7)

文章目录 一、原因二、错误示例三、解决办法 一、原因 在 CentOS 7 系统中,如果你看到命令行提示符显示为 -bash-4.2$,一般是 Bash shell 正在运行,并且它没有找到用户的个人配置文件,或者这些文件有问题而未能成功加载。这个提示…

视频监控EasyCVR视频汇聚平台接入海康监控摄像头如何配置http监听功能?

一、方案概述 本方案主要通过EasyCVR视频管理平台,实现报警信息的高效传输与实时监控。海康监控设备能通过HTTP协议将报警信息发送至指定的目的IP或域名,而EasyCVR平台则可以接收并处理这些报警信息,同时提供丰富的监控与管理功能&#xff0…

DAY09:【pytorch】nn网络层

1、卷积层 1.1 Convolution 1.1.1 卷积操作 卷积运算:卷积核在输入信号(图像)上滑动,相应位置上进行乘加卷积核:又称为滤波器、过滤器,可认为是某种模式、某种特征 1.1.2 卷积维度 一般情况下&#xf…

跟康师傅学Java-面向对象(基础)

跟康师傅学Java-面向对象(基础) 学习面向对象内容的三条主线(非官方) ①Java类及类的成员:(重点)属性、方法、构造器;(熟悉)代码块、内部类 ②面向对象的特征:封装、继承、多态、(抽象) ③其他关键字的使用:this、super、package、import、static、final、inte…

2000-2017年各省国有经济煤气生产和供应业固定资产投资数据

2000-2017年各省国有经济煤气生产和供应业固定资产投资数据 1、时间:2000-2017年 2、来源:国家统计局、能源年鉴 3、指标:行政区划代码、城市、年份、国有经济煤气生产和供应业固定资产投资 4、范围:31省 5、指标说明&#x…

线性代数 | 知识点整理 Ref 3

注:本文为 “线性代数 | 知识点整理” 相关文章合辑。 因 csdn 篇幅合并超限分篇连载,本篇为 Ref 3。 略作重排,未整理去重。 图片清晰度限于引文原状。 如有内容异常,请看原文。 《线性代数》总复习要点、公式、重要结论与重点释…

网络层IP协议知识大梳理

全是通俗易懂的讲解,如果你本节之前的知识都掌握清楚,那就速速来看我的IP协议笔记吧~ 自己写自己的八股!让未来的自己看懂! (全文手敲,受益良多) 网路基础3 网路层 TCP并没有把数据发到网路…

【Web前端技术】第二节—HTML标签(上)

hello!好久不见—— 做出一个属于自己的网站! 云边有个稻草人-个人主页 Web前端技术—本篇文章所属专栏 目录 一、HTML 语法规范 1.1 基本语法概述 1.2 标签关系 二、HTML 基本结构标签 2.1 第一个 HTML 网页 2.2 基本结构标签总结 三、网页开发…