Ceph是一种高度可扩展的分布式存储解决方案,提供对象、文件和块存储。在每一个存储节点上,您将找到Ceph存储对象的文件系统和Ceph OSD(对象存储守护程序)进程。在Ceph集群上,您还能够找到Ceph MON(监控)守护程序,它们确保Ceph集群保持高可用性。git
Rook
Rook 是一个开源的cloud-native storage编排, 提供平台和框架;为各类存储解决方案提供平台、框架和支持,以便与云原生环境本地集成。
Rook 将存储软件转变为自我管理、自我扩展和自我修复的存储服务,它经过自动化部署、引导、配置、置备、扩展、升级、迁移、灾难恢复、监控和资源管理来实现此目的。
Rook 使用底层云本机容器管理、调度和编排平台提供的工具来实现它自身的功能。
Rook 目前支持Ceph、NFS、Minio Object Store和CockroachDB。github
1.已有一个能够正常跑应用的k8s集群json
2.在集群中至少有三个节点可用,知足ceph高可用要求,而且服务器具有一块未格式化未分区的硬盘。api
3.rook-ceph项目地址:https://github.com/rook/rookbash
https://github.com/rook/rook/blob/master/Documentation/ceph-quickstart.md 部署文档服务器
4.rook使用存储方式并发
rook默认使用全部节点的全部资源,rook operator自动在全部节点上启动OSD设备,Rook会用以下标准监控并发现可用设备:app
须要用到的镜像,部署服务前首先得将镜像导入 rook/ceph:v1.4.1 ceph/ceph:v15.2.4 quay.io/cephcsi/cephcsi:v3.1.0 #github clone项目部署文件,能够指定不一样的版本,若是不指定默认则克隆Master分支测试1.4.1版本pv能够动态建立 git clone --single-branch --branch v1.4.1 https://github.com/rook/rook.git #移动到项目目录下 cd rook/cluster/examples/kubernetes/ceph #全部的pod都会在rook-ceph命名空间下建立 kubectl create -f common.yaml #部署Rook操做员 kubectl create -f operator.yaml #建立Rook Ceph集群 kubectl create -f cluster.yaml #部署Ceph toolbox 命令行工具 #默认启动的Ceph集群,是开启Ceph认证的,这样你登录Ceph组件所在的Pod里,是无法去获取集群状态,以及执行CLI命令,这时须要部署Ceph toolbox,命令以下 kubectl create -f toolbox.yaml #进入ceph tool容器 kubectl exec -it pod/rook-ceph-tools-545f46bbc4-qtpfl -n rook-ceph bash #查看ceph状态 ceph status #至此已经部署完成了,查看rook-ceph命名空间下的pod,首先看pod的状况,有operator、mgr、agent、discover、mon、osd、tools,且osd-prepare是completed的状态,其它是running的状态:
#暴露方式有多种选择适合本身的一个便可 https://github.com/rook/rook/blob/master/Documentation/ceph-dashboard.md #执行完cluster.yaml后rook会自动帮咱们建立ceph的Dashboard,pod及service以下图,默认dashboard为ClusterIP,须要咱们改成NodePort对外暴露服务。 kubectl edit svc rook-ceph-mgr-dashboard -n rook-ceph
访问地址,注意是https,http会访问不成功 https://192.168.10.215:32111/#/dashboard 默认用户名为 admin 密码获取方式执行以下命令 kubectl -n rook-ceph get secret rook-ceph-dashboard-password -o jsonpath="{['data']['password']}" | base64 --decode && echo Ceph Dashboard首页,点击首页小齿轮修改admin的密码
1.安装rbd插件storageclass kubectl apply -f /opt/k8s-install-tool/rook-ceph/rook/cluster/examples/kubernetes/ceph/csi/rbd/storageclass.yaml 2.查看建立rbd结果 kubectl get storageclasses.storage.k8s.io
3.建立pvc指定storageClassName为rook-ceph-block框架
1.安装cephfs元数据存储池及插件storageclass kubectl apply -f /opt/k8s-install-tool/rook-ceph/rook/cluster/examples/kubernetes/ceph/filesystem.yaml kubectl apply -f /opt/k8s-install-tool/rook-ceph/rook/cluster/examples/kubernetes/ceph/csi/cephfs/storageclass.yaml 2.以pod的形式部署在rook-ceph命名空间中,会有两个pod。 kubectl -n rook-ceph get pod -l app=rook-ceph-mds NAME READY STATUS RESTARTS AGE rook-ceph-mds-myfs-a-6b9cc74d4d-tgvv6 1/1 Running 0 14m rook-ceph-mds-myfs-b-6b885f5884-qw8tk 1/1 Running 0 14m 3.查看建立rbd结果 kubectl get storageclasses.storage.k8s.io NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE rook-ceph-block rook-ceph.rbd.csi.ceph.com Delete Immediate true 18h rook-cephfs rook-ceph.cephfs.csi.ceph.com Delete Immediate true 13m 4.cephfs使用和rbd同样指定storageClassName的值便可,须要注意的是rbd只支持ReadWriteOnce,cephfs能够支持ReadWriteMany。 apiVersion: v1 kind: PersistentVolumeClaim metadata: namespace: default name: "airflow-service-log-pvc" spec: accessModes: #- ReadWriteOnce - ReadWriteMany resources: requests: storage: 2Gi storageClassName: rook-cephfs 知识点: pv的三种访问模式 ReadWriteOnce,RWO,仅可被单个节点读写挂载 ReadOnlyMany,ROX,可被多节点同时只读挂载 ReadWriteMany,RWX,可被多节点同时读写挂载 pv回收策略 Retain,保持不动,由管理员手动回收 Recycle,空间回收,删除全部文件,仅NFS和hostPath支持 Delete,删除存储卷,仅部分云端存储支持