29 月 XNUMX 日,CNCF(云原生计算基金会)技术委员会(Kubernetes、Prometheus 和其他来自容器和云原生领域的开源产品背后的组织)
什么样的车?
该项目处于 alpha 阶段,专门负责在 Kubernetes 集群中编排 Ceph 分布式存储系统。 作者还宣布了支持其他存储系统的计划,但这不会在下一个版本中发生。
零部件及技术装置
Rook 在 Kubernetes 内部的工作是基于一个特殊的算子 (我们在中写了更多关于 Kubernetes Operator 的内容
因此, 车操作员 似乎是一个容器,其中包含部署和后续维护存储库所需的一切。 操作员的职责包括:
- 为 Ceph 存储守护进程创建 DaemonSet (
头孢-OSD ) 使用简单的 RADOS 集群; - 创建用于 Ceph 监控的 pod (с
头孢蒙 、检查集群状态; 对于法定人数,大多数情况下会部署三个副本,如果其中任何一个副本下降,则新的副本上升); - CRD 的管理(
自定义资源定义 ) 为他自己簇 ,存储池 ,对象存储 (用于服务对对象执行 PUT/GET 的 HTTP 请求的资源和服务集 - 它们与 S3 和 Swift API 兼容)和文件系统 ; - 初始化 pod 以启动所有必要的服务;
- 创建 Rook 代理。
鲁克特工 由部署在每个 Kubernetes 节点上的单独 pod 表示。 代理的目的是插件配置
Rook组件在整个Kubernetes集群方案中的地位和作用
Rook 提供三种类型的存储:
-
堵塞 (阻止,StorageClass
) — 将存储安装到单个壁炉上; -
目的 (摆件,ObjectStore
) - 在 Kubernetes 集群内部和外部可用(通过 S3 API); -
共享文件系统 (共享文件系统,Filesystem
) 是一个可以挂载以从多个 Pod 进行读写的文件系统。
Rook 的内部结构包括:
- Mons — 用于 Ceph 监控的 pod(带有已经提到的 ceph-mon);
- OSD - 带有 ceph-osd 守护进程(对象存储守护进程)的 Pod;
- 经理 - 带有恶魔的豆荚
头孢管理器 (Ceph Manager),为外部系统提供额外的监控功能和接口(监控/控制); - 重生网关 (可选的) - 带有对象存储的 Pod;
- MDS (可选的) - 具有共享文件系统的 Pod。
所有 Rook 守护进程(Mons、OSD、MGR、RGW、MDS)都编译为单个二进制文件(rook
)在容器中运行。
对于 Rook 项目的简要介绍,这篇短片(12 张幻灯片)也可能有用。
操作车
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
少量可用 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 博客上
前途
Rook 目前的状态是 alpha,迄今为止最新的主要版本是
根据
将 Rook 纳入数字
PS
另请阅读我们的博客:
- «
基于 Ceph 的 Kubernetes 中的配置创建持久存储 “; - «
Kubernetes 的 Operator:如何运行有状态应用程序 “; - «
CoreDNS - 用于云原生世界的 DNS 服务器和 Kubernetes 的服务发现 “; - «
容器网络接口 (CNI) - Linux 容器的网络接口和标准 “; - «
Kubernetes 基础设施作为一种经济实惠的服务 “。
来源: habr.com