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

第十三章:持久化存储_《凤凰架构:构建可靠的大型分布式系统》

第十三章 持久化存储

一、Kubernetes存储设计核心概念

(1)存储抽象模型

  • PersistentVolume (PV):集群级别的存储资源抽象(如NFS卷/云存储盘)
  • PersistentVolumeClaim (PVC):用户对存储资源的声明请求(容量/访问模式)
  • StorageClass (SC):动态存储供给策略(自动创建PV的模板)

(2)核心设计思想

  • 解耦存储供应方与消费方
  • 支持静态分配(手动创建PV)与动态分配(按需自动创建PV)
  • 提供标准化的存储接口(CSI)
二、存储分配机制解析

(1)静态分配流程

Admin创建PV
PV进入可用状态
User创建PVC
PVC绑定匹配的PV
绑定成功后进入Bound状态

(2)动态分配流程

User创建PVC
指定StorageClass
SC触发Provisioner
自动创建对应PV
PVC与新建PV自动绑定

(3)关键差异对比

特征静态分配动态分配
资源创建方式管理员手动预置按需自动创建
适用场景固定存储资源配置弹性伸缩的云环境
管理成本高(需容量规划)低(自动化)
三、容器存储接口(CSI)架构解析

(1)传统In-Tree模式痛点

  • 存储驱动与Kubernetes核心代码强耦合
  • 新增存储系统需修改K8s代码库
  • 版本迭代受限于K8s发布周期

(2)CSI架构创新

  • 标准化接口:定义gRPC接口规范(CreateVolume/AttachVolume等)
  • 组件分离
    • Driver Registrar:注册存储驱动
    • External Provisioner:处理存储供给
    • External Attacher:处理存储挂载
  • 插件化机制:通过Sidecar容器实现热插拔

(3)核心优势

  • 解耦K8s核心代码与存储实现
  • 支持第三方厂商自定义开发
  • 无需重启集群即可升级存储驱动
四、存储技术生态全景

(1)主流存储类型支持

  • 块存储:AWSEBS/GCEPD/CephRBD
  • 文件存储:NFS/GlusterFS/AzureFile
  • 对象存储:S3/MinIO/CephObject

(2)云原生存储方案

  • Rook:基于Ceph的K8s原生存储方案
  • Longhorn:轻量级分布式块存储
  • OpenEBS:容器原生存储方案

(3)数据持久化关键策略

  • 存储拓扑感知:保证Pod与存储的地理位置亲和性
  • 多副本机制:通过存储系统实现数据冗余
  • 备份恢复:Velero等工具实现定时快照
五、重点难点解析

(1)PV访问模式深度理解

  • RWO(ReadWriteOnce):单节点读写
  • ROX(ReadOnlyMany):多节点只读
  • RWX(ReadWriteMany):多节点读写

(2)存储生命周期管理

  • Reclaim Policy
    • Retain(保留数据)
    • Delete(自动删除)
    • Recycle(废弃模式)

(3)跨可用区存储挑战

  • 区域亲和性调度(VolumeZonePredicate)
  • 分布式存储系统的区域复制能力
  • 应用级别的数据同步机制
六、最佳实践建议
  1. 生产环境存储选择
  • 优先选择云厂商托管存储服务
  • 自建集群推荐Ceph/Rook方案
  • 关键业务数据配置跨AZ复制
  1. 性能优化方向
  • 使用本地SSD存储加速IO
  • 调整文件系统参数(ext4/xfs)
  • 监控IOPS/吞吐量指标
  1. 故障排查路径
PVC处于Pending状态
检查StorageClass配置
Pod挂载失败
查看kubelet日志
数据读写异常
检查存储系统状态

本章通过Kubernetes存储模型的设计演进,揭示了云原生时代持久化存储的核心解决方案。掌握PV/PVC的动态供给机制、理解CSI的解耦设计思想、熟悉主流存储方案的特性和适用场景,是构建可靠分布式存储系统的关键所在。需要特别关注存储与计算资源的协同调度策略,以及多可用区场景下的数据一致性保障方案。


多选题


