架构13-持久化存储

零、文章目录

架构13-持久化存储

1、Kubernetes 存储设计

(1)存储设计考量
  • **设计哲学:**Kubernetes 遵循用户通过资源和声明式 API 描述意图,Kubernetes 根据意图完成具体操作。
  • **复杂性:**描述用户的存储意图本身并不容易,Kubernetes 的存储资源较为复杂和繁琐。
  • **兼容性:**为了兼容多种存储技术,Kubernetes 预置了大量 In-Tree 插件,并支持 Out-of-Tree 插件(如 FlexVolume 和 CSI)。
  • **工业级需求:**Kubernetes 是一个面向生产的容器编排系统,因此在新功能的实现上需要保持向后兼容,避免影响现有生产环境。
(2)存储相关概念
  • Mount 和 Volume
    • **Mount:**将外部存储挂载到系统中。
    • **Volume:**物理存储的逻辑抽象,提供有弹性的分割方式。
  • Docker 的挂载类型
    • **Bind:**将宿主机目录挂载到容器中。
    • **Volume:**Docker 管理的存储资源。
    • **tmpfs:**内存中的临时存储,不适用于持久化存储。
  • Kubernetes 存储类型
    • **普通 Volume:**生命周期与 Pod 相同,不支持持久化存储。
    • **PersistentVolume (PV):**独立于 Pod 存在,支持持久化存储。
    • **PersistentVolumeClaim (PVC):**用户对存储的请求,与 PV 进行动态绑定。
(3)存储分配机制
  • Static Provisioning
    • **手动分配:**管理员预先分配 PV,用户通过 PVC 申请。
    • **优点:**简单直观。
    • **缺点:**难以自动化,不适合大规模集群。
  • Dynamic Provisioning
    • **自动分配:**通过 StorageClass 和 Provisioner 自动创建 PV。
    • **优点:**自动化能力强,灵活度高。
    • **缺点:**配置复杂,需要更多管理。
  • **设计挑战:**平衡复杂性和兼容性,满足不同规模和需求的用户。
  • **未来趋势:**Dynamic Provisioning 逐步替代 Static Provisioning,提高自动化和灵活性。
(4)存储回收策略
  • **Retain:**保留数据,需要手动清理。
  • **Recycle:**自动删除数据(已废弃)。
  • **Delete:**自动删除存储资源。

2、Kubernetes 存储扩展架构

(1)存储设备的接入与移除
  • **Provision(准备存储):**类似购买新的存储设备,确定存储的来源、容量、性能等。
  • **Attach(附加存储):**将存储设备连接到系统,但尚未启用。
  • **Mount(挂载存储):**将存储设备挂载到系统指定位置,使其可以被应用访问。
  • **Unmount(卸载存储):**将存储设备从系统中卸载。
  • **Detach(分离存储):**将存储设备从系统中分离。
  • **Delete(移除存储):**删除存储设备。
(2)存储控制器与管理器
  • PV 控制器(PersistentVolume Controller):
    • **期望状态:**所有未绑定的 PersistentVolume 都处于可用状态;所有处于等待状态的 PersistentVolumeClaim 都能配对到与之绑定的 PersistentVolume。
    • **核心逻辑:**ClaimWorker 和 VolumeWorker 分别跟踪两种期望状态。
    • **职责:**实现 PersistentVolume 和 PersistentVolumeClaim 的生命周期管理,调用存储驱动插件的 Provision/Delete 操作。
  • AD 控制器(Attach/Detach Controller):
    • **期望状态:**所有被调度到准备新创建 Pod 的节点都附加好要使用的存储;当 Pod 被销毁后,原本运行 Pod 的节点都分离了不再被使用的存储。
    • **职责:**调用存储驱动插件的 Attach/Detach 操作。
  • Volume 管理器(Volume Manager):
    • **职责:**支持本节点中 Volume 执行 Attach/Detach/Mount/Unmount 操作。
    • **历史原因:**最初 Attach/Detach 由 kubelet 完成,现在默认由 AD 控制器完成,但可以通过 --enable-controller-attach-detach 参数切换。
