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的存储设计不仅提升了存储管理的效率和灵活性,还为云原生应用的发展提供了坚实的基础。

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

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

相关文章

渗透测试基础(二) Linux+Win常用命令介绍

1. Linux常用命令 1.1 解压缩相关 1.1.1 tar命令 解包:tar zxvf FileName.tar 打包:tar czvf FileName.tar DirName1.1.2 gz命令 对于.gz格式的解压1:gunzip FileName.gz解压2:gzip -d FileName.gz压缩:gzip FileN…

HJ39判断两个IP是否属于同一子网

提示:文章 文章目录 前言一、背景二、 2.1 2.2 总结 前言 HJ39判断两个IP是否属于同一子网 一、 代码: 第一版代码没有对掩码网络号进行处理。一开始对非法字段的理解就是value大于255。然后执行示例, 254.255.0.0 85.122.52.249 10.57.…

Dell戴尔灵越Inspiron 16 Plus 7640/7630笔记本电脑原装Windows11下载,恢复出厂开箱状态预装OEM系统

灵越16P-7630系统包: 链接:https://pan.baidu.com/s/1Rve5_PF1VO8kAKnAQwP22g?pwdjyqq 提取码:jyqq 灵越16P-7640系统包: 链接:https://pan.baidu.com/s/1B8LeIEKM8IF1xbpMVjy3qg?pwdy9qj 提取码:y9qj 戴尔原装WIN11系…

如何优雅的一键适配Ubuntu20.04的OpenHarmony环境?请关注【itopen:openharmony_env_init】...

itopen组织:1、提供OpenHarmony优雅实用的小工具2、手把手适配riscv qemu linux的三方库移植3、未来计划riscv qemu ohos的三方库移植 小程序开发4、一切拥抱开源,拥抱国产化 一、概述 本工程的作用主要是基于Ubuntu20.04版本一键自动初始化Ubunt…

【CAPL】XMLTestModule XML文件模板

<?xml version"1.0" encoding"iso-8859-1" standalone"yes"?> <testmodule title"XML Test Module" version"1.1"><description>XML Test Module</description><testgroup title"checks …

C语言从头学22——main( )函数

C语言中的 main( ) 是程序的入口函数。即所有的程序一定要包含一个 main( ) 函数。程序总是从这个函数开始执行&#xff0c;如果没有这个函数&#xff0c;程序就无法启动。其他函数都是通过它引入程序的。 main( ) 的写法与其他函数是相同的。main函数的返回值是 int 类…

CFD笔记

CFD 定常流动与非定常流动 定常流动&#xff1a;流体流动过程中各物理量均与时间无关; 非定常流动&#xff1a;流体流动过程中某个或某些物理量与时间有关. 运动黏度 运动粘度定义&#xff1a; v μ ρ v \frac{\mu}{\rho} vρμ​&#xff0c;其中 μ \mu μ​表示粘度…

Node.js进阶——数据库

文章目录 一、步骤1、安装操作 MySQL数据库的第三方模块(mysql)2、通过 mysql 模块连接到 MySQL 数据库3、测试 二、操作 mysql 数据库1、查询语句2、插入语句3、插入语句快捷方式4、更新数据5、更新语句快捷方式6、删除数据7、标记删除 二、前后端的身份认证1、web开发模式1&a…

如何用python调用C++处理图片

一. 背景 用pyhton可直接调用C&#xff0c;减少重写的工作量&#xff1b;部分逻辑运算&#xff0c;C的执行效率高&#xff0c;可进行加速。 下面就一个简单的C滤镜&#xff08;彩色图转灰度图&#xff09;为例&#xff0c;展示python调用C 二. 代码实现 代码结构如下&#x…

Java面试题:对比ArrayList和LinkedList的内部实现,以及它们在不同场景下的适用性

ArrayList和LinkedList是Java中常用的两个List实现&#xff0c;它们在内部实现和适用场景上有很大差异。下面是详细的对比分析&#xff1a; 内部实现 ArrayList 数据结构&#xff1a;内部使用动态数组&#xff08;即一个可变长的数组&#xff09;实现。存储方式&#xff1a;…

MybatisPlus 的入门与实践:BaseMapper 实现 CRUD

MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集&#xff0c;可以使用简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO&#xff08;Plain Old Java Objects&#xff0c;普通的 Java 对象&#xff09;为数据库中的记录。 下面我们将详细探讨 MyBati…

如何解决跨区域文件传输存在的安全管控问题?

⼤型企业和集团为扩⼤市场份额、优化资源配置&#xff0c;会在不同地区设⽴多级下属分⽀机构、研发中心、实验室等&#xff0c;存在研发数据横向或纵向流转的需求&#xff0c;研发数据进行跨区域文件传输的场景。跨区域可能是网络区域&#xff0c;也可能是地理区域&#xff0c;…

2-10 基于matlab的动态时间归整(DTW)算法

基于matlab的动态时间归整&#xff08;DTW&#xff09;算法。16页的试验文档。以一个能识别数字0&#xff5e;9的语音识别系统的实现过程为例&#xff0c;阐述了基于DTW算法的特定人孤立词语音识别的基本原理和关键技术。其中包括对语音端点检测方法、特征参数计算方法和DTW算法…

MT1318 完美平方

题目 输入正整数N&#xff0c;检查它是否为完美平方。完美平方数是指1个平方数可以分成两部分后&#xff0c;每个部分仍然是平方数。如497 * 7&#xff0c;分成4和9&#xff0c;4和9都是平方数。再如168141*41&#xff0c;1681分成16和81&#xff0c;也都是平方数。 格式 输…

elasticsearch的安装和配置

单节点安装与部署 我们通过docker进行安装 1.docker的安装 如果以及安装了docker就可以跳过这个步骤。 首先更新yum: yum update安装docker: yum install docker查看docker的版本&#xff1a; docker -v此时我们的docker就安装成功了。 2.创建网络 我们还需要部署kiban…

八大排序————C语言版实现

Hello&#xff0c;各位未来的高级程序员们&#xff0c;大家好&#xff0c;今天我就来为大家讲解一下有关排序的内容&#xff0c;我们常见的排序就是我们接下来要讲的这八个排序&#xff0c;我们平常所说的排序有十大排序&#xff0c;我们这里的八大排序是我们生活中最为常见的八…

idea的右边栏maven不见了(丢了)解决方案以及idea无法识别maven项目

前言 众所周知&#xff0c;idea是java开发中不可缺少的利器&#xff0c;但是由于功能过多&#xff0c;导致奇怪的问题也很多 问题汇总 idea的右边栏maven丢了 idea无法识别maven项目 对应的解决办法 idea的右边栏maven丢了 原因可能是被自己手动移除了 或者 项目没被正确…

CTF入门指南

何为CTF &#xff1f; CTF&#xff08;Capture The Flag&#xff09;夺旗比赛&#xff0c;在网络安全领域中指的是网络安全技术人员之间进行技术竞技的一种比赛形式。CTF起源于1996年DEFCON全球黑客大会&#xff0c;以代替之前黑客们通过互相发起真实攻击进行技术比拼的方式。…

研究Redis源码的一些前期准备

一 背景 Redis数据结构讲完后&#xff0c;觉得还是有点不过瘾&#xff0c;想研究一下Redis的底层实现。找了一些相关资料&#xff0c;准备借鉴和学习其他各位大佬钻研Redis底层的方法和经验&#xff0c;掌握Redis实现的基本原理。 二 源码归类 网上有大佬已经总结了…

IPC工业电脑的现状、发展未来与破局策略

文章目录 全球工业电脑市场概况1.1 市场规模与增长1.2 区域分布与主要市场 工业电脑的技术发展与应用2.1 技术趋势与创新2.2 应用领域扩展2.3 工业自动化与智能化 竞争格局与市场参与者3.1 主要企业与市场竞争3.2 国内外竞争对比3.3 市场集中度与竞争策略 未来发展趋势与市场预…