题目一:Kubernetes持久化存储设计原则
问题:以下哪些是Kubernetes持久化存储的核心设计目标?
A. 实现容器存储生命周期与Pod解耦
B. 支持跨节点数据持久化
C. 提供统一的存储抽象接口
D. 强制使用动态存储分配策略
E. 限制存储只能由集群管理员管理


题目二:存储卷类型特性
问题:关于Kubernetes存储卷的哪些描述是正确的?
A. emptyDir卷的生命周期与Pod绑定
B. hostPath卷支持跨节点数据持久化
C. NFS卷需要依赖外部存储系统
D. configMap卷只能用于配置文件读写
E. PersistentVolumeClaim是存储资源请求的抽象


题目三:静态存储分配流程
问题:静态存储分配的正确工作流程包含哪些步骤?
A. 管理员预创建PersistentVolume
B. 用户提交PersistentVolumeClaim
C. StorageClass自动生成存储配置
D. 系统自动执行PV与PVC绑定
E. 必须手动指定PV和PVC的匹配关系


题目四:动态存储分配机制
问题:关于动态存储分配的正确描述是?
A. 依赖StorageClass定义供应策略
B. PVC创建会触发PV自动生成
C. 需要预先创建物理存储设备
D. 仅支持云平台提供的存储服务
E. 支持按需扩展存储容量


题目五:FlexVolume与CSI对比
问题:以下哪些是CSI相比FlexVolume的优势?
A. 支持容器标准化存储接口
B. 解耦存储驱动与Kubernetes核心代码
C. 强制使用特定编程语言开发插件
D. 提供更细粒度的存储操作API
E. 必须通过DaemonSet部署驱动程序


题目六:In-Tree插件问题
问题:In-Tree存储插件的局限性包括?
A. 与Kubernetes版本强耦合
B. 无法支持第三方存储系统
C. 部署需要重新编译kubelet
D. 难以实现存储功能快速迭代
E. 缺乏权限隔离机制


题目七:持久化存储最佳实践
问题:构建可靠持久化存储的建议包括?
A. 优先使用动态存储分配
B. 为不同业务设置StorageClass
C. 所有Pod直接绑定PV
D. 定期执行存储卷快照
E. 强制使用ReadWriteOnce访问模式


题目八:CSI架构组件
问题:CSI架构的核心组件包含?
A. Controller Plugin
B. Node Plugin
C. Volume Snapshotter
D. StorageClass Controller
E. API Server Extension


题目九:存储扩展模式
问题:Out-of-Tree存储插件的实现方式包括?
A. 通过CRD自定义存储资源
B. 使用FlexVolume驱动程序
C. 集成CSI兼容插件
D. 修改kubelet源代码
E. 依赖Kubernetes内置存储类


题目十:持久化存储风险
问题:使用持久化存储时需要注意哪些风险?
A. 存储性能受网络延迟影响
B. 多节点同时写入导致数据冲突
C. 存储配额耗尽引发系统故障
D. PV与PVC生命周期强绑定
E. 容器重启导致存储数据丢失


答案与解析

题目一答案:ABC
解析
A. 正确,PV生命周期独立于Pod实现解耦
B. 正确,持久化存储的核心目标
C. 正确,通过PV/PVC提供统一接口
D. 错误,支持静态/动态多种分配策略
E. 错误,用户可通过PVC自主申请存储


题目二答案:ACE
解析
A. 正确,emptyDir随Pod销毁
B. 错误,hostPath无法跨节点
C. 正确,NFS属于外部存储
D. 错误,configMap也可用于环境变量
E. 正确,PVC是存储请求抽象


题目三答案:ABD
解析
A. 正确,管理员预创建PV
B. 正确,用户提交PVC请求
C. 错误,静态分配不使用StorageClass
D. 正确,系统自动绑定匹配PV/PVC
E. 错误,可通过storageClassName自动匹配


题目四答案:ABE
解析
A. 正确,StorageClass定义供应规则
B. 正确,动态分配核心机制
C. 错误,物理设备由存储系统管理
D. 错误,支持多种存储后端
E. 正确,支持存储卷扩展功能


题目五答案:ABD
解析
A. 正确,CSI是行业标准
B. 正确,独立于K8s核心代码
C. 错误,CSI支持多语言实现
D. 正确,提供更丰富的操作接口
E. 错误,CSI通过Sidecar容器部署


