21、架构-持久化存储

2024-06-20 11:44
文章标签 21 存储 架构 持久

本文主要是介绍21、架构-持久化存储,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1、Kubernetes存储设计

Kubernetes在存储设计上秉承声明式API和资源抽象的理念,用户通过声明存储需求,Kubernetes负责调度和管理实际的存储资源。以下是Kubernetes存储设计中的核心概念和机制。

 Mount和Volume

在Kubernetes中,Volume和Mount是实现持久化存储的基础概念。

  • Mount:将存储设备挂载到容器的文件系统中,使得容器可以访问和使用该存储设备。Mount是容器访问外部存储的入口。

  • Volume:用于描述一个存储单元,可以是持久性的(PersistentVolume,PV)或临时性的(如emptyDir、configMap)。Volume在Kubernetes中被定义为一种抽象,使得不同类型的存储设备(如本地磁盘、NFS、云存储等)能够被统一管理。

    在Kubernetes中,每个Pod可以声明多个Volume,并将其挂载到容器内的指定路径。这些Volume在Pod生命周期内保持一致,即使Pod中的容器重启,Volume的数据也不会丢失 。

静态存储分配

静态存储分配模式下,管理员提前创建并配置存储资源,用户通过声明来请求这些预先分配的资源。

  • PersistentVolume(PV):PV是集群中的一块存储资源,独立于具体的Pod。管理员通过YAML文件定义PV的属性,包括存储容量、访问模式(如ReadWriteOnce、ReadOnlyMany、ReadWriteMany)和存储类型(如NFS、iSCSI、AWS EBS)。

  • PersistentVolumeClaim(PVC):PVC是用户对存储资源的请求,类似于Pod对计算资源的请求。用户通过PVC声明需要的存储容量和访问模式,Kubernetes根据PVC匹配合适的PV。如果找到匹配的PV,Kubernetes会将其绑定到PVC,用户的Pod可以通过PVC访问对应的存储资源 。

静态分配模式适用于小规模集群和预先确定的存储需求,但在大规模动态环境中,手工管理PV和PVC会变得复杂且低效。

动态存储分配

动态存储分配通过自动化机制为用户提供灵活的存储资源,适应大规模集群的需求。

  • StorageClass:StorageClass定义了存储资源的类别和属性,是动态分配PV的模板。管理员通过StorageClass指定存储类型、配置参数和Provisioner(负责实际创建存储的插件)。

  • 动态分配流程:当用户创建PVC时,可以指定StorageClass,Kubernetes根据PVC和StorageClass的配置自动创建PV并绑定PVC。这种方式减少了管理员的手工操作,提高了存储管理的效率和灵活性 。

动态分配使得Kubernetes能够根据需求自动调度和分配存储资源,满足应用的动态变化和扩展需求。

2、容器存储与生态

Kubernetes的存储生态系统支持多种存储插件和接口,提供灵活多样的存储解决方案,以满足不同应用场景的需求。以下是Kubernetes存储架构及其主要组件和扩展机制。

 Kubernetes存储架构

Kubernetes存储架构由多个组件协同工作,确保存储资源的高效管理和可靠访问。

  • PV控制器:负责监控和管理PV的生命周期,包括创建、绑定和删除。

  • PVC控制器:处理PVC的创建和绑定请求,确保PVC与合适的PV匹配。

  • Volume管理器:在节点上管理Volume的挂载和卸载操作,确保容器能够访问所需的存储设备 。

这些组件共同保证了Kubernetes存储的自动化管理和可靠性,使用户能够专注于应用本身而无需担心底层存储的细节。

FlexVolume与CSI

Kubernetes支持两种主要的存储扩展机制:FlexVolume和CSI(Container Storage Interface)。

  • FlexVolume:FlexVolume是一种Kubernetes早期的存储扩展机制,通过可执行文件实现存储操作。它支持多种存储后端,但由于实现方式较为简单,功能有限,FlexVolume逐渐被CSI所取代 。

  • CSI(Container Storage Interface):CSI是Kubernetes的标准存储接口,通过定义统一的API,使得任何存储供应商都可以为Kubernetes开发存储插件。CSI插件可以动态加载,支持更灵活的存储管理和扩展。CSI的引入使得Kubernetes的存储生态更加开放和多样化 。

从In-Tree到Out-of-Tree

最初,Kubernetes将存储驱动集成在核心代码中(In-Tree),以快速支持各种存储系统。然而,这种方式导致核心代码庞大且难以维护。为了提高灵活性和安全性,Kubernetes开始迁移到Out-of-Tree模式,通过CSI插件实现存储驱动的扩展。

  • In-Tree驱动:内置于Kubernetes核心代码中的存储驱动,直接由Kubernetes管理。
  • Out-of-Tree驱动:通过CSI接口实现的存储驱动,独立于Kubernetes核心代码,由外部插件管理和更新。

这种迁移使得Kubernetes能够更灵活地添加和修改存储驱动,减少了核心代码的复杂性,提高了系统的可靠性和安全性 。

 容器插件生态

Kubernetes的容器存储生态系统已经形成了丰富的插件环境,支持多种存储类型和实现。

  • 块存储:适用于高性能、低延迟的应用场景,如数据库和虚拟机磁盘。常见插件包括AWS EBS、GCE PD、vSphere等。

  • 文件存储:适用于需要共享访问的场景,如日志和配置文件。常见插件包括NFS、GlusterFS、CephFS等。

  • 对象存储:适用于大规模、非结构化数据存储,如备份和媒体文件。常见插件包括Amazon S3、OpenStack Swift、MinIO等 。

这些插件通过CSI接口实现,用户可以根据实际需求选择合适的存储方案,构建高效可靠的容器存储系统。

总结

持久化存储是容器化应用的重要组成部分。Kubernetes通过静态和动态存储分配机制、丰富的存储插件生态系统,提供了强大的持久化存储支持。无论是块存储、文件存储还是对象存储,Kubernetes都能通过灵活的存储架构和扩展机制,满足不同应用场景的需求,确保数据的可靠性和持久性。Kubernetes的存储设计不仅提升了存储管理的效率和灵活性,还为云原生应用的发展提供了坚实的基础。

这篇关于21、架构-持久化存储的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1078043

相关文章

Knife4j+Axios+Redis前后端分离架构下的 API 管理与会话方案(最新推荐)

《Knife4j+Axios+Redis前后端分离架构下的API管理与会话方案(最新推荐)》本文主要介绍了Swagger与Knife4j的配置要点、前后端对接方法以及分布式Session实现原理,... 目录一、Swagger 与 Knife4j 的深度理解及配置要点Knife4j 配置关键要点1.Spri

Python实现对阿里云OSS对象存储的操作详解

《Python实现对阿里云OSS对象存储的操作详解》这篇文章主要为大家详细介绍了Python实现对阿里云OSS对象存储的操作相关知识,包括连接,上传,下载,列举等功能,感兴趣的小伙伴可以了解下... 目录一、直接使用代码二、详细使用1. 环境准备2. 初始化配置3. bucket配置创建4. 文件上传到os

Java中调用数据库存储过程的示例代码

《Java中调用数据库存储过程的示例代码》本文介绍Java通过JDBC调用数据库存储过程的方法,涵盖参数类型、执行步骤及数据库差异,需注意异常处理与资源管理,以优化性能并实现复杂业务逻辑,感兴趣的朋友... 目录一、存储过程概述二、Java调用存储过程的基本javascript步骤三、Java调用存储过程示

mysql中的服务器架构详解

《mysql中的服务器架构详解》:本文主要介绍mysql中的服务器架构,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、背景2、mysql服务器架构解释3、总结1、背景简单理解一下mysqphpl的服务器架构。2、mysjsql服务器架构解释mysql的架

MySQL之InnoDB存储引擎中的索引用法及说明

《MySQL之InnoDB存储引擎中的索引用法及说明》:本文主要介绍MySQL之InnoDB存储引擎中的索引用法及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录1、背景2、准备3、正篇【1】存储用户记录的数据页【2】存储目录项记录的数据页【3】聚簇索引【4】二

MySQL之InnoDB存储页的独立表空间解读

《MySQL之InnoDB存储页的独立表空间解读》:本文主要介绍MySQL之InnoDB存储页的独立表空间,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、背景2、独立表空间【1】表空间大小【2】区【3】组【4】段【5】区的类型【6】XDES Entry区结构【

SQLite3 在嵌入式C环境中存储音频/视频文件的最优方案

《SQLite3在嵌入式C环境中存储音频/视频文件的最优方案》本文探讨了SQLite3在嵌入式C环境中存储音视频文件的优化方案,推荐采用文件路径存储结合元数据管理,兼顾效率与资源限制,小文件可使用B... 目录SQLite3 在嵌入式C环境中存储音频/视频文件的专业方案一、存储策略选择1. 直接存储 vs

Redis的持久化之RDB和AOF机制详解

《Redis的持久化之RDB和AOF机制详解》:本文主要介绍Redis的持久化之RDB和AOF机制,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录概述RDB(Redis Database)核心原理触发方式手动触发自动触发AOF(Append-Only File)核

k8s上运行的mysql、mariadb数据库的备份记录(支持x86和arm两种架构)

《k8s上运行的mysql、mariadb数据库的备份记录(支持x86和arm两种架构)》本文记录在K8s上运行的MySQL/MariaDB备份方案,通过工具容器执行mysqldump,结合定时任务实... 目录前言一、获取需要备份的数据库的信息二、备份步骤1.准备工作(X86)1.准备工作(arm)2.手

MySQL存储过程之循环遍历查询的结果集详解

《MySQL存储过程之循环遍历查询的结果集详解》:本文主要介绍MySQL存储过程之循环遍历查询的结果集,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录前言1. 表结构2. 存储过程3. 关于存储过程的SQL补充总结前言近来碰到这样一个问题:在生产上导入的数据发现