关于开源项目介绍:Carina-的根基与诞生背景|深入了解-Carina-系列-第一期

119次阅读

共计 2909 个字符,预计需要花费 8 分钟才能阅读完成。

Carina 是由博云主导并发动的云原生本地存储我的项目(GitHub 地址为:https://github.com/carina-io/…),目前曾经进入 CNCF 全景图。

Carina 旨在为云原生环境中的有状态利用提供高性能、免运维的本地存储解决方案,具体存储卷生命周期治理、本地设施治理、智能调度等能力。Carina 作为博云容器云平台的组件之一,曾经在多个金融机构的生产环境中稳固运行多年。


一、Carina 系列文章 – 前言

本篇是 Carina 系列文章的开篇,在该系列文章中咱们将全面地展现本地存储 Carina 我的项目的功能设计、性能应用及其实现细节等内容。在 Carina 系列文章中将蕴含如下章节性能(排名不分先后):Carina 整体性能介绍、Carina 存储卷创立及扩容、Carina 存储卷挂载与扩容、设施注册与节点资源管理、基于 K8S 的调度器扩大、Carina 主动治理 Raid 应用及原理剖析、Carina 联合 velero 实现存储备份复原、smart 感知应用及原理、基于 cgroup v1 和 cgroup v2 的设施限速、基于磁盘 IO 的调度等等。

Carina 是基于 K8S CSI 实现的一个本地存储插件,在本篇文章中咱们将首先简要介绍一下 Carina 我的项目的根基容器存储接口(CSI),以及为什么咱们须要本地存储本地存储诞生的契机,在之后咱们将展现 Carina 我的项目架构设计等内容。

二、容器存储接口(CSI)

1. CSI 是什么

CSI 是 Container Storage Interface(容器存储接口)的简写,CSI 存在的目标便是定义存储行业标准,使供应商(SP)可能开发一个合乎 CSI 规范的插件,在多容器编排零碎中不便的提供存储。

Kubernetes 将通过 CSI 接口与云存储厂商进行通信,进行卷的创立、挂载等治理操作,从而实现容器应用长久存储卷的需要。

2. 为什么要有 CSI

在没有 CSI 之前 Kubernetes 曾经内置了弱小的存储插件零碎,然而这样的存储插件是 Kubernetes 代码的一部分,要追随 Kubernetes 的公布而更新,这样就存在一些问题,如果云存储厂商发现有些问题须要修复或者优化,云存储厂商无奈及时修复而独自公布版本其必须与 Kubernetes 一块公布,这样对于 K8S 和云存储厂商而言造成了相互依赖互相制约的关系,不利于单方疾速迭代,另外云存储厂商的代码与 Kubernetes 代码高度耦合在一起,还会引起安全性、可靠性问题,这减少了 Kubernetes 代码的复杂度以及后续的保护老本等。

基于以上问题 Kubernetes 将存储系统形象出了一组内部存储接口即 CSI,Kubernetes 通过 Grpc 接口与云存储厂商的 CSI 驱动服务进行通信,这样一来对于云存储厂商来说,能够独自公布和部署本人的存储插件,失常的迭代开发,无需接触 Kubernetes 外围代码,升高了开发的复杂度;同时对于 Kubernetes 来说,这样不仅升高了保护老本,还能为用户提供更多的存储选项。

3. CSI 零碎架构

这是一张简要的 CSI 零碎架构图:

首先 Kubernetes 官网为 CSI 提供了一些辅助服务 external-provisioner、external-attacher、external-resizer、external-snapshotter、node-driver-register、livenessprobe 等,通过这些辅助组件 CSI 驱动开发者只需通过实现 CSI 接口和云厂商存储服务通信的内容,便能够不便的开发一个 K8S 存储插件。

三、本地存储诞生的契机

1. 中间件上云的窘境

Kubernetes CSI 插件机制日趋成熟,各个分布式存储服务别离开源了本人的存储插件比方:ceph-csi、nfs-csi。这些网络存储插件极大地扩大了 Kubernetes 的能力,在过来几年的 K8S 倒退中起着至关重要的作用,分布式网络存储系统在可扩展性、数据安全等方面有着微小的劣势,在通用存储畛域施展了很大的作用。然而,对于极高的 IOPS、极低提早的数据库等中间件畛域,网络存储有其人造的劣势。因而,推出一款提早极低的开源 CSI 对数据库类服务就至关重要。

Kubernetes 曾经稳固运行数年之久,次要利用场景始终是无状态服务以及对磁盘 IO 不敏感的业务服务,随着客户对云平台深刻应用,心愿一些中间件服务也能搬迁到云上,对于中间件服务来说有各种开源的 operator 促使其在 K8S 中稳固运行,然而中间件服务对磁盘 IO 具备十分高的要求,网络存储服务受到很大的挑战。

Kubernetes 集群运行节点次要应用了 CPU、Memory 等资源,对本地磁盘并未有精密的应用,在肯定水平上造成了本地资源的节约。

对于网络存储来说多个正本是一种基本功能,然而在中间件场景下,比方 Mysql 自身主从三正本,在网络存储下就变成了九份正本,也造成了存储资源的冗余。

2. 本地存储需要

由上可知,咱们迫切地须要一款本地存储产品能解决上述窘境,咱们对该项目标需要如下,

1) 可能提供基于本地磁盘的高性能存储设备。

2) 合乎 CSI 标准,与其余网络存储插件应用形式完全一致。

3) 可能非常繁难的部署,主动治理本地磁盘,使用户简直无需进行保护。

4) 提供丰盛的文档资料及运行日志,能非常轻易的进行性能应用及异样问题排查。

5) 可能反对存储卷的备份复原,反对 RAID 治理、磁盘寿命监控等。

四、本地存储 Carina 设计

1. 根本的 CSI 性能

该列表展现的是一个 CSI 存储插件的基本功能,在晚期设计中 Carina 须要实现的基本功能,当然通过多轮迭代的 Carina 曾经有了更丰盛多元的性能:

2. 整体架构图

共有三个组件:

Carina Controller:负责监听 pvc 的创立,并且告诉 Carina Node 创立存储卷。

Carina Node:负责保护本地设施,并且执行创立存储卷命令、挂载卷到容器命令等。

Carina Scheduler:K8S 调度器的扩大,减少基于本地存储的调度插件。

3. 节点服务

该图形容了 Carina Node 的工作过程,主动保护本地磁盘设施并组建存储卷组,将节点容量信息注册到 Kubernetes Node,Kubelet 通过 grpc 调用将存储卷挂载到指定目录。

4. 整体运行流程

五、过来、当初与将来

笔者在书写这篇文章时,Carina 我的项目自 2020 年启动,并于 2021 年 10 月份开源,目前曾经过数轮迭代。本篇文章从规范的容器接口 CSI、谈到本地存储需要的诞生以及晚期 Carina 的设计,在晚期的设计中除了根本的 CSI 性能外,咱们冀望它可能做到繁难部署、免运维、占用极低的资源量等。

当初的 Carina 我的项目理论性能曾经通过多轮版本迭代,减少了更加丰盛多元的性能,比方设施多级缓存、设施限速等性能,随着版本迭代咱们也应用可配置的存储卷代替了主动组建 SSD/HDD 卷组的性能、应用 NodeStorageResource 代替了节点注册性能、当然还有其余更多个性开发中。

在接下来的文章中,咱们将首先列举现有的 Carina 性能,正在开发中的、曾经退出开发计划中的性能,而后再在开展一一性能点进行具体的应用介绍及原理剖析等。

正文完
 0