(3)存储扩展机制
  • FlexVolume:
    • 特点:
      • 早期版本(1.2 版开始提供,1.8 版达到 GA 状态)。
      • 私有的存储扩展机制,已经冻结,不再发展新功能。
    • 优势:
      • 简单易用。
    • 不足:
      • 不支持 Dynamic Provisioning。
      • 部署维护繁琐。
      • 实现复杂交互相对繁琐。
  • CSI(Container Storage Interface):
    • 特点:
      • 从 1.9 版本开始加入,1.13 版本达到 GA 状态。
      • 公开的技术规范,适用于任何容器运行时和容器编排引擎。
    • 优势:
      • 功能完善,支持 Dynamic Provisioning。
      • 易于安装和维护。
      • 通过 gRPC 协议传递参数,更加严谨和可靠。
    • 组件:
      • **CSI Identity 接口:**描述插件基本信息,检查插件健康状态。
      • **CSI Controller 接口:**管理存储资源,如 Provision、Delete、Attach、Detach、快照等。
      • **CSI Node 接口:**操作集群节点上的存储资源,如分区、格式化、挂载、卸载等。
(4)In-Tree 到 Out-of-Tree 的迁移
  • 背景:
    • In-Tree 存储驱动内置在 Kubernetes 中,导致灵活性和安全性问题。
    • 从 1.14 版本开始,启动 In-Tree 存储驱动的 CSI 外置迁移工作。
    • 计划在 1.21 到 1.22 版本(2021 年中期)完成主要存储驱动的迁移。
  • 兼容性设计:
    • **CSIMigration:**Out-of-Tree 驱动自动伪装成 In-Tree 接口,确保旧功能的兼容性。

3、容器存储生态系统

  • 随着 Kubernetes 的 CSI (Container Storage Interface) 规范成为容器业界统一的存储接入标准,各大云计算厂商纷纷支持自家的容器通过 CSI 规范接入外部存储。这一标准化使得容器存储生态逐渐成熟,存储插件种类繁多,涵盖了多种存储类型。
(1)主要存储类型及其特点
  • 块存储
    • **定义:**数据存储在固定长度的块中,通过特定协议(如 SCSI、SATA、SAS、FCP、FCoE、iSCSI)进行读写访问。
    • 特点:
      • 性能优秀(高吞吐量、低延迟)
      • 接近底层硬件,无文件、目录等额外开销
      • 排他性:一次只能被一个客户端挂载
    • **应用场景:**适合高性能应用,如大型数据库(Oracle)等
    • **示例:**Amazon Elastic Block Store (EBS)
  • 文件存储
    • **定义:**数据存储在长度不固定的文件中,提供文件操作接口(如新增、写入、追加、移动、复制、删除、重命名等)。
    • 特点:
      • 提供文件查找、目录管理、权限控制等高级功能
      • 使用 POSIX 接口,成为事实标准
      • 基于块存储实现,更易管理和使用
      • 性能略逊于块存储,但支持多客户端共享
    • **应用场景:**适合需要文件共享和管理的场景,如容器工作负载
    • **示例:**Amazon Elastic File System (EFS)
  • 对象存储
    • **定义:**数据存储在对象中,每个对象包含元数据和逻辑数据块,通过全局唯一标识进行访问。
    • 特点:
      • 扁平化结构,易于共享和扩展
      • 支持高吞吐量,但延迟较高
      • 适合存储非结构化数据,如图片、音视频等
    • **应用场景:**适合 CDN、静态资源存储等
    • **示例:**Amazon Simple Storage Service (S3)
(2)选择合适的存储类型
  • **块存储:**适合需要高性能、低延迟的应用,如大型数据库。
  • **文件存储:**适合需要文件共享和管理的场景,如容器工作负载。
  • **对象存储:**适合存储非结构化数据,如图片、音视频等,适合 CDN 和静态资源存储。