题目六答案:ACD
解析
A. 正确,插件与K8s版本绑定
B. 错误,可支持第三方存储
C. 正确,需重新编译核心组件
D. 正确,功能更新依赖K8s版本
E. 错误,权限机制与插件无关


题目七答案:ABD
解析
A. 正确,提高资源利用率
B. 正确,按业务区分存储策略
C. 错误,应通过PVC解耦
D. 正确,保障数据可恢复性
E. 错误,应根据场景选择访问模式


题目八答案:AB
解析
A. 正确,处理存储供应逻辑
B. 正确,负责节点级存储操作
C. 错误,属于扩展功能组件
D. 错误,属于K8s核心组件
E. 错误,通过CRD实现扩展


题目九答案:ABC
解析
A. 正确,通过CRD自定义资源
B. 正确,FlexVolume是标准接口
C. 正确,CSI是主流实现方式
D. 错误,违背Out-of-Tree原则
E. 错误,与插件实现无关


题目十答案:ABC
解析
A. 正确,网络存储存在延迟问题
B. 正确,共享存储需考虑并发控制
C. 正确,存储配额管理关键
D. 错误,PV可独立于PVC存在
E. 错误,持久化存储数据不丢失

相关文章:

第十三章:持久化存储_《凤凰架构:构建可靠的大型分布式系统》

第十三章 持久化存储 一、Kubernetes存储设计核心概念 (1)存储抽象模型 PersistentVolume (PV):集群级别的存储资源抽象(如NFS卷/云存储盘)PersistentVolumeClaim (PVC):用户对存储资源的声明请求&#…...

Chrome开发者工具实战:调试三剑客

在前端开发的世界里,Chrome开发者工具就是我们的瑞士军刀,它集成了各种强大的功能,帮助我们快速定位和解决代码中的问题。今天,就让我们一起来看看如何使用Chrome开发者工具中的“调试三剑客”:断点调试、调用栈跟踪和…...

教程:如何使用 JSON 合并脚本

目录 1. 介绍 2. 使用方法 3. 注意事项 4. 示例 5.完整代码 1. 介绍 该脚本用于将多个 COCO 格式的 JSON 标注文件合并为一个 JSON 文件。COCO 格式常用于目标检测和图像分割任务,包含以下三个主要部分: "images":图像信息&a…...

C++/Qt 模拟sensornetwork的工作

C/Qt 可视化模拟sensornetwork的工作 C/Qt 模拟sensornetwork的工作 C/Qt 可视化模拟sensornetwork的工作内容简介(一) 需求和规格说明(1)问题描述(2)设计目的(3)基本要求&#xff0…...

ffmpeg音频分析

对一个16k 单声道音频,生成频谱图 ./ffmpeg -i input.wav -lavfi "showspectrumpics800x400:modecombined:scalelin:gain1.5" spectrum.png...

【多线程】CAS机制

目录 一. CAS的概念 二. CAS的原理 三.标准库中的CAS 四. CAS的应用 (1)原子类的使用 (2) 自旋锁的实现 五. CAS的ABA问题 一. CAS的概念 CAS(Compare And Swap)机制是一种无锁的并发控制技术&#…...

音视频(四)android编译

前言 前面已经讲了在windows上应用了,这章主要讲述android上编译 1:环境 git 如果失败 直接跑到相应网站 手动下载 ubuntu22.* android ndk r21e download:https://developer.android.google.cn/ndk/downloads/index.html?hluk 为什么用这个&#xff0…...

Chapter07_图像压缩编码

文章目录 图像压缩编码图像压缩编码基础图像压缩的基本概念信息相关信息冗余信源编码及其分类 图像编码模型信源编码器模型信源解码器模型 数字图像的信息熵信源符号码字平均长度信息熵信息量 变长编码费诺码霍夫曼编码 位平面编码格雷码 图像压缩编码 数字图像的压缩是指在满…...

团体设计程序天梯赛L2-025 # 分而治之

文章目录 题目解读输入格式输出格式 思路Ac Code参考 题目解读 在战争中,我们希望首先攻下敌方的部分城市,使其剩余的城市变成孤立无援,然后再分头各个击破。为此参谋部提供了若干打击方案。本题就请你编写程序,判断每个方案的可…...

