1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > k8s 集群部署rook-ceph存储系统及使用

k8s 集群部署rook-ceph存储系统及使用

时间:2019-09-04 13:53:31

相关推荐

k8s 集群部署rook-ceph存储系统及使用

一、Rook 、ceph简介

Ceph分布式存储系统

Ceph是一种高度可扩展的分布式存储解决方案,提供对象、文件和块存储。在每个存储节点上,您将找到Ceph存储对象的文件系统和Ceph OSD(对象存储守护程序)进程。在Ceph集群上,您还可以找到Ceph MON(监控)守护程序,它们确保Ceph集群保持高可用性。

Rook

Rook 是一个开源的cloud-native storage编排, 提供平台和框架;为各种存储解决方案提供平台、框架和支持,以便与云原生环境本地集成。

Rook 将存储软件转变为自我管理、自我扩展和自我修复的存储服务,它通过自动化部署、引导、配置、置备、扩展、升级、迁移、灾难恢复、监控和资源管理来实现此目的。

Rook 使用底层云本机容器管理、调度和编排平台提供的工具来实现它自身的功能。

Rook 目前支持Ceph、NFS、Minio Object Store和CockroachDB。

二、前期准备

1.已有一个可以正常跑应用的k8s集群

2.在集群中至少有三个节点可用,满足ceph高可用要求,并且服务器具备一块未格式化未分区的硬盘。

3.rook-ceph项目地址:/rook/rook

/rook/rook/blob/master/Documentation/ceph-quickstart.md 部署文档

4.rook使用存储方式

rook默认使用所有节点的所有资源,rook operator自动在所有节点上启动OSD设备,Rook会用如下标准监控并发现可用设备:

设备没有分区设备没有格式化的文件系统Rook不会使用不满足以上标准的设备。另外也可以通过修改配置文件,指定哪些节点或者设备会被使用。

三、部署Rook Operator

需要用到的镜像,部署服务前首先得将镜像导入rook/ceph:v1.4.1ceph/ceph:v15.2.4quay.io/cephcsi/cephcsi:v3.1.0#github clone项目部署文件,可以指定不同的版本,如果不指定默认则克隆Master分支测试1.4.1版本pv可以动态创建git clone --single-branch --branch v1.4.1 /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的状态:

#暴露方式有多种选择适合自己的一个即可/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

四、访问Web Ceph Dashboard

访问地址,注意是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 && echoCeph Dashboard首页,点击首页小齿轮修改admin的密码

五、ceph分布式存储使用

RBD

1.安装rbd插件storageclasskubectl apply -f /opt/k8s-install-tool/rook-ceph/rook/cluster/examples/kubernetes/ceph/csi/rbd/storageclass.yaml2.查看创建rbd结果kubectl get storageclasses.storage.k8s.io

3.创建pvc指定storageClassName为rook-ceph-block

CEPHFS安装使用

1.安装cephfs元数据存储池及插件storageclasskubectl apply -f /opt/k8s-install-tool/rook-ceph/rook/cluster/examples/kubernetes/ceph/filesystem.yamlkubectl apply -f /opt/k8s-install-tool/rook-ceph/rook/cluster/examples/kubernetes/ceph/csi/cephfs/storageclass.yaml2.以pod的形式部署在rook-ceph命名空间中,会有两个pod。kubectl -n rook-ceph get pod -l app=rook-ceph-mdsNAMEREADY STATUS RESTARTS AGErook-ceph-mds-myfs-a-6b9cc74d4d-tgvv6 1/1Running 014mrook-ceph-mds-myfs-b-6b885f5884-qw8tk 1/1Running 014m3.查看创建rbd结果kubectl get storageclasses.storage.k8s.ioNAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGErook-ceph-block rook-ceph.rbd.DeleteImmediate true 18hrook-cephfs rook-ceph.cephfs. DeleteImmediate true 13m4.cephfs使用和rbd一样指定storageClassName的值即可,需要注意的是rbd只支持ReadWriteOnce,cephfs可以支持ReadWriteMany。apiVersion: v1kind: PersistentVolumeClaimmetadata:namespace: defaultname: "airflow-service-log-pvc"spec:accessModes:#- ReadWriteOnce- ReadWriteManyresources:requests:storage: 2GistorageClassName: rook-cephfs知识点:pv的三种访问模式ReadWriteOnce,RWO,仅可被单个节点读写挂载ReadOnlyMany,ROX,可被多节点同时只读挂载ReadWriteMany,RWX,可被多节点同时读写挂载pv回收策略Retain,保持不动,由管理员手动回收Recycle,空间回收,删除所有文件,仅NFS和hostPath支持Delete,删除存储卷,仅部分云端存储支持

六、故障修复

1rook-ceph-crashcollector-k8s-master3-offline-217-d9ff847442ng7p 一直处于init状态,输入命令查看pod启动状态 kubectl describe pod rook-ceph-crashcollector-k8s-master3-offline-217-d9ff847442ng7p -n rook-ceph报错信息如下:MountVolume.SetUp failed for volume "rook-ceph-crash-collector-keyring" : secret "rook-ceph-crash-collector-keyring" not foun修复过程:删除集群 kubectl delete -f cluster.yaml之后会一直卡在删除的阶段。kubectl edit customresourcedefinitions.apiextensions.k8s.io cephclusters.ceph.rook.io 删除文件中状态两行每个节点都需要执行rm -rf /var/lib/rook/*rm -rf /var/lib/kubelet/plugins/rook-ceph.*rm -rf /var/lib/kubelet/plugins_registry/rook-ceph.*重新安装,再次查看kubectl create -f common.yamlkubectl create -f operator.yamlkubectl create -f cluster.yaml

2.现象:rook-ceph部分容器为一直创建的状态排查过程:查看pod状态后发现缺少rook-ceph-csi-config文件,github相关资料/rook/rook/issues/6162。大概原因是由于服务器重启或者是服务器发生抖动,导致pod飘逸重建。重建失败解决方法:kubectl delete -f rook/cluster/examples/kubernetes/ceph/operator.yaml kubectl apply -f rook/cluster/examples/kubernetes/ceph/common.yamlkubectl apply -f rook/cluster/examples/kubernetes/ceph/operator.yaml3.清理ceph集群每个节点都需要执行rm -rf /var/lib/rook/*rm -rf /var/lib/kubelet/plugins/rook-ceph.*rm -rf /var/lib/kubelet/plugins_registry/rook-ceph.*https://rook.io/docs/rook/v1.4/ceph-teardown.html

七、ceph 历史报错回收

使用ceph -s查看集群状态,发现一直有如下报错,且数量一直在增加

经查当前系统运行状态正常,判断这里显示的应该是历史故障,处理方式如下:

查看历史crashceph crash ls-new根据ls出来的id查看详细信息ceph crash info <crash-id>将历史crash信息进行归档,即不再显示ceph crash archive <crash-id>归档所有信息ceph crash archive-all

八、ceph基础运维命令

进入rook-ceph命令行工具podkubectl exec -it rook-ceph-tools-6bdcd78654-tvl5j bash -n rook-ceph检查Ceph集群状态ceph -s如果需要实时观察Ceph集群状态变化,可使用如下命令ceph -w 检查集群容量使用情况ceph df查看集群OSD配置ceph osd df查看OSD在集群布局中的设计分布ceph osd tree列式pool列表ceph osd lspools

九、rook-ceph开启S3 API接口

创建过程:cd /opt/k8s-install/rook/cluster/examples/kubernetes/ceph创建对象存储,Rook操作员将创建启动服务所需的所有池和其他资源。这可能需要三四分钟才能完成kubectl create -f object.yaml kubectl -n rook-ceph get pod -l app=rook-ceph-rgw创建存储桶,客户端可以在其中读取和写入对象。可以通过定义存储类来创建存储桶,类似于块存储和文件存储所使用的模式。首先,定义允许对象客户端创建存储桶的存储类。存储类定义对象存储系统,存储桶保留策略以及管理员所需的其他属性kubectl create -f storageclass-bucket-delete.yaml 创建申请声明。基于此存储类,对象客户端现在可以通过创建对象存储桶声明(OBC)来请求存储桶。创建OBC后,Rook-Ceph存储桶配置程序将创建一个新存储桶。请注意,OBC引用了上面创建的存储类。kubectl create -f object-bucket-claim-delete.yaml 创建集群外部访问Rook设置了对象存储,因此Pod可以访问群集内部。如果您的应用程序在集群外部运行,则需要通过来设置外部服务NodePort。首先,请注意将RGW公开到群集内部的服务。我们将保留该服务不变,并为外部访问创建一个新服务。创建之前修改rgw-external.yaml,配置一个固定的nodeport端口例如38000kubectl create -f rgw-external.yaml 创建一个用户 如果您需要创建一组独立的用户凭据来访问S3端点,请创建一个CephObjectStoreUser。该用户将使用S3 API连接到集群中的RGW服务。用户将独立于您可能在本文档前面的说明中创建的任何对象存储桶声明。kubectl create -f object-user.yaml 获取用户的AccessKey和SecretKey这里建议先print 打印出来,之后再echo "xxxx" | base64 --decodekubectl -n rook-ceph get secret rook-ceph-object-user-my-store-my-user -o yaml | grep AccessKey | awk '{print $2}' | base64 --decode kubectl -n rook-ceph get secret rook-ceph-object-user-my-store-my-user -o yaml | grep SecretKey | awk '{print $2}' | base64 --decode最终提供访问的地址及认证信息例如:access_key = 'BMXG3WP8JA9D1GSD2AJJ'secret_key = 'vl32x2t0sBxy0BEgcY9Iz442HK2HobPTNw4T99yK'host = '192.168.10.237:38000'

十、rook-ceph1.4.1 升级到1.4.8

步骤很简单只需要导入两个镜像,之后重新apply operator.yaml即可,rook会自动检查并升级重启docker load -i cephcsi.tardocker load -i rook-ceph.tarkubectl apply -f operator.yaml

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。