环境规划
|
主机名 |
IP |
角色 |
数据磁盘 |
|
master |
192.168.137.101 |
k8s maste |
30G硬盘 |
|
node 1 |
192.168.137.102 |
k8s worker、ceph osd |
30G硬盘 |
|
node2 |
192.168.137.103 |
k8s worker、ceph osd |
30G硬盘 |
|
node3 |
192.168.137.104
|
k8s worker、ceph osd |
30G硬盘 |
|
Vip |
192.168.137.88 |
负载 |
|
准备工作
准备工作在所有worker节点上做操作
数据盘准备,除了sda是装了操作系统之外,sdb是用于osd盘的,不能被格式化文件系统
[root@Node1 ~]# lsblk -f
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 80G 0 disk
├─ sda1 8:1 0 400M 0 part /boot
└─ sda2 8:2 0 75G 0 part
├─ centos-root 253:0 0 65G 0 lvm /
└─ centos-swap 253:1 0 10G 0 lvm
sdb 8:16 0 30G 0 disk
命令输出中 sdb 磁盘就是我们为工作节点新添加的裸设备(它的FSTYPE为空),我们可以把它分配给Ceph使用
另外,Ceph OSD在以下情况下需要依赖于LVM(逻辑卷,OSD是Ceph用于在各个存储节点实现存储功能的组件):
1. 在裸设备或裸分区上创建OSD
2. 如果启用了加密(在集群CR中设置了encryptedDevice: "true")
3. 指定了元数据设备(metadata device)
在以下情况下OSD不需要LVM
在使用 storageClassDeviceSets 的PVC上创建OSD
一、安装lvm2 如果在裸设备或未使用的分区上创建OSD,则Ceph OSD具有对LVM(逻辑卷管理)的依赖:
yum install -y lvm2
二、Ceph需要一个带有RBD模块的Linux内核。大多数Linux发行版都有这个模块检查
lsmod|grep rbd
用以下命令尝试加载RBD模块
# 将RBD模块加载命令放入开机加载项里
cat > /etc/sysconfig/modules/rbd.modules << EOF
#!/bin/bash
modprobe rbd
EOF
# 为上述为脚本添加执行权限
chmod +x /etc/sysconfig/modules/rbd.modules
# 执行上述脚本(如果返回'not found',你可能需要安装一个新的内核、或重新编译一个带有RBD模块的内核、或换一个带有RBD的Linux 发行版)
/bin/bash /etc/sysconfig/modules/rbd.modules
# 查看RBD模块是否加载成功
lsmod|grep rbd
部署ceph集群
- 部署Rook Operator
git clone --single-branch --branch v1.11.2 https://github.com/rook/rook.git
接下来部署Rook Operator组件,该组件为Rook与Kubernetes交互的组件,整个集群只需要一个副本,特别注意 Rook Operator 的配置在Ceph集群安装后不能修改,否则Rook会删除Ceph集群并重建,所以部署之前一定要做好规划,修改好operator.yaml的相关配置:
修改 rook/deploy/examples/operator.yaml文件中的以下内容:
ROOK_CSI_CEPH_IMAGE: "quay.mirrors.ustc.edu.cn/cephcsi/cephcsi:v3.7.2"
ROOK_CSI_REGISTRAR_IMAGE: "registry.aliyuncs.com/google_containers/csi-node-driver-registrar:v2.7.0"
ROOK_CSI_RESIZER_IMAGE: "registry.aliyuncs.com/google_containers/csi-resizer:v1.7.0"
ROOK_CSI_PROVISIONER_IMAGE: "registry.aliyuncs.com/google_containers/csi-provisioner:v3.4.0"
ROOK_CSI_SNAPSHOTTER_IMAGE: "registry.aliyuncs.com/google_containers/csi-snapshotter:v6.2.1"
ROOK_CSI_ATTACHER_IMAGE: "registry.aliyuncs.com/google_containers/csi-attacher:v4.1.0"
确认修改完成后,在master节点上执行以下命令进行Rook Ceph Operator的部署:
kubectl create -f crds.yaml -f common.yaml -f operator.yaml
# 在继续操作之前,验证 rook-ceph-operator 是否正常运行
kubectl get deployment -n rook-ceph
kubectl get pod -n rook-ceph
修改 rook/deploy/examples/cluster.yaml文件中的以下内容: # nodes below will be used as storage resources. Each node's 'name' field should match their 'kubernetes.io/hostname' label.
nodes:
- name: "node1"
devices: # specific devices to use for storage can be specified for each node
- name: "sdb"
- name: "node2"
devices: # specific devices to use for storage can be specified for each node
- name: "sdb"
- name: "node3"
devices: # specific devices to use for storage can be specified for each node
- name: "sdb"
# - name: "172.17.4.201"
执行kubectl create -f cluster.yaml
创建后查看,请确保所有Pod处于Running,OSD POD处于Completed:
2. 验证ceph集群
要验证群集是否处于正常状态,可以连接到 toolbox 工具箱并运行命令
kubectl create -f toolbox.yaml
kubectl exec -it rook-ceph-tools-54bdbfc7b7-q748s -n rook-ceph -- bash
bash-4.4$
bash-4.4$
bash-4.4$ ceph osd status
ID HOST USED AVAIL WR OPS WR DATA RD OPS RD DATA STATE
0 node2 6516k 29.9G 0 0 0 0 exists,up
1 node1 6196k 29.9G 0 0 0 0 exists,up
2 node3 6196k 29.9G 0 0 0 0 exists,up
bash-4.4$
bash-4.4$ ceph df
--- RAW STORAGE ---
CLASS SIZE AVAIL USED RAW USED %RAW USED
hdd 90 GiB 90 GiB 18 MiB 18 MiB 0.02
TOTAL 90 GiB 90 GiB 18 MiB 18 MiB 0.02
--- POOLS ---
POOL ID PGS STORED OBJECTS USED %USED MAX AVAIL
.mgr 1 1 449 KiB 2 1.3 MiB 0 28 GiB
bash-4.4$ rados df
POOL_NAME USED OBJECTS CLONES COPIES MISSING_ON_PRIMARY UNFOUND DEGRADED RD_OPS RD WR_OPS WR USED COMPR UNDER COMPR
.mgr 1.3 MiB 2 0 6 0 0 0 178 276 KiB 133 1.3 MiB 0 B 0 B
total_objects 2
total_used 18 MiB
total_avail 90 GiB
total_space 90 GiB
bash-4.4$ ceph -s
cluster:
id: 0eeb25ed-8a67-45bc-b24a-2c20a0d8cb50
health: HEALTH_WARN
clock skew detected on mon.b, mon.e
Slow OSD heartbeats on back (longest 1210.353ms)
Slow OSD heartbeats on front (longest 1169.941ms)
services:
mon: 3 daemons, quorum a,b,e (age 3m)
mgr: b(active, since 3m)
osd: 3 osds: 3 up (since 3m), 3 in (since 3h)
data:
pools: 1 pools, 1 pgs
objects: 2 objects, 449 KiB
usage: 18 MiB used, 90 GiB / 90 GiB avail
pgs: 1 active+clean
每个 OSD 都有一个状态,可以是以下几种之一:
- up :表示该 OSD 正常运行,并且可以处理数据请求。
- down :表示该 OSD 当前无法运行或不可用,可能由于硬件故障或软件问题。
- out :表示该 OSD 不参与数据存储或恢复,这通常是由于管理员手动将其标记为不可用。
- exists :表示该 OSD 配置存在,但尚未启动或加入集群
以上是用rook搭建ceph的步骤。建议生产环境中使用rook搭建。如果在搭建过程中遇到问题可留言。下次分享Dashboard。