Linux网络套接字

Socket 编程 UDP 本章将函数介绍和代码编写实战一起使用。 IPv4 的 socket 网络编程,sockaddr_in 中的成员 struct in_addr.sin_addr 表示 32 位 的 IP 地址 但是我们通常用点分十进制的字符串表示 IP 地址,以下函数可以在字符串表示和in_addr 表示之间转换; 字符串转 in_addr…...

看爬山虎学本领 软爬机器人来创新 各种场景能适应

*本文只做阅读笔记分享* 一、灵感来源:向植物取经 大家好!今天来聊一款超酷的软爬机器人,它的灵感来自会攀爬的植物——爬山虎。 大家都知道,爬墙高手爬山虎能在各种复杂墙面轻松生长攀爬,可现有的攀爬机器人在复杂…...

1-Docker安装

1.准备环境 1.第一步:创建以自己的姓名全拼的用户名 [roothadoop ~]# useradd qiwenyong [roothadoop ~]# passwd qiwenyong Changing password for user qiwenyong. New password: BAD PASSWORD: The password is shorter than 7 characters Retype new passwor…...

WPS JS宏编程教程(从基础到进阶)-- 第三部分:JS宏编程语言开发基础

第三部分:JS宏编程语言开发基础 @[TOC](第三部分:JS宏编程语言开发基础)**第三部分:JS宏编程语言开发基础**1. 变量与数据类型**变量声明:三种方式****示例代码****数据类型判断****实战:动态处理单元格类型**2. 运算符全解析**算术运算符****易错点:字符串拼接 vs 数值相…...

BT-Basic函数之首字母T

BT-Basic函数之首字母T 文章目录 BT-Basic函数之首字母Ttabtesttest conttest monitortest on boardstest scanworkstest shortstesthead cleanuptesthead configurationtesthead istesthead power on/offtesthead statustestjet print level istestordertestplan generationth…...

经典算法 约数之和

原题目链接 问题描述 假设现在有两个自然数 A 和 B,设 S 为 A^B 的所有约数之和。 请你计算:S mod 9901 的值。 输入格式 在一行中输入两个用空格隔开的整数 A 和 B。 输出格式 输出一个整数,表示 S mod 9901 的值。 数据范围 0 ≤ A, …...

Flinksql--订单宽表

参考: https://chbxw.blog.csdn.net/article/details/115078261 (datastream 实现) 一、ODS 模拟订单表及订单明细表 CREATE TABLE orders (order_id STRING,user_id STRING,order_time TIMESTAMP(3),-- 定义事件时间及 Watermark(允许5秒乱序&#x…...

C# 窗体应用(.FET Framework ) 打开文件操作

一、 打开文件或文件夹加载数据 1. 定义一个列表用来接收路径 public List<string> paths new List<string>();2. 打开文件选择一个文件并将文件放入列表中 OpenFileDialog open new OpenFileDialog(); // 过滤 open.Filter "(*.jpg;*.jpge;*.bmp;*.png…...

极客天成NVFile:无缓存直击存储性能天花板,重新定义AI时代并行存储新范式

在AI算力需求呈指数级爆发的今天&#xff0c;存储系统正面临一场前所未有的范式革命。传统存储架构中复杂的缓存机制、冗余的数据路径、僵化的扩展能力&#xff0c;已成为制约千卡GPU集群算力释放的重要因素。极客天成NVFile并行文件存储系统以全栈并行化架构设计和无缓存直通数…...

Java实现N皇后问题的双路径探索:递归回溯与迭代回溯算法详解

N皇后问题要求在NN的棋盘上放置N个皇后&#xff0c;使得她们无法互相攻击。本文提供递归和循环迭代两种解法&#xff0c;并通过图示解释核心逻辑。 一、算法核心思想 使用回溯法逐行放置皇后&#xff0c;通过冲突检测保证每行、每列、对角线上只有一个皇后。发现无效路径时回退…...

【代码艺廊】pyside6桌面应用范例:homemade-toolset

在研发测试日常工作中&#xff0c;通常会遇到很多琐碎的事情&#xff0c;占用我们工作的时间和精力&#xff0c;从而导致我们不能把大部分的注意力放在主要的工作上面。为了解决这个问题&#xff0c;除了加人之外&#xff0c;我们通常会开发一些日常用的效率工具&#xff0c;比…...