(3)亚马逊存储产品对比
  • Amazon EBS:
    • **类型:**块存储
    • **特点:**高性能、低延迟,但不支持多客户端共享
    • **适用场景:**系统引导卷、高性能应用
  • Amazon EFS:
    • **类型:**文件存储
    • **特点:**支持多客户端共享,动态弹性,性能较高
    • **适用场景:**容器工作负载、文件共享
  • Amazon S3:
    • **类型:**对象存储
    • **特点:**简单易用,成本低,适合非结构化数据存储
    • **适用场景:**备份、归档、静态页面托管、多媒体分发

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

可视化建模以及UML期末复习----做题篇

一、单项选择题。(20小题,每小题2分,共40分) 1、UML图不包括( ) A、用例图 B、状态机图 C、流程图 D、类图 E、通信图 答案:C、流程图 UML中不包括传统意义上的流程图,流程图通常是指B…

idea_maven详解

秒懂Maven maven简介maven安装和配置maven本地配置maven工程的GAVP创建maven工程项目结构说明项目构建说明 Maven依赖管理核心信息配置依赖管理配置依赖信息查询依赖范围设置依赖属性配置依赖下载失败错误解决Build构建配置依赖传递依赖冲突 maven工程继承继承作用应用场景继承…

vue3+vite纯前端实现自动触发浏览器刷新更新版本内容,并在打包时生成版本号文件

前言 在前端项目中,有时候为了实现自动触发浏览器刷新并更新版本内容,可以采取一系列巧妙的措施。我的项目中是需要在打包时候生成一个version.js文件,用当前打包时间作为版本的唯一标识,然后打包发版 ,从实现对版本更…

鸿蒙实现应用通知

目录: 1、应用通知的表现形式2、应用通知消息的实现1、发布普通文本类型通知2、发布进度类型通知3、更新通知4、移除通知 3、设置通知道通展示不同形式通知4、设置通知组5、为通知添加行为意图1、导入模块2、创建WantAgentInfo信息3、创建WantAgent对象4、构造Notif…

2024 年 MySQL 8.0.40 安装配置、Workbench汉化教程最简易(保姆级)

首先到官网上下载安装包:http://www.mysql.com 点击下载,拉到最下面,点击社区版下载 windows用户点击下面适用于windows的安装程序 点击下载,网络条件好可以点第一个,怕下着下着断了点第二个离线下载 双击下载好的安装…

【RabbitMQ】RabbitMQ中核心概念交换机(Exchange)、队列(Queue)和路由键(Routing Key)等详细介绍

博主介绍:✌全网粉丝21W,CSDN博客专家、Java领域优质创作者,掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域✌ 技术范围:SpringBoot、SpringCloud、Vue、SSM、HTML、Nodejs、Python、MySQL、PostgreSQL、大数据、物…

【C++笔记】AVL树的深度剖析

【C笔记】AVL树的深度剖析 🔥个人主页:大白的编程日记 🔥专栏:C笔记 文章目录 【C笔记】AVL树的深度剖析前言一. AVL树的概念二.AVL树的实现2.1 AVL树的结构2.2 AVL树的插入2.3 平衡因子更新 三.旋转3.1旋转的原则3.2右单旋3.3左…

Ubuntu 环境安装 之 RabbitMQ 快速入手

Hi~!这里是奋斗的明志,很荣幸您能阅读我的文章,诚请评论指点,欢迎欢迎 ~~ 🌱🌱个人主页:奋斗的明志 🌱🌱所属专栏:RabbitMQ 📚本系列文章为个人学…

贪心算法专题(四)

目录 1. 单调递增的数字 1.1 算法原理 1.2 算法代码 2. 坏了的计算器 2.1 算法原理 2.2 算法代码 3. 合并区间 3.1 算法原理 3.2 算法代码 4. 无重叠区间 4.1 算法原理 4.2 算法代码 5. 用最少数量的箭引爆气球 5.1 算法原理 ​5.2 算法代码 1. 单调递增的数字…

IAR环境下的FlashLoader设计

目录 1.为什么要Flash Loader 2.Flash Loader设计细节 2.1 简单的代码框架 2.2 迷人的宏使用 2.3 关键的配置文件 3.dmac和mac文件 4.小结 搞国产车规芯片,IAR是必不可少的编译调试集成工具,历史背景不赘述,今天主要聊聊基于IAR的Fla…

一些硬件知识【2024/12/6】

MP6924A: 正点原子加热台拆解: PMOS 相比 NMOS 的缺点: 缺点描述迁移率低PMOS 中的空穴迁移率约为电子迁移率的 1/3 到 1/2,导致导通电流较低。开关速度慢由于迁移率较低,PMOS 的开关速度比 NMOS 慢,不适合高速数字电…

在本地运行大语言模型

1,打开下面网站下载,软件 lm studio 2, 设置模型下载路径 3,没有魔法条件的人,去镜像网站下载模型的镜像文件 、 4,

【单片机】ESP32-S3+多TMC2209控制步进电机系列3 使用TMC2209库实现UART通讯

目录 1.下载TMC2209.h库2.代码部分3.效果展示 1.下载TMC2209.h库 在Arudino环境中,有两个不错的库可以驱动TMC2209。 TMC2209库TMCStepper库 TMC2209库只针对TMC2209驱动器,而TMCStepper库除了能够支持TMC2209驱动器,还能够支持其他TMC的驱…

【服务器部署应用由http协议切换为https】

文章目录 服务器部署应用由http协议切换为https1. 下载openssl及其配置1.1 下载1.2 无脑下一步即可1.3 环境变量配置1.4 验证配置以及生成证书证书路径 2. nginx配置修改 服务器部署应用由http协议切换为https 1. 下载openssl及其配置 1.1 下载 openssl下载地址 根据系统选择…

Linux——管理用户和用户组

一、用户有哪些 root用户 定义:root用户是Linux系统中的最高权限用户,具有对系统所有资源的完全控制权。特性:root用户可以执行系统中的任何操作,包括修改系统配置文件、安装软件、管理系统服务等。由于其拥有最高权限&#xff0c…

synchronized的特性

1.互斥 对于synchronized修饰的方法及代码块不同线程想同时进行访问就会互斥。 就比如synchronized修饰代码块时,一个线程进入该代码块就会进行“加锁”。 退出代码块时会进行“解锁”。 当其他线程想要访问被加锁的代码块时,就会阻塞等待。 阻塞等待…

如何在树莓派上安装Arduino IDE

git clone https://github.com/JetsonHacksNano/installArduinoIDE.git cd installArduinoIDE ./installArduinoIDE.sh sudo reboot sudo shutdown -h now

【JAVA项目】基于ssm的【汽车在线销售系统】

【JAVA项目】基于ssm的【汽车在线销售系统】 技术简介:采用JSP技术、B/S架构、SSM框架、MySQL技术等实现。 系统简介:首页汽车在线销售系统模块如下:首页、汽车信息、新闻资讯、留言反馈、我的收藏管理等功能。管理员输入个人的账号、密码登录…

【代码随想录】刷题记录(66)-修剪二叉搜索树

题目描述: 给你二叉搜索树的根节点 root ,同时给定最小边界low 和最大边界 high。通过修剪二叉搜索树,使得所有节点的值在[low, high]中。修剪树 不应该 改变保留在树中的元素的相对结构 (即,如果没有被移除,原有的父…

《蓝桥杯比赛规划》

大家好啊!我是NiJiMingCheng 我的博客:NiJiMingCheng 这节课我们来分享蓝桥杯比赛规划,好的规划会给我们的学习带来良好的收益,废话少说接下来就让我们进入学习规划吧,加油哦!!! 一、…