1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > 使用rook在kubernetes集群中部署ceph

使用rook在kubernetes集群中部署ceph

时间:2022-05-17 16:10:33

相关推荐

使用rook在kubernetes集群中部署ceph

Rook是一款用于将Ceph部署到Kubernetes集群中的工具。

目录

环境信息

部署要求

osd节点需要准备好数据盘

下载LVM2

加载rbd内核

升级内核

取消master污点

下载rook

拉取镜像

部署rook operator

部署ceph集群

部署ceph工具

部署ceph-dashboard

环境信息

kubernetes: v1.23.5rook: v1.11.1

目前rook最新版为v1.11.1,支持kubernetes v1.21及以上版本

部署要求

osd节点需要准备好数据盘

#数据盘可以是一块硬盘sdb,也可以是硬盘的一个分区sdb2,或者是逻辑卷,但是这些都必须没有被格式过,没有指定文件系统类型。#可以使用lsblk -f 来确认数据盘有没有被文件系统格式化过。FSTYPE字段为空即代表未被文件系统格式化过。#如下所示,vdb可以作为ceph的数据盘。[root@master ~]# lsblk -fNAME FSTYPE LABEL UUID MOUNTPOINTsr0 iso9660 config-2 -05-08-09-42-28-00vda ├─vda1 xfs 624b9bfb-904e-4d69-b7e0-cf598f443497 /boot└─vda2 xfs 974b2a82-1668-42c8-a4b6-bb1d24eada2f /vdb

下载LVM2

#Ceph OSD 在某些情况下(比如启用加密或指定元数据设备)依赖于 LVM(Logical Volume Manager)。如果没有安装 LVM2 软件包,则虽然 Rook 可以成功创建 Ceph OSD,但是当节点重新启动时,重新启动的节点上运行的 OSD pod 将无法启动。yum -y install lvm2

加载rbd内核

#Ceph 存储需要包含了 RBD 模块的 Linux 内核来支持。在使用 Kubernetes 环境中运行 Ceph 存储之前,需要在 Kubernetes 节点上运行 modprobe rbd 命令来测试当前内核中是否已经加载了 RBD 内核。#查看内核有没有加载rbd模块#如下所示代表已加载lsmod | grep rbd[root@master ~]# lsmod | grep rbdrbd83640 0 libceph306625 1 rbd#如未加载可手动加载rbd内核模块modprobe rbd

升级内核

如果需要使用文件存储CephFS,则需要将操作系统内核版本升级到4.17以上。#查看内核版本#uname -r升级到最新稳定版:6.4.6-1.el7.elrepo.x86_64rpm --import /RPM-GPG-KEY-rpm -Uvh /elrepo-release-7.0-3.el7.elrepo.noarch.rpmyum install --enablerepo=elrepo-kernel kernel-ml -ygrub2-mkconfig -o /boot/grub2/grub.cfggrub2-set-default 0reboot

取消master污点

由于ceph集群默认最小三个节点,当前kubernetes也是三节点,1个master+2个worker,所以需要使用master节点来充当ceph节点,因此需要取消master节点上的污点,否是ceph相关pod无法调度到master节点,导致部署失败。

如果worker节点足够则无需此操作。

#获取 Kubernetes 集群中所有节点的 Taint 信息,输出的格式是 YAML 格式,其中用到了 grep 和 -A 两个命令参数。grep 用于过滤包含字符串 "taint" 的行,-A 参数后面跟的数字表示显示匹配行输出后多少行的内容,因此 -A 5 表示匹配行向下再显示 5 行内容,以显示与 Taint 相关的属性信息。kubectl get no -o yaml | grep taint -A 5#默认在master节点上会有名为node-role.kubernetes.io/master-的污点,使用该命令可以取消所有节点上的node-role.kubernetes.io/master-污点kubectl taint nodes --all node-role.kubernetes.io/master-

下载rook

git clone --single-branch --branch v1.11.5 /rook/rook.git

拉取镜像

cd rook/deploy/examples#查看部署所需要的镜像提前拉取cat images.txtrook/ceph:v1.11.5quay.io/ceph/ceph:v17.2.6quay.io/cephcsi/cephcsi:v3.8.0quay.io/csiaddons/k8s-sidecar:v0.5.0registry.k8s.io/sig-storage/csi-attacher:v4.1.0registry.k8s.io/sig-storage/csi-node-driver-registrar:v2.7.0registry.k8s.io/sig-storage/csi-provisioner:v3.4.0registry.k8s.io/sig-storage/csi-resizer:v1.7.0registry.k8s.io/sig-storage/csi-snapshotter:v6.2.1docker pull rook/ceph:v1.11.5docker pull quay.io/ceph/ceph:v17.2.6docker pull quay.io/cephcsi/cephcsi:v3.8.0docker pull quay.io/csiaddons/k8s-sidecar:v0.5.0 #如果拉不下去可使用以下脚本#该脚本从阿里云镜像仓库拉取到本地,docker image tag为原镜像,再删除从阿里云拉取的镜像。#!/bash/binimage_list=(csi-node-driver-registrar:v2.7.0csi-attacher:v4.1.0csi-snapshotter:v6.2.1csi-resizer:v1.7.0csi-provisioner:v3.4.0)aliyuncs="/it00021hot"google_gcr="registry.k8s.io/sig-storage"for image in ${image_list[*]}dodocker image pull ${aliyuncs}/${image}docker image tag ${aliyuncs}/${image} ${google_gcr}/${image}docker image rm ${aliyuncs}/${image}echo "${aliyuncs}/${image} ${google_gcr}/${image} downloaded."done

部署rook operator

kubectl create -f crds.yaml -f common.yaml -f operator.yamlkubectl -n rook-ceph get pod

部署ceph集群

kubectl create -f cluster.yaml#如下图所示代表部署完成ceph-osd-prepare 是job 所以状态是compute

部署ceph工具

cd rook/deploy/examples/kubectl apply -f toolbox.yaml

kubectl exec -it rook-ceph-tools-598b59df89-kqjr9 -n rook-ceph -- bash[root@master examples]# kubectl exec -it rook-ceph-tools-598b59df89-kqjr9 -n rook-ceph -- bashbash-4.4$ ceph -scluster:id:d5215f94-1830-4e95-96b7-d2ddbd6302dahealth: HEALTH_OKservices:mon: 3 daemons, quorum a,b,c (age 4m)mgr: b(active, since 2m), standbys: aosd: 6 osds: 6 up (since 2m), 6 in (since 3m)data:pools: 1 pools, 1 pgsobjects: 2 objects, 449 KiBusage: 122 MiB used, 180 GiB / 180 GiB availpgs:1 active+cleanbash-4.4$ ceph osd treeID CLASS WEIGHT TYPE NAME STATUS REWEIGHT PRI-AFF-1 0.17578 root default-7 0.06839host master 1 hdd 0.04880osd.1 up 1.00000 1.000003 hdd 0.00980osd.3 up 1.00000 1.000005 hdd 0.00980osd.5 up 1.00000 1.00000-5 0.05859host node1 2 hdd 0.04880osd.2 up 1.00000 1.000004 hdd 0.00980osd.4 up 1.00000 1.00000-3 0.04880host node2 0 hdd 0.04880osd.0 up 1.00000 1.00000bash-4.4$ ceph osd statusID HOSTUSED AVAIL WR OPS WR DATA RD OPS RD DATA STATE0 node2 21.0M 49.9G0 0 0 0 exists,up 1 master 19.6M 49.9G0 0 0 0 exists,up 2 node1 20.9M 49.9G0 0 0 0 exists,up 3 master 19.6M 9.98G0 0 0 0 exists,up 4 node1 19.7M 9.98G0 0 0 0 exists,up 5 master 20.8M 9.97G0 0 0 0 exists,up bash-4.4$ ceph osd pool ls.mgrbash-4.4$

部署ceph-dashboard

kubectl create -f dashboard-external-https.yamlkubectl get svc -n rook-ceph#删除原有的dashboard servicekubectl delete svc/rook-ceph-mgr-dashboard -n rook-ceph访问地址:https://172.31.246.53:32326用户名默认是admin,密码6^A%m-ZI=0k&rCg(08L-密码可以通过以下代码获取:kubectl -n rook-ceph get secret rook-ceph-dashboard-password -o jsonpath="{['data']['password']}"|base64 --decode && echo[root@master examples]# kubectl create -f dashboard-external-https.yamlservice/rook-ceph-mgr-dashboard-external-https created[root@master examples]# kubectl get svc -n rook-cephNAME TYPE CLUSTER-IPEXTERNAL-IP PORT(S) AGErook-ceph-mgr ClusterIP 10.10.226.83 <none> 9283/TCP 6m32srook-ceph-mgr-dashboard ClusterIP 10.10.205.62 <none> 8443/TCP 6m32srook-ceph-mgr-dashboard-external-https NodePort 10.10.157.25 <none> 8443:32326/TCP4srook-ceph-mon-aClusterIP 10.10.97.117 <none> 6789/TCP,3300/TCP 7m48srook-ceph-mon-bClusterIP 10.10.174.129 <none> 6789/TCP,3300/TCP 7m21srook-ceph-mon-cClusterIP 10.10.186.23 <none> 6789/TCP,3300/TCP 7m9s[root@master examples]#

接下来,我们将使用这个ceph集群用于kubernetes集群的持久化存储,存储方式为存储类storageclass,详情请见:使用ceph作为kubernetes集群的持久化存储(storageclass)

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