LeetCode 3047 求交集区域内的最大正方形面积

探寻矩形交集中的最大正方形面积 在算法与数据结构的探索之路上&#xff0c;二维平面几何问题一直占据着独特的地位&#xff0c;它们不仅考验我们的空间思维能力&#xff0c;还要求我们能够巧妙地运用算法逻辑。今天&#xff0c;我们将深入剖析一道极具代表性的二维平面几何算…...

谷歌开源单个 GPU 可运行的Gemma 3 模型,27B 超越 671B 参数的 DeepSeek

自从 DeepSeek 把训练成本打下来之后&#xff0c;各个模型厂家现在不再堆参数进行模型的能力对比。而是转向了训练成本优化方面&#xff0c;且还要保证模型能力不减反增的效果。包括使用较少的模型参数&#xff0c;降低 GPU 使用数量&#xff0c;降低模型内存占用等等技术手段。…...

C++_类和对象(下)

【本节目标】 再谈构造函数Static成员友元内部类匿名对象拷贝对象时的一些编译器优化再次理解封装 1. 再谈构造函数 1.1 构造函数体赋值 在创建对象时&#xff0c;编译器通过调用构造函数&#xff0c;给对象中各个成员变量一个合适的初始值。 class Date { public:Date(in…...

《Java实战:素数检测算法优化全解析——从暴力枚举到筛法进阶》

文章目录 摘要一、需求分析二、基础实现代码与问题原始代码&#xff08;暴力枚举法&#xff09;问题分析 三、优化版代码与解析优化1&#xff1a;平方根范围剪枝优化2&#xff1a;偶数快速跳过完整优化代码 四、性能对比五、高阶优化&#xff1a;埃拉托斯特尼筛法算法思想代码实…...

基于Python+Flask的服装零售商城APP方案,用到了DeepSeek AI、个性化推荐和AR虚拟试衣功能

首先创建项目结构&#xff1a; fashion_store/ ├── backend/ │ ├── app/ │ │ ├── __init__.py │ │ ├── models/ │ │ ├── routes/ │ │ ├── services/ │ │ └── utils/ │ ├── config.py │ ├── requirements.t…...

二,<FastApi>FastApi的两个核心组件

FastAPI的两个核心组件Pydantic和Starlette。 Starlette 负责Web部分(Asyncio),Starlette Starlette是一个轻量级的ASGI框架/工具包&#xff0c;非常适合在Python构建异步Web服务。 它已经准备好生产&#xff0c;并为您提供以下内容&#xff1a; 轻巧的低复杂性HTTP Web框架。W…...

Docker设置代理

目录 前言创建代理文件重载守护进程并重启Docker检查代理验证 前言 拉取flowable/flowable-ui失败&#xff0c;用DaoCloud源也没拉下来&#xff0c;不知道是不是没同步。索性想用代理拉镜像。在此记录一下。 创建代理文件 创建docker代理配置 sudo mkdir -p /etc/systemd/s…...

一键自动备份:数据安全的双重保障

随着数字化时代的到来&#xff0c;数据已成为企业和个人不可或缺的核心资产。在享受数据带来的便捷与高效的同时&#xff0c;数据丢失的风险也随之增加。因此&#xff0c;备份文件的重要性不言而喻。本文将深入探讨备份文件的重要性&#xff0c;并介绍两种实用的自动备份方法&a…...

HeidiSQL:多数据库管理工具

HeidiSQL 是一款广受欢迎的免费开源数据库管理工具&#xff0c;专为数据库管理员及开发者设计。无论您是刚接触数据库领域的新手&#xff0c;还是需要同时处理多种数据库系统的专业开发者&#xff0c;该工具都能凭借其直观的界面和强大的功能&#xff0c;助您轻松完成数据管理任…...

医药档案区块链系统

1. 医生用户模块​​ ​​目标用户​​&#xff1a;医护人员 ​​核心功能​​&#xff1a; ​​检索档案​​&#xff1a;通过关键词或筛选条件快速定位患者健康档案。​​请求授权​​&#xff1a;向个人用户发起档案访问权限申请&#xff0c;需经对方确认。​​查看档案​…...