前置条件 准备工作 部署完毕的 Kubernetes 集群 在 Ceph 集群节点上安装:docker,cephadm,并且更新 cephadm 到最新版本,以及配置 Ceph 节点之间的 ssh 互信 ssh-keygen cat ~/.ssh/id_rsa.pubvim ~/.ssh/authorized_keys ssh [email protected] ssh [email protected] ssh [email protected] 10.0.16.33 ceph1 10.0.16.34 ceph2 10.0.16.35 ceph3 apt-get update apt-get install -y \ apt-transport-https \ ca-certificates \ curl \ gnupg-agent \ software-properties-common curl -fsSL https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu/gpg | sudo apt-key add - add-apt-repository -y \ "deb [arch=amd64] https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu/ \ $(lsb_release -cs) \ stable" apt-get update apt-get install -y docker-ce docker-ce-cli containerd.io apt-get install -y cephadm cephadm add-repo --release reef cephadm install cephadm version
最好不要修改 ceph 集群服务器的 ssh 默认端口,否则会导致 ceph 集群引导失败,如果修改了 ssh 的默认端口,则需要创建对应的 ssh 配置 如:
mkdir -pv /etc/ceph/
cat > /etc/ceph/ceph.ssh_config <<EOF
Host *
Port 2222
StrictHostKeyChecking no
EOF
并在启动引导指定对应的 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 host add ceph3 10.0.16.35 ceph orch apply mon --placement="ceph1,ceph2,ceph3" ceph orch host ls
添加磁盘 ceph orch daemon add osd ceph1:/dev/sdb ceph orch daemon add osd ceph1:/dev/sdc ceph orch daemon add osd ceph2:/dev/sdb ceph orch daemon add osd ceph2:/dev/sdc ceph orch daemon add osd ceph3:/dev/sdb ceph orch daemon add osd ceph3:/dev/sdc
创建 CephFS ceph fs volume create cephfs ceph orch apply mds cephfs --placement="ceph1,ceph2,ceph3"
创建 RBD 存储池 ceph osd pool create rbd.data 64 64 replicated rbd pool init rbd.data
性能测试 测试命令 每次测试时间为三分钟
rados bench -p rbd.data 180 write --no-cleanup rados bench -p rbd.data 180 seq rados bench -p rbd.data 180 rand
写入性能 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 的相关数据 python3 create-external-cluster-resources.py --rbd-data-pool-name rbd.data --cephfs-filesystem-name cephfs --namespace rook-ceph-external --format bash
export NAMESPACE=rook-ceph-externalexport ROOK_EXTERNAL_FSID=6b6d577c-b035-11ee-8b7f-e51965640d97export ROOK_EXTERNAL_USERNAME=client.healthcheckerexport ROOK_EXTERNAL_CEPH_MON_DATA=ceph1=10.0.16.33:6789export ROOK_EXTERNAL_USER_SECRET=AQAUnp9loTImDxAAYZiXyoTfPBO8v96/K+hj4Q==export ROOK_EXTERNAL_DASHBOARD_LINK=https://10.0.16.33:8443/export CSI_RBD_NODE_SECRET=AQAUnp9lkPeFFhAAviD9KRUZPQK0mjJ3Cr0bpA==export CSI_RBD_NODE_SECRET_NAME=csi-rbd-nodeexport CSI_RBD_PROVISIONER_SECRET=AQAUnp9lZqecGxAA2aGz/HlFX4pW1suQjJXmGA==export CSI_RBD_PROVISIONER_SECRET_NAME=csi-rbd-provisionerexport CEPHFS_POOL_NAME=cephfs.cephfs.dataexport CEPHFS_METADATA_POOL_NAME=cephfs.cephfs.metaexport CEPHFS_FS_NAME=cephfsexport CSI_CEPHFS_NODE_SECRET=AQAUnp9lbdkFIBAAq1d4PMi0GDJP4G7uQrcHnA==export CSI_CEPHFS_PROVISIONER_SECRET=AQAUnp9le2PSIxAAcgvsxgZ+GPJXYkv+u8B4vQ==export CSI_CEPHFS_NODE_SECRET_NAME=csi-cephfs-nodeexport CSI_CEPHFS_PROVISIONER_SECRET_NAME=csi-cephfs-provisionerexport MONITORING_ENDPOINT=10.0.16.33export MONITORING_ENDPOINT_PORT=9283export RBD_POOL_NAME=rbd.dataexport RGW_POOL_PREFIX=default
执行外部集群数据导入脚本 当前 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 cd rookgit checkout v1.10.2 cd deploy/examples/kubectl apply -f common.yaml kubectl apply -f crds.yaml kubectl apply -f operator.yaml
导入数据 kubectl apply -f common-external.yaml bash import-external-cluster.sh kubectl apply -f cluster-external.yaml kubectl get sc kubectl -n rook-ceph-external get CephCluster kubectl get pod -n rook-ceph
创建 PVC 测试 apiVersion: v1 kind: PersistentVolumeClaim metadata: name: rbd-pvc spec: accessModes: - ReadWriteOnce resources: requests: storage: 1Gi storageClassName: ceph-rbd --- apiVersion: v1 kind: PersistentVolumeClaim metadata: name: cephfs-pvc spec: accessModes: - ReadWriteMany resources: requests: storage: 1Gi storageClassName: cephfs
其他 Prometheus Cephadm 集群会自动启动一套 Prometheus 监控集群,相关配置如下(这里的端口不一定一致):
如果修改了对应配置,直接重启服务 systemctl restart ceph-【集群ID】@alertmanager.【所在host】.service systemctl restart ceph-【集群ID】@prometheus.【所在host】.service systemctl restart ceph-【集群ID】@grafana.【所在host】.service