一、安装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)】

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

一直点击【下一步】


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

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

点击【确定】

添加完成后,开机验证查看输出中 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

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