使用rook部署ceph集群

rook介绍

rook是一个开源的云原生存储编排工具,rook将分布式存储系统转变为自我管理、自我扩展、自我修复的存储服务。它自动执行存储管理员的任务:部署、引导、配置、置备、扩展、升级、迁移、灾难恢复、监视和资源管理。

rook利用Kubernetes平台的强大功能,通过Kubernetes Operator为每个存储提供商提供服务。rook目前支持Ceph、NFS、Minio Object Store和CockroachDB。

file

部署rook

下载rook并部署

git clone https://github.com/rook/rook.git
cd rook/deploy/examples
kubectl apply -f crds.yaml -f common.yaml -f operator.yaml

file

查看rook部署情况

注意我的ecs是香港的,如果是国内的需要修改operator.yaml中的镜像,否则k8s.gcr.io或者quay.io是无法访问的,也可以参考这里的方法下载到dockerhub等镜像仓库中。

kubectl get all -n rook-ceph

file

部署ceph

创建osd会挂载数据盘,所以ecs需要挂载一块空盘,不要mount。

file

cd rook/deploy/examples
kubectl apply -f cluster.yaml
kubectl get po -n rook-ceph

file

部署rook-ceph-tools

ceph-tools是用来调试和测试ceph的常用工具容器,可以执行ceph命令来查看ceph集群状态。

cd rook/deploy/examples
kubectl apply -f toolbox.yaml
kubectl get po -n rook-ceph

file

进入tools容器,执行ceph命令。

kubectl -n rook-ceph exec -it $(kubectl -n rook-ceph get pod -l "app=rook-ceph-tools" -o jsonpath='{.items[0].metadata.name}') -- bash

ceph status
ceph osd status
ceph df
rados df

file

可以看到所有mons应该达到法定数量,mgr 应该是激活状态,至少有一个 OSD 处于激活状态。

file

部署ceph-dashboard

ceph有一个dashboard工具,我们可以在上面查看集群的状态,包括总体运行状态,mgr、osd 和其他ceph进程的状态,查看池和PG状态,以及显示守护进程的日志等等。

在cluster.yaml中,设置dashboard.enable=true即可,这样 Rook Operator就会启用ceph-mgr dashboard模块,创建一个service来暴露该服务。

kubectl get svc -n rook-ceph

file

我的ecs是公网的,没有多余的域名,所以采用NodePort方式访问,如果有域名或者本地测试的话可以使用ingress。下面修改svc,添加安全组规则。

kubectl edit svc rook-ceph-mgr-dashboard -n rook-ceph

file

这里会无法访问,因为使用了ssl的8443端口,修改cluster.yaml,将ssl改为false,port改为7000。如果通过反向代理访问dashboard,可以设置 urlPrefix。
file

file

由于ceph是通过opreator来安装的,所以修改svc过一会会自动还原。。。创建一个dashboard-svc.yaml

apiVersion: v1
kind: Service
metadata:
  name: rook-ceph-mgr-dashboard-nodeport
  namespace: rook-ceph
  labels:
    app: rook-ceph-mgr
    rook_cluster: rook-ceph
    # 这个label需要看你的pod实际的label,也可以对照默认创建的svc中的laebel来修改
    ceph_daemon_id: b
spec:
  ports:
  - name: dashboard
    port: 7000
    protocol: TCP
    targetPort: 7000
  selector:
    app: rook-ceph-mgr
    rook_cluster: rook-ceph
    ceph_daemon_id: b
  type: NodePort

kubectl apply -f dashboard-svc.yaml

file

file

访问ip:30724

file

用户名为admin,密码需要通过secret来获取。

kubectl -n rook-ceph get secret rook-ceph-dashboard-password -o jsonpath="{['data']['password']}" | base64 --decode && echo

查看dashboard

file

通过CephFilesystem方式挂载到ceph

file
当前是没有filesystem的,先创建文件系统,

kubectl apply -f examples/filesystem.yaml

file

可以看到创建了myfs的filesystem,这2个pod所在节点上的crashcollector也会重启。
file

file

在dashboard中可以看到创建了2个pools,一个是用于数据myfs-replicated,一个用于元数据myfs-metadata。

file

也可以通过ceph-tools容器中的ceph命令查看:

kubectl exec -it rook-ceph-tools-79bc54b8d8-jw6hv -n rook-ceph -- ceph fs ls

file

创建storageclass来使用这个filesystem。

kubectl apply -f deploy/examples/csi/cephfs/storageclass.yaml
kubectl get sc

file

创建pvc绑定sc。

kubectl apply -f deploy/examples/csi/cephfs/pvc.yaml
kubectl get pvc

file

创建pod挂载pvc。

kubectl apply -f deploy/examples/csi/cephfs/pod.yaml
kubectl get po
kubectl exec -it csicephfs-demo-pod -- df -h

file

可以看到/var/lib/www/html的filesystem为rook-ceph-mon,证明ceph可以正常挂载。同时在dashboard中也可以看到myfs多了一个client,root为pod挂载的目录。

file

通过RBD方式挂载到ceph

同样的创建sc,pvc,pod

cd deploy/examples/csi/rbd
kubectl apply -f storageclass.yaml
kubectl apply -f pvc.yaml
# 这里需要修改pod的名字,如果你没有删除上面的filesystem pod。
kubectl apply -f pod.yaml
kubectl get sc
kubectl get po,pvc
kubectl exec -it csi-rbd-pod -- df -h

file

可以看到pod中filesystem为/dev/rbd0

file

同时dashborad可以在block查看到一个image。

file

pool中也有一个replicapool。

file

0 0 投票数
文章评分
订阅评论
提醒
guest

0 评论
最旧
最新 最多投票
内联反馈
查看所有评论

相关文章

开始在上面输入您的搜索词,然后按回车进行搜索。按ESC取消。

返回顶部
0
希望看到您的想法,请您发表评论x