k8s搭建ceph集群

环境规划

主机名

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集群

  1. 部署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。

 

 


请使用浏览器的分享功能分享到微信等