Rook - Kubernetes 的自助数据存储

Rook - Kubernetes 的自助数据存储

29 月 XNUMX 日,CNCF(云原生计算基金会)技术委员会(Kubernetes、Prometheus 和其他来自容器和云原生领域的开源产品背后的组织) объявил 关于项目验收 进入他们的行列。 这是了解这个“Kubernetes 中的分布式存储编排器”的绝佳机会。

什么样的车?

是用 Go 编写的软件(分发者 根据免费的 Apache 许可证 2.0),旨在为数据仓库提供自动化功能,使它们 自我管理、自我扩展和自我修复。 为此,Rook 自动化(针对 Kubernetes 环境中使用的数据存储):部署、引导、配置、供应、扩展、更新、迁移、灾难恢复、监控和资源管理。

该项目处于 alpha 阶段,专门负责在 Kubernetes 集群中编排 Ceph 分布式存储系统。 作者还宣布了支持其他存储系统的计划,但这不会在下一个版本中发生。

零部件及技术装置

Rook 在 Kubernetes 内部的工作是基于一个特殊的算子 (我们在中写了更多关于 Kubernetes Operator 的内容 本文),它自动执行存储配置并实现其监控。

因此, 车操作员 似乎是一个容器,其中包含部署和后续维护存储库所需的一切。 操作员的职责包括:

  • 为 Ceph 存储守护进程创建 DaemonSet (头孢-OSD) 使用简单的 RADOS 集群;
  • 创建用于 Ceph 监控的 pod (с 头孢蒙、检查集群状态; 对于法定人数,大多数情况下会部署三个副本,如果其中任何一个副本下降,则新的副本上升);
  • CRD 的管理(自定义资源定义) 为他自己 , 存储池, 对象存储 (用于服务对对象执行 PUT/GET 的 HTTP 请求的资源和服务集 - 它们与 S3 和 Swift API 兼容)文件系统;
  • 初始化 pod 以启动所有必要的服务;
  • 创建 Rook 代理。

鲁克特工 由部署在每个 Kubernetes 节点上的单独 pod 表示。 代理的目的是插件配置 弹性卷,它为 Kubernetes 中的存储卷提供支持。 Agent实现对存储的操作:连接网络存储设备、挂载卷、格式化文件系统等。

Rook - Kubernetes 的自助数据存储
Rook组件在整个Kubernetes集群方案中的地位和作用

Rook 提供三种类型的存储:

  1. 堵塞 (阻止, StorageClass) — 将存储安装到单个壁炉上;
  2. 目的 (摆件, ObjectStore) - 在 Kubernetes 集群内部和外部可用(通过 S3 API);
  3. 共享文件系统 (共享文件系统, Filesystem) 是一个可以挂载以从多个 Pod 进行读写的文件系统。

Rook 的内部结构包括:

  • Mons — 用于 Ceph 监控的 pod(带有已经提到的 ceph-mon);
  • OSD - 带有 ceph-osd 守护进程(对象存储守护进程)的 Pod;
  • 经理 - 带有恶魔的豆荚 头孢管理器 (Ceph Manager),为外部系统提供额外的监控功能和接口(监控/控制);
  • 重生网关 (可选的) - 带有对象存储的 Pod;
  • MDS (可选的) - 具有共享文件系统的 Pod。

Rook - Kubernetes 的自助数据存储

所有 Rook 守护进程(Mons、OSD、MGR、RGW、MDS)都编译为单个二进制文件(rook)在容器中运行。

对于 Rook 项目的简要介绍,这篇短片(12 张幻灯片)也可能有用。 介绍 来自 Bassam Tabbara(量子公司首席技术官)。

操作车

Rook算子完全支持Kubernetes 1.6及更高版本 (以及部分旧版 K8s 版本 - 1.5.2)。 他的 安装 в 最简单的场景 它看起来像这样:

cd cluster/examples/kubernetes
kubectl create -f rook-operator.yaml
kubectl create -f rook-cluster.yaml

此外,Rook 操作员已准备好 掌舵图,因此可以像这样进行安装:

helm repo add rook-alpha https://charts.rook.io/alpha
helm install rook-alpha/rook

少量可用 设置选项 (例如,您可以禁用支持 RBAC,如果您的集群中未使用此功能),它们将传递给 helm install 通过参数 --set key=value[,key=value] (或存储在单独的 YAML 文件中并通过 -f values.yaml).

安装 Rook Operator 并使用其代理启动 pod 后,剩下的就是创建 Rook 集群本身,最简单的配置如下所示(rook-cluster.yaml):

apiVersion: v1
kind: Namespace
metadata:
  name: rook
---
apiVersion: rook.io/v1alpha1
kind: Cluster
metadata:
  name: rook
  namespace: rook
spec:
  dataDirHostPath: /var/lib/rook
  storage:
    useAllNodes: true
    useAllDevices: false
    storeConfig:
      storeType: bluestore
      databaseSizeMB: 1024
      journalSizeMB: 1024

注意: 需要特别注意的属性 dataDirHostPath,需要正确的值才能在重新启动后保存集群。 对于将其用作 Kubernetes 主机上 Rook 数据的永久存储位置的情况,作者建议在此目录中至少拥有 5 GB 的可用磁盘空间。

剩下的就是根据配置实际创建集群,并确保 Pod 是在集群中创建的(在命名空间中) rook):

kubectl create -f rook-cluster.yaml
kubectl -n rook get pod
NAME                              READY     STATUS    RESTARTS   AGE
rook-api-1511082791-7qs0m         1/1       Running   0          5m
rook-ceph-mgr0-1279756402-wc4vt   1/1       Running   0          5m
rook-ceph-mon0-jflt5              1/1       Running   0          6m
rook-ceph-mon1-wkc8p              1/1       Running   0          6m
rook-ceph-mon2-p31dj              1/1       Running   0          6m
rook-ceph-osd-0h6nb               1/1       Running   0          5m

升级 Rook集群(直至新版本)是一个过程,在这个阶段需要按一定顺序顺序更新其所有组件,只有在确保当前Rook安装完全“健康”后才能启动它状态。 使用将 Rook 版本 0.5.0 更新到 0.5.1 的示例的详细分步说明可以在 项目文件.

去年 XNUMX 月在 Rook 博客上 发表了 对照 生产率 与EBS。 其结果值得关注,简而言之,如下:

Rook - Kubernetes 的自助数据存储
Rook - Kubernetes 的自助数据存储

前途

Rook 目前的状态是 alpha,迄今为止最新的主要版本是 0.6版本,2017 年 XNUMX 月发布(当前修正 - v0.6.2 ——14 月 2018 日发布)。 预计将在 XNUMX 年上半年发布更成熟的版本:测试版和稳定版(正式准备用于生产)。

根据 路线图 项目中,开发人员至少在接下来的两个版本中对 Rook 的开发有详细的愿景:0.7(其准备情况在 GitHub 跟踪器中) 预计 为 60%)和 0.8。 预期的变化包括将对 Ceph Block 和 Ceph Object 的支持转移到 beta 版本状态、动态配置 CephFS 卷、高级日志系统、自动集群更新、对卷快照的支持。

将 Rook 纳入数字 CNCF 项目 (到目前为止,还处于非常早期的阶段——“初始阶段”——与 链接器 и 核心DNS)是对产品日益增长的兴趣的一种保证。 一旦稳定版本发布,它将如何在云应用领域站稳脚跟,这将变得更加清晰,这必将为Rook带来新的测试人员和用户。

PS

另请阅读我们的博客:

来源: habr.com

添加评论