本文引用自 阳明的博客
Rook 是一个开源的云原生存储编排工具,提供平台、框架和对各种存储解决方案的支持,以和云原生环境进行本地集成。
Rook 将存储软件转变成自我管理、自我扩展和自我修复的存储服务,通过自动化部署、启动、配置、供应、扩展、升级、迁移、灾难恢复、监控和资源管理来实现。Rook 底层使用云原生容器管理、调度和编排平台提供的能力来提供这些功能。
Rook 利用扩展功能将其深度集成到云原生环境中,并为调度、生命周期管理、资源管理、安全性、监控等提供了无缝的体验。有关 Rook 当前支持的存储解决方案的状态的更多详细信息,可以参考 Rook 仓库 的项目介绍。不过目前 Rook 已经很好地提供了对 Ceph 的支持,本文简单为大家介绍如何使用 Rook 来快速搭建 Ceph 集群。
部署 Rook Operator
作者踩过的坑,在参考本教程的时候一定要看官方文档中的各个版本的先决条件每个版本有不同的先决条件,如:
如果你部署release-1.1
你需要你的K8s集群至少有3个Node节点。
如果你部署release-1.3
你还需要在做系统的时候预留出单独的盘。
PS:我建议你安装release-1.1
的版本,这个版本不会出现太多奇奇怪怪的问题。
这里部署 release-1.1
版本的 Rook,点击查看部署使用的 部署清单文件。
PS:一定要看准了 分支版本是release-1.1
从上面链接中下载 common.yaml 与 operator.yaml 两个资源清单文件:
$ kubectl apply -f common.yaml
$ kubectl apply -f operator.yaml
在继续操作之前,验证 rook-ceph-operator 是否处于“Running”状态:
image.png
这两个组件应该是Running的状态,外网拉取这个镜像会比较慢,耐心等等
创建 Rook Ceph 集群
现在 Rook Operator 处于 Running 状态,接下来我们就可以创建 Ceph 集群了。为了使集群在重启后不受影响,请确保设置的 dataDirHostPath
属性值为有效得主机路径。更多相关设置,可以查看集群配置相关文档。
创建如下的资源清单文件:(cluster.yaml)
(PS:这个地方分为生产环境和测试环境,不同的环境在Rook的Github上都有相当应的版本文件)
注意:dataDirHostPath 这个值一定要设置 不然这玩意在重启集群的时候可能拉不起来
apiVersion: ceph.rook.io/v1
kind: CephCluster
metadata:
name: rook-ceph
namespace: rook-ceph
spec:
cephVersion:
# 最新得 ceph 镜像, 可以查看 https://hub.docker.com/r/ceph/ceph/tags
image: ceph/ceph:v14.2.4-20190917
dataDirHostPath: /data/rook # 主机有效目录
mon:
count: 3
dashboard:
enabled: true
storage:
useAllNodes: true
useAllDevices: false
# 重要: Directories 应该只在预生产环境中使用
directories:
- path: /var/lib/rook
等一会儿后应该能看到一堆的Pod整体的情况应该是这样的
image.png安装 Ceph Dashboard
执行如下的yaml就可以将Dashboard外放出来,这里需要注意在部署cluster.yaml的时候 dashboard.enabled
一定要设置为 true
dashboard:
enabled: true
apiVersion: v1
kind: Service
metadata:
name: rook-ceph-mgr-dashboard-external
namespace: rook-ceph
labels:
app: rook-ceph-mgr
rook_cluster: rook-ceph
spec:
ports:
- name: dashboard
port: 7000
protocol: TCP
targetPort: 7000
nodePort: 30000
selector:
app: rook-ceph-mgr
rook_cluster: rook-ceph
type: NodePort
然后我们就可以通过 http://<NodeIp>:30000 就可以访问到 Dashboard 了。
image.png
这里的密码可以在密文中找到
image.png
$ kubectl -n rook-ceph get secret rook-ceph-dashboard-password -o jsonpath="{['data']['password']}" | base64 --decode && echo
xxxx(登录密码)
存储
对于 Rook 暴露的三种存储类型可以查看对应的文档:
网友评论