Kubernetes 接入基于 Cephadm 部署的 Ceph 集群
前置条件
准备工作
- 部署完毕的 Kubernetes 集群
- 在 Ceph 集群节点上安装:docker,cephadm,并且更新 cephadm 到最新版本,以及配置 Ceph 节点之间的 ssh 互信
# 生成公钥并导入到注册到每台服务器 |
最好不要修改 ceph 集群服务器的 ssh 默认端口,否则会导致 ceph 集群引导失败,如果修改了 ssh 的默认端口,则需要创建对应的 ssh 配置
如:
mkdir -pv /etc/ceph/ |
并在启动引导指定对应的 config
cephadm bootstrap --ssh-config /etc/ceph/ceph.ssh_config ...... |
集群信息
主机名 | IP | 系统版本 | 备注 |
---|---|---|---|
ceph1 | 10.0.16.33 | ubuntu 22.04.3 | Ceph 集群管理节点+osd节点 |
ceph2 | 10.0.16.34 | ubuntu 22.04.3 | Ceph 集群节点+osd节点 |
ceph3 | 10.0.16.35 | ubuntu 22.04.3 | Ceph 集群节点+osd节点 |
master1 | 10.0.16.36 | ubuntu 22.04.3 | K8S 控制平面 |
node1 | 10.0.16.37 | ubuntu 22.04.3 | K8S 工作节点 |
node2 | 10.0.16.38 | ubuntu 22.04.3 | K8S 工作节点 |
node3 | 10.0.16.39 | ubuntu 22.04.3 | K8S 工作节点 |
Ceph 集群部署
在节点 ceph1 初始化整个集群
cephadm bootstrap --log-to-file --mon-ip 10.0.16.33 --ssh-private-key /root/.ssh/id_rsa --ssh-public-key /root/.ssh/id_rsa.pub |
引导完毕后会出现默认配置,可以登录dashboard修改密码
Ceph Dashboard is now available at:
URL: https://ceph1:8443/
User: admin
Password: 8ega86tepk
Enabling client.admin keyring and conf on hosts with “admin” label
Saving cluster configuration to /var/lib/ceph/80285dea-af83-11ee-83b8-23d931c2e040/config directory
Enabling autotune for osd_memory_target
You can access the Ceph CLI as following in case of multi-cluster or non-default config:
sudo /usr/sbin/cephadm shell –fsid 80285dea-af83-11ee-83b8-23d931c2e040 -c /etc/ceph/ceph.conf -k /etc/ceph/ceph.client.admin.keyring
Or, if you are only running a single cluster on this host:
sudo /usr/sbin/cephadm shell
Please consider enabling telemetry to help improve Ceph:
ceph telemetry on
For more information see:
https://docs.ceph.com/en/latest/mgr/telemetry/
Bootstrap complete.
在节点一上安装 ceph 相关管理工具
cephadm install ceph-volume ceph-common ceph-osd ceph-mon |
添加其他节点
ceph orch host add ceph2 10.0.16.34 |
添加磁盘
ceph orch daemon add osd ceph1:/dev/sdb |
创建 CephFS
# 创建文件系统 |
创建 RBD 存储池
# 如果是直接给 Kubernetes 用只需要创建存储池即可 |
性能测试
测试命令
每次测试时间为三分钟
# 测试写入性能且不清理测试数据,后续用于测试读取性能 |
写入性能
Total time run: 180.162 # 总体运行时间 (Total time run): 180.162秒,表示从测试开始到结束的总时间。
Total writes made: 9728 # 总写入次数 (Total writes made): 9728次,表示在整个测试期间执行的总写入操作次数。
Write size: 4194304 # 写入大小 (Write size): 4194304字节,每个写入操作的数据块大小,等于4MB。
Object size: 4194304 # 对象大小 (Object size): 4194304字节,每个存储对象的大小,等于4MB。
Bandwidth (MB/sec): 215.984 # 平均带宽 (Average Bandwidth): 215.984 MB/秒,表示平均每秒写入数据的量。
Stddev Bandwidth: 34.9424 # 带宽标准差 (Stddev Bandwidth): 34.9424 MB/秒,表示带宽测量值的波动程度。这个数字较大,表明带宽数据在测试期间波动了不少。
Max bandwidth (MB/sec): 400 # 最大带宽 (Max Bandwidth): 400 MB/秒,测试期间的最高带宽记录。
Min bandwidth (MB/sec): 140 # 最小带宽 (Min Bandwidth): 140 MB/秒,测试期间的最低带宽记录。
Average IOPS: 53 # 平均IOPS (Average IOPS): 53,基于4MB写入操作的对象,平均每秒完成53个IOPS。
Stddev IOPS: 8.73561 # IOPS标准差 (Stddev IOPS): 8.73561,IOPS数值的波动程度。
Max IOPS: 100 # 最大IOPS (Max IOPS): 100,测试期间的最高IOPS记录。
Min IOPS: 35 # 最小IOPS (Min IOPS): 35,测试期间的最低IOPS记录。
Average Latency(s): 0.296262 # 平均延迟 (Average Latency): 0.296262秒,一次写入操作的平均完成时间。
Stddev Latency(s): 0.211683 # 延迟标准差 (Stddev Latency): 0.211683秒,延迟测量值的波动程度。较低的标准差通常意味着延迟比较一致。
Max latency(s): 0.83413 # 最大延迟 (Max Latency): 0.83413秒,测试期间的最高延迟。
Min latency(s): 0.0194977 # 最小延迟 (Min Latency): 0.0194977秒,测试期间的最低延迟。
顺序读取性能
这里因为读取速度较快,60秒就完成了读取
Total time run: 60.2536
Total reads made: 9728
Read size: 4194304
Object size: 4194304
Bandwidth (MB/sec): 645.804
Average IOPS: 161
Stddev IOPS: 31.5648
Max IOPS: 331
Min IOPS: 112
Average Latency(s): 0.0982576
Max latency(s): 1.32703
Min latency(s): 0.00750698
随机读取性能
Total time run: 180.251
Total reads made: 29233
Read size: 4194304
Object size: 4194304
Bandwidth (MB/sec): 648.717
Average IOPS: 162
Stddev IOPS: 25.9462
Max IOPS: 331
Min IOPS: 104
Average Latency(s): 0.0980925
Max latency(s): 1.49632
Min latency(s): 0.00163233
清理数据
rados -p rbd.data cleanup |
使用 Rook 接入外部 Ceph
K8S 接入外部 ceph 集群的最低要求为,外部 ceph 建立了 CephFS 以及 RBD 的相关存储池,需要存储池创建完毕并且集群健康状态处于 Healthy 的时候接入
导出当前 Ceph 的相关数据
Rook 官方提供了接入外部 Ceph 集群的相关脚本:https://github.com/rook/rook/blob/master/deploy/examples/
其中 create-external-cluster-resources.py
为导出当前 Ceph 集群相关配置数据的脚本
执行完脚本会出现导出数据,需要留存
# 在 ceph1 节点运行 |
export NAMESPACE=rook-ceph-external |
执行外部集群数据导入脚本
https://github.com/rook/rook/blob/master/deploy/examples/
其中 import-external-cluster.sh
为导入当前 Ceph 集群相关配置数据到 Kubernetes 的脚本,注意使用与当前 Kubernetes 集群部署的相同版本的 Rook,需要切换 tag 下载对应版本的脚本,如果没有部署过 Rook,可以直接使用最新的
当前 Kubernetes 集群使用的 Rook 版本为 1.10.2,故使用版本为:https://github.com/rook/rook/blob/release-1.10/deploy/examples/import-external-cluster.sh
下载完脚本后,需要按照图示将之前导出的数据写入脚本

git clone --single-branch --branch release-1.10 https://github.com/rook/rook.git |
导入数据
kubectl apply -f common-external.yaml |

创建 PVC 测试
apiVersion: v1 |
其他
Prometheus
Cephadm 集群会自动启动一套 Prometheus 监控集群,相关配置如下(这里的端口不一定一致):
服务 | 地址 | 配置文件 |
---|---|---|
Alertmanager | http://10.0.16.33:9093/ | /var/lib/ceph/【集群ID】/alertmanager.【所在host】/etc/alertmanager |
Prometheus | http://10.0.16.33:9095/ | /var/lib/ceph/【集群ID】/prometheus.【所在host】/etc/prometheus |
Grafana | https://10.0.16.33:3000/ | /var/lib/ceph/【集群ID】/grafana.【所在host】/etc/grafana |
如果修改了对应配置,直接重启服务
systemctl restart ceph-【集群ID】@alertmanager.【所在host】.service |