一、安装Ceph集群

Rook支持K8S v1.19+的版本,CPU架构为amd64、x86_64或arm64均可。 通过rook安装ceph集群 必须满足以下先决条件:

  • 至少准备3个节点、并且全部可以调度pod,满足ceph副本高可用要求
  • 已部署好的 Kubernetes集群 ( ✅ )
  • OSD节点每个节点至少有一块裸设备(Raw devices,未分区未进行文件系统格式化)( ✅ )
节点名称 节点IP 操作系统 裸设备
master03 10.0.0.64 Centos7 sdb
node01 10.0.0.61 Centos7 sdb
node02 10.0.0.62 Centos7 sdb

1.1 部署Rook1.17准备工作

1、为K8S集群的 master03、node01、node02节点 添加一块额外的未格式化磁盘(裸设备)

点击【硬盘(SCSI)】

Day02-持久化存储NFS和CEPH-图3

点击【硬盘】-【下一步】

Day02-持久化存储NFS和CEPH-图4

一直点击【下一步】

Day02-持久化存储NFS和CEPH-图5

Day02-持久化存储NFS和CEPH-图6

大小设置为40G,点击【下一步】

Day02-持久化存储NFS和CEPH-图7

点击【高级】,将新增的磁盘设置成 独立模式 (模拟公有云厂商提供的独立磁盘)

Day02-持久化存储NFS和CEPH-图8

点击【确定】

Day02-持久化存储NFS和CEPH-图9

添加完成后,开机验证查看输出中 sdb 磁盘就是我们为工作节点新添加的裸设备(它的FSTYPE为空),我们可以把它分配给Ceph使用。

[root@master03 ~]# lsblk -f
NAME            FSTYPE      LABEL           UUID                                   MOUNTPOINT
sdb
sr0             iso9660     CentOS 7 x86_64 2020-11-02-15-15-23-00
sda
├─sda2          LVM2_member                 xw1fCc-dkQq-35PD-90j9-kEp8-ClXV-bjHonJ
 ├─centos-swap swap                        28ff0287-9e6b-4002-aa15-7f8ffe0d41b0
 └─centos-root xfs                         8630809d-487a-4943-ace5-ea64c578a891   /
└─sda1          xfs                         1aa09f59-8dbf-4fbd-8529-5deccfab7eca   /boot

[root@node01 ~]# lsblk -f
NAME            FSTYPE      LABEL           UUID                                   MOUNTPOINT
sdb
sr0             iso9660     CentOS 7 x86_64 2020-11-02-15-15-23-00
sda
├─sda2          LVM2_member                 Z1xsAB-buR0-INCG-di3b-wpjs-v9zE-xx9UHT
 ├─centos-swap swap                        1af0358c-608f-4896-892f-56a72303dcf6
 └─centos-root xfs                         d471af16-aa6f-4305-9192-47d1cd6f88c3   /
└─sda1          xfs                         29292adf-5a04-4a5b-b111-8a5f78bfbe44   /boot

[root@node02 ~]# lsblk -f
NAME            FSTYPE      LABEL           UUID                                   MOUNTPOINT
sdb
sr0             iso9660     CentOS 7 x86_64 2020-11-02-15-15-23-00
sda
├─sda2          LVM2_member                 qwFtI2-azdN-3y2L-836W-ePXm-yjxM-0kSxDF
 ├─centos-swap swap                        0d97704a-4598-4bbd-853d-786714d69889
 └─centos-root xfs                         65e7ba91-2a4b-4f98-9a47-419402650812   /
└─sda1          xfs                         0b95e4a7-1ed2-4ca4-ab38-0adac35fd950   /boot

2、修改Rook CSI驱动注册路径(可选)

注意:rook csi驱动挂载的路径是挂载到kubelet所配置的 –root-dir参数指定的目录下的;所以需要根据自己实际的–root-dir参数修改下图中rook csi的kubelet路径地址;如果与实际kubelet的–root-dir路径不一致,则会导致后面进行挂载存储时提示 driver name rook-ceph.cephfs.csi.ceph.com not found in the list of registered CSI driver

默认的安装都是在 /var/lib/kubelet/ 基本上不用修改,如果非默认需要更改

# vim rook/deploy/examples
ROOK_CSI_KUBELET_DIR_PATH

Day02-持久化存储NFS和CEPH-图12

3、在master节点直接应用在线yaml文件,在K8S集群中启用Rook准入控制器。该准入控制器在身份认证和授权之后并在持久化对象之前,拦截发往K8S API Server的请求以进行验证。

# 方式一:在线安装
[root@master01 2]# kubectl apply -f https://github.com/jetstack/cert-manager/releases/download/v1.7.1/cert-manager.yaml

# 方式二:离线安装
[root@master01 2]# kaf cert-manager.yaml

4、对所有需要安装ceph的work节点(master03、node01、node02节点)安装LVM2。在K8S集群中运行Ceph OSD的所有存储节点上都需要有这个包。虽然没有这个包Rook也能够成功创建Ceph OSD,但是当相应的节点(node)重启之后,其上运行的OSD pod将会启动失败。所以需要确保作为存储节点的操作系统上安装了LVM(从上面磁盘条件查验的结果中看到我们是有LVM卷的)。

#开始安装
[root@master03 ~]# yum install lvm2 -y
[root@node01 ~]# yum install lvm2 -y
[root@node02 ~]# yum install lvm2 -y

#检查是否安装成功
[root@master03 ~]# yum list installed | grep lvm2
Repodata is over 2 weeks old. Install yum-cron? Or run: yum makecache fast
lvm2.x86_64                          7:2.02.187-6.el7_9.5            @updates
lvm2-libs.x86_64                     7:2.02.187-6.el7_9.5            @updates
[root@node01 ~]# yum list installed | grep lvm2
Repodata is over 2 weeks old. Install yum-cron? Or run: yum makecache fast
lvm2.x86_64                          7:2.02.187-6.el7_9.5            @updates
lvm2-libs.x86_64                     7:2.02.187-6.el7_9.5            @updates
[root@node02 ~]# yum list installed | grep lvm2
Repodata is over 2 weeks old. Install yum-cron? Or run: yum makecache fast
lvm2.x86_64                          7:2.02.187-6.el7_9.5            @updates
lvm2-libs.x86_64                     7:2.02.187-6.el7_9.5            @updates

5、当前系统内核加载RBD模块,Ceph需要一个带有RBD模块的Linux内核。

#检测当前系统内核有没有加载RBD模块如果该命令返回空那说明当前系统内核没有加载RBD模块
[root@master03 ~]# lsmod | grep rbd
[root@node01 ~]# lsmod | grep rbd
[root@node02 ~]# lsmod | grep rbd

#如果返回为空则需要加载RBD模块
[root@master03 ~]#cat > /etc/sysconfig/modules/rbd.modules << EOF
#!/bin/bash
modprobe rbd
EOF
[root@node01 ~]#cat > /etc/sysconfig/modules/rbd.modules << EOF
#!/bin/bash
modprobe rbd
EOF
[root@node02 ~]#cat > /etc/sysconfig/modules/rbd.modules << EOF
#!/bin/bash
modprobe rbd
EOF
[root@master03 ~]# chmod +x /etc/sysconfig/modules/rbd.modules
[root@node01 ~]# chmod +x /etc/sysconfig/modules/rbd.modules
[root@node02 ~]# chmod +x /etc/sysconfig/modules/rbd.modules

#执行上述脚本(如果返回'notfound',你可能需要安装一个新的内核或重新编译一个带有RBD模块的内核或换一个带有RBD的Linux发行版)
[root@master03 ~]# /bin/bash /etc/sysconfig/modules/rbd.modules
[root@node01 ~]# /bin/bash /etc/sysconfig/modules/rbd.modules
[root@node02 ~]# /bin/bash /etc/sysconfig/modules/rbd.modules

#再次检测当前系统内核有没有加载RBD模块如果该命令返回空那说明当前系统内核没有加载RBD模块
[root@master03 ~]# lsmod | grep rbd
rbd                    90112  0
libceph               319488  1 rbd
[root@node01 ~]# lsmod | grep rbd
rbd                    90112  0
libceph               319488  1 rbd
[root@node02 ~]# lsmod | grep rbd
rbd                    90112  0
libceph               319488  1 rbd