架构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:
    • **类型:**对象存储
    • **特点:**简单易用,成本低,适合非结构化数据存储
    • **适用场景:**备份、归档、静态页面托管、多媒体分发

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

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

相关文章

使用wol-web通过NAS远程唤醒电脑

相信很多人都有远程开机的需求,有时候需要远程控制家中的电脑办公、玩游戏。远程控制比较好实现,安装类似向日葵的软件即可。而远程开机稍微麻烦一点,有的通过物理开关实现(开机棒)我们选择远程网络唤醒的方式实现&…

TortoiseGit 图标覆盖设置

TortoiseGit 图标覆盖设置 图标覆盖设置隐藏图标覆盖切换样式 我们安装了小海龟后,它会在仓库目录下给所有图标覆盖上状态标记。 图标覆盖设置 右键菜单打开 :设置 》 图标覆盖。 隐藏图标覆盖 如果不想图标上出现小乌龟的状态标记。直接点这里可以…

Chrome浏览器调用ActiveX控件--allWebOffice控件

背景 allWebOffice控件能够实现在浏览器窗口中在线操作文档的应用(阅读、编辑、保存等),支持编辑文档时保留修改痕迹,支持书签位置内容动态填充,支持公文套红,支持文档保护控制等诸多办公功能,…

docker部署redis使用键空间通知订阅

1. redis的键空间通知(keyspace notification) 大概意思是比如时间删除 或者 过期的时候发布的一个通知。通过一个通知来发布或修改一个状态。通常理解为 pub/sub(发布/订阅)。 键空间通知有两种类型key-space , key-event, 可以理解为key-space对应事件…

(堆) 优先队列(堆)的简单实现

文章目录 🏔️堆是什么?🏔️C 标准库🏔️手动实现⛰️原理简介⛰️C⛰️C语言 ⭐END🌟交流方式 🏔️堆是什么? 堆简介 - OI Wiki 堆是一棵树,其每个节点都有一个键值,且…

springboot+Loki+Loki4j+Grafana搭建轻量级日志系统

文章目录 前言一、日志组件介绍 1.1 Loki组件1.2 Loki4j组件1.3 Grafana 二、组件下载安装运行 Loki下载安装运行Grafana下载安装运行 三、创建springboot项目总结 前言 日志在任何一个web应用中都是不可忽视的存在,它已经成为大部分系统的标准组成部分。搭建日志…

自然语言处理:从入门到精通全指引

一、引言 自然语言处理(NLP)作为人工智能领域的关键分支,旨在让计算机理解、生成和处理人类语言,近年来取得了令人瞩目的成就,在智能客服、机器翻译、文本分析、语音助手等众多领域发挥着重要作用。从入门到精通自然语…

opencvocr识别手机摄像头拍摄的指定区域文字,文字符合规则就语音报警

安装python,pycharm,自行安装。 Python下安装OpenCv 2.1 打开cmd,先安装opencv-python pip install opencv-python --user -i https://pypi.tuna.tsinghua.edu.cn/simple2.2 再安装opencv-contrib-python pip install opencv-contrib-python --user …

智能时代网络空间认知安全新观察

文章目录 前言一、历史上的四次认知革命二、人工智能革命掀起认知安全新浪潮三、人工智能技术塑造认知安全新范式四、人工智能治理应对认知安全新思考 前言 12月5日,在2024第三届北外滩网络安全论坛上以“智能时代网络空间认知安全新观察”为主题作主旨演讲&#x…

springboot417社区疫情管理系统-(论文+源码)_kaic

摘 要 如今社会上各行各业,都喜欢用自己行业的专属软件工作,互联网发展到这个时候,人们已经发现离不开了互联网。新技术的产生,往往能解决一些老技术的弊端问题。因为传统社区疫情管理系统信息管理难度大,容错率低&a…

day10性能测试(2)——Jmeter

【没有所谓的运气🍬,只有绝对的努力✊】 目录 1、LoadRunner vs Jmeter 1.1 LoadRunner 1.2 Jmeter 1.3 对比小结 2、Jmeter 环境安装 2.1 安装jdk 2.2 安装Jmeter 2.3 小结 3、Jmeter 文件目录结构 4、Jmeter默认配置修改 5、Jmeter元件、组…

可造成敏感信息泄露!Spring Boot之Actuator信息泄露漏洞三种利用方式总结

1.介绍 Spring Boot是一个基于Spring的套件,它提供了一个即开即用的应用程序架构,可以简化Spring应用的创建及部署流程,帮助开发者更轻松快捷地构建出企业及应用。 Spring Boot项目中Actuator模块提供了众多HTTP接口端点(Endpoi…

KV Shifting Attention Enhances Language Modeling

基本信息 📝 原文链接: https://arxiv.org/abs/2411.19574👥 作者: Mingyu Xu, Wei Cheng, Bingning Wang, Weipeng Chen🏷️ 关键词: KV shifting attention, induction heads, language modeling📚 分类: 机器学习, 自然语言处…

MongoDB-固定集合(Capped Collection)

在 MongoDB 中,固定集合(Capped Collection)是一种具有特殊属性的集合。固定集合具有一个固定的最大大小,并且一旦达到该大小时,最早插入的文档将会被自动删除,以便为新的文档腾出空间。固定集合的这种特性…

设计模式——单例模式和工厂模式

单例模式:一个类只创建一个类对象(节省内存减少类对象数量,一个类对象多次重复使用) 格式: class a: pass ba() z1b z2b #z1和z2为同一个类对象 工厂模式:(大批量创建具体的类对象,统一类对象入口便于维护&#xf…

Unity教程(十九)战斗系统 受击反馈

Unity开发2D类银河恶魔城游戏学习笔记 Unity教程(零)Unity和VS的使用相关内容 Unity教程(一)开始学习状态机 Unity教程(二)角色移动的实现 Unity教程(三)角色跳跃的实现 Unity教程&…

从感知到认知:解读人工智能技术的核心突破

引言:感知与认知的人工智能之旅 人工智能的演进历程,就像人类的成长过程,从最初学会“看”“听”“感知”这个世界,到逐渐具备“理解”“推理”和“决策”的能力。这两个阶段——感知与认知,不仅是人工智能的技术核心&…

文生图模型开源之光!ComfyUI - AuraFlow本地部署教程

一、模型介绍 AuraFlow 是唯一一个真正开源的文生图模型,由Fal团队开源,其代码和权重都放在了 FOSS 许可证下。基于 6.8B 参数优化模型架构,采用最大更新参数化技术,还重新标注数据集提升指令遵循质量。在物体空间和色彩上有优势…

SpringMVC ——(1)

1.SpringMVC请求流程 1.1 SpringMVC请求处理流程分析 Spring MVC框架也是⼀个基于请求驱动的Web框架,并且使⽤了前端控制器模式(是⽤来提供⼀个集中的请求处理机制,所有的请求都将由⼀个单⼀的处理程序处理来进⾏设计,再根据请求…

Docker 安装 中文版 GitLab

Docker 安装系列 安装GitLab、解决服务器内存不足问题、使用域名/IP地址访问项目 1、拉取 [rootTseng ~]# docker pull twang2218/gitlab-ce-zh:latest latest: Pulling from twang2218/gitlab-ce-zh 8ee29e426c26: Pull complete 6e83b260b73b: Pull complete e26b65fd11…