Kubernetes 持久化存储的难题,Rook来解决

2023-11-23 01:59

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

目录

前言:

Ceph

什么是Rook?

Rook 包含的组件:

在 Kubernetes 上部署 Rook主要步骤


前言:

作为最热门云原生技术,Kubernetes 使用越来越广泛, Kubernetes最小单元是Pod,但Pod是不断创建和销毁的,一般来讲,它们的生命周期是短暂的。

持久化存储是保存容器存储数据的重要手段,存储插件会在容器里挂载一个基于网络或者其他机制的远程数据卷,使得在容器里创建的文件实际是挂载到指定的持久化存储卷,从而访问到数据卷里保存的内容。

Kubernetes 在许多方面具备强大的能力,例如可伸缩性、可移植性和管理能力,但它不支持存储状态。在生产系统里,不少Pod都是有状态的,即需要某种外部存储。

CNCF版图列出了云原生存储解决方案:

目前已有不少开源项目致力于解决云原生架构上的存储问题,其中较为常见的是Ceph和Rook,本文将重点讲解Rook。

Ceph

Ceph是一个可靠、自动均衡、自动恢复的分布式存储系统,通常可用于对象存储,块设备存储和文件系统存储。

Ceph在存储的时候充分利用存储节点的计算能力,在存储每一个数据时都会通过计算得出该数据的位置,尽量的分布均衡。

以下为Ceph架构图:

什么是Rook?

Rook 是 Kubernetes 的开源云原生存储协调器,为不同的存储解决方案提供平台、框架和支持,以便与云原生环境自然整合。

Rook 将存储软件变成自我管理、自我扩展和自我修复的存储服务。它通过自动部署、启动、配置、配置、扩展、升级、迁移、灾难恢复、监控和资源管理来实现。Rook 使用底层云原生容器管理、调度和编排平台提供的设施来履行其职责。

Rook 深度整合到云原生环境中,利用扩展点,为调度、生命周期管理、资源管理、安全、监控和用户体验提供无缝体验。

Rook 由 Cloud Native Computing Foundation(CNCF)托管,是一个毕业项目。

Rook 使用 Kubernetes 使 Ceph 存储系统能够在 Kubernetes 上运行,下图说明了 Ceph Rook 如何与 Kubernetes 集成:

随着 Rook 在 Kubernetes 集群中运行,Kubernetes 应用程序可以挂载由 Rook 管理的块设备和文件系统,或者可以使用 S3 / Swift API 提供对象存储。Rook oprerator 自动配置存储组件并监控群集,以确保存储处于可用和健康状态。

Rook oprerator 是一个简单的容器,具有引导和监视存储集群所需的全部功能。oprerator 将启动并监控 ceph monitor pods 和 OSDs 的守护进程,它提供基本的 RADOS 存储。oprerator 通过初始化运行服务所需的 pod 和其他组件来管理池,对象存储(S3 / Swift)和文件系统的 CRD。

prerator 将监视存储后台驻留程序以确保群集正常运行。Ceph mons 将在必要时启动或故障转移,并在群集增长或缩小时进行其他调整。oprerator 还将监视 api 服务请求的所需状态更改并应用更改。

Rook oprerator 还创建了 Rook agent。这些 agent 是在每个 Kubernetes 节点上部署的 pod。每个 agent 都配置一个 Flexvolume 插件,该插件与 Kubernetes 的 volume controller 集成在一起,处理节点上所需的所有存储操作,例如附加网络存储设备,安装卷和格式化文件系统。

Rook 包含的组件:

Rook Operator:Rook Operator是Rook框架的核心。Operator是一个自定义的Kubernetes控制器,它使用CR(Custom Resource)来管理应用程序及其组件。

Kubernetes controller监视您的集群资源的状态,并尝试将当前集群状态移至所需状态。每个controller负责特定资源,并由协调循环实现。创建,更新或删除受监视资源时,将触发操作更新

Rook Agent:在每个存储节点上运行,并配置一个 FlexVolume 插件,和 Kubernetes 的存储卷控制框架进行集成。Agent 处理所有的存储操作,例如挂接网络存储设备、在主机上加载存储卷以及格式化文件系统等。

Rook Discovers:检测挂接到存储节点上的存储设备。

Rook 还会用 Kubernetes Pod 的形式,部署 Ceph 的 MON、OSD 以及 MGR 守护进程。

Rook Cluster:提供了对存储机群的配置能力,用来提供块存储、对象存储以及共享文件系统。每个集群都有多个 Pool。

Pool:为块存储提供支持。Pool 也是给文件和对象存储提供内部支持。

Object Store:用 S3 兼容接口开放存储服务。

File System:为多个 Kubernetes Pod 提供共享存储。

在 Kubernetes 上部署 Rook主要步骤

1、部署Rook Operator

2、创建Rook Cluster

3、配置ceph dashboard

4、部署Ceph toolbox

5、rook部署块存储

6、rook部署对象存储

7、rook部署文件存储

这篇关于Kubernetes 持久化存储的难题,Rook来解决的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

idea maven编译报错Java heap space的解决方法

《ideamaven编译报错Javaheapspace的解决方法》这篇文章主要为大家详细介绍了ideamaven编译报错Javaheapspace的相关解决方法,文中的示例代码讲解详细,感兴趣的... 目录1.增加 Maven 编译的堆内存2. 增加 IntelliJ IDEA 的堆内存3. 优化 Mave

如何解决mmcv无法安装或安装之后报错问题

《如何解决mmcv无法安装或安装之后报错问题》:本文主要介绍如何解决mmcv无法安装或安装之后报错问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录mmcv无法安装或安装之后报错问题1.当我们运行YOwww.chinasem.cnLO时遇到2.找到下图所示这里3.

浅谈配置MMCV环境,解决报错,版本不匹配问题

《浅谈配置MMCV环境,解决报错,版本不匹配问题》:本文主要介绍浅谈配置MMCV环境,解决报错,版本不匹配问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录配置MMCV环境,解决报错,版本不匹配错误示例正确示例总结配置MMCV环境,解决报错,版本不匹配在col

Feign Client超时时间设置不生效的解决方法

《FeignClient超时时间设置不生效的解决方法》这篇文章主要为大家详细介绍了FeignClient超时时间设置不生效的原因与解决方法,具有一定的的参考价值,希望对大家有一定的帮助... 在使用Feign Client时,可以通过两种方式来设置超时时间:1.针对整个Feign Client设置超时时间

C# WinForms存储过程操作数据库的实例讲解

《C#WinForms存储过程操作数据库的实例讲解》:本文主要介绍C#WinForms存储过程操作数据库的实例,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、存储过程基础二、C# 调用流程1. 数据库连接配置2. 执行存储过程(增删改)3. 查询数据三、事务处

Spring事务中@Transactional注解不生效的原因分析与解决

《Spring事务中@Transactional注解不生效的原因分析与解决》在Spring框架中,@Transactional注解是管理数据库事务的核心方式,本文将深入分析事务自调用的底层原理,解释为... 目录1. 引言2. 事务自调用问题重现2.1 示例代码2.2 问题现象3. 为什么事务自调用会失效3

mysql出现ERROR 2003 (HY000): Can‘t connect to MySQL server on ‘localhost‘ (10061)的解决方法

《mysql出现ERROR2003(HY000):Can‘tconnecttoMySQLserveron‘localhost‘(10061)的解决方法》本文主要介绍了mysql出现... 目录前言:第一步:第二步:第三步:总结:前言:当你想通过命令窗口想打开mysql时候发现提http://www.cpp

SpringBoot启动报错的11个高频问题排查与解决终极指南

《SpringBoot启动报错的11个高频问题排查与解决终极指南》这篇文章主要为大家详细介绍了SpringBoot启动报错的11个高频问题的排查与解决,文中的示例代码讲解详细,感兴趣的小伙伴可以了解一... 目录1. 依赖冲突:NoSuchMethodError 的终极解法2. Bean注入失败:No qu

springboot报错Invalid bound statement (not found)的解决

《springboot报错Invalidboundstatement(notfound)的解决》本文主要介绍了springboot报错Invalidboundstatement(not... 目录一. 问题描述二.解决问题三. 添加配置项 四.其他的解决方案4.1 Mapper 接口与 XML 文件不匹配

Python中ModuleNotFoundError: No module named ‘timm’的错误解决

《Python中ModuleNotFoundError:Nomodulenamed‘timm’的错误解决》本文主要介绍了Python中ModuleNotFoundError:Nomodulen... 目录一、引言二、错误原因分析三、解决办法1.安装timm模块2. 检查python环境3. 解决安装路径问题