Rook 提供了一个 toolbox 容器,用于 Ceph 集群的测试和 debug,使用 Rook 项目中提供的 deploy/examples/toolbox.yaml 文件可以非常方便的部署:
1
| kubectl apply -f https://raw.githubusercontent.com/rook/rook/release-1.13/deploy/examples/toolbox.yaml
|
bash
检查 toolbox 是否正常运行:
1 2
| [vagrant@master01 rook-ceph]$ kubectl get pods -n rook-ceph | grep tools rook-ceph-tools-66b77b8df5-x97q4 1/1 Running 6 27d
|
bash
在 toolbox 中已经安装了 ceph 客户端工具,并且相应的 keyring 已经通过 secret 注入到 Pod 中,可以通过交互的方式去检查集群的状态:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| [vagrant@master01 rook-ceph]$ kubectl exec -it rook-ceph-tools-66b77b8df5-x97q4 -n rook-ceph -- /bin/ceph -s cluster: id: f8bdb7b9-12c8-4814-b4a2-6122366ddd1a health: HEALTH_OK
services: mon: 3 daemons, quorum a,b,c (age 10m) mgr: a(active, since 8m), standbys: b osd: 3 osds: 3 up (since 9m), 3 in (since 3w)
data: pools: 1 pools, 1 pgs objects: 2 objects, 449 KiB usage: 76 MiB used, 60 GiB / 60 GiB avail pgs: 1 active+clean
|
bash
查看集群 osd 的信息:
1 2 3 4 5 6 7 8 9
| [vagrant@master01 rook-ceph]$ kubectl exec -it rook-ceph-tools-66b77b8df5-x97q4 -n rook-ceph -- /bin/ceph osd tree ID CLASS WEIGHT TYPE NAME STATUS REWEIGHT PRI-AFF -1 0.05846 root default -7 0.01949 host master01-example-com 2 hdd 0.01949 osd.2 up 1.00000 1.00000 -3 0.01949 host worker01-example-com 0 hdd 0.01949 osd.0 up 1.00000 1.00000 -5 0.01949 host worker02-example-com 1 hdd 0.01949 osd.1 up 1.00000 1.00000
|
bash
查看集群 Pool 的信息:
1 2
| [vagrant@master01 rook-ceph]$ kubectl exec -it rook-ceph-tools-66b77b8df5-x97q4 -n rook-ceph -- /bin/ceph osd pool ls detail pool 1 '.mgr' replicated size 3 min_size 2 crush_rule 0 object_hash rjenkins pg_num 1 pgp_num 1 autoscale_mode on last_change 31 flags hashpspool stripe_width 0 pg_num_max 32 pg_num_min 1 application mgr
|
bash
可以看到默认部署 Rook 后只有一个用于 manager 的池。
创建新的池
应用在使用 Ceph 提供的存储之前,需要在 Ceph 集群中创建池,可以直接通过在 Toolbox 中通过 ceph 客户端创建,也可以通过 Kubernetes 基于 CRD 进行创建。
创建复制池
Rook 提供了 CephBlockPool CRD 来创建 RBD 池,例如创建一个名为 replicapool 的三副本的复制池 replicapool.yaml:
1 2 3 4 5 6 7 8 9
| apiVersion: ceph.rook.io/v1 kind: CephBlockPool metadata: name: replicapool namespace: rook-ceph spec: failureDomain: host replicated: size: 3
|
yaml
创建纠删代码池
纠删代码池也是通过 CephBlockPool CRD 进行创建,例如创建一个名为 ecpool 的纠删代码池 ecpool.yaml:
1 2 3 4 5 6 7 8 9 10
| apiVersion: ceph.rook.io/v1 kind: CephBlockPool metadata: name: ecpool namespace: rook-ceph spec: failureDomain: osd erasureCoded: dataChunks: 2 codingChunks: 1
|
yaml
上述定义中使用的纠删代码是 2 个 dataChunks + 1 个 condingChunks ,同样需要三个 OSD,但是利用率是 75%,比三副本的 33% 要高。
应用并验证
将 repolicapool.yaml 和 ecpool.yaml 应用到集群:
1 2 3 4
| [vagrant@master01 rook-ceph]$ kubectl apply -f replicapool.yaml cephblockpool.ceph.rook.io/replicapool created [vagrant@master01 rook-ceph]$ kubectl apply -f ecpool.yaml cephblockpool.ceph.rook.io/ecpool created
|
bash
验证相关池是否成功创建:
1 2 3 4 5 6 7 8 9
| [vagrant@master01 rook-ceph]$ kubectl get CephBlockPool -n rook-ceph NAME PHASE ecpool Ready replicapool Ready
[vagrant@master01 rook-ceph]$ kubectl exec -it rook-ceph-tools-66b77b8df5-x97q4 -n rook-ceph -- /bin/ceph osd pool ls .mgr replicapool ecpool
|
bash
查看池的详细信息:
1 2 3 4
| [vagrant@master01 rook-ceph]$ kubectl exec -it rook-ceph-tools-66b77b8df5-x97q4 -n rook-ceph -- /bin/ceph osd pool ls detail pool 1 '.mgr' replicated size 3 min_size 2 crush_rule 0 object_hash rjenkins pg_num 1 pgp_num 1 autoscale_mode on last_change 31 flags hashpspool stripe_width 0 pg_num_max 32 pg_num_min 1 application mgr pool 2 'replicapool' replicated size 3 min_size 2 crush_rule 2 object_hash rjenkins pg_num 32 pgp_num 32 autoscale_mode on last_change 110 lfor 0/0/108 flags hashpspool,selfmanaged_snaps stripe_width 0 application rbd pool 3 'ecpool' erasure profile ecpool_ecprofile size 3 min_size 2 crush_rule 3 object_hash rjenkins pg_num 32 pgp_num 32 autoscale_mode on last_change 124 lfor 0/0/122 flags hashpspool,ec_overwrites,selfmanaged_snaps stripe_width 8192 application rbd
|
bash
查看纠删代码池对应的 erasure profile 的信息:
1 2 3 4 5 6 7 8 9 10
| [vagrant@master01 rook-ceph]$ kubectl exec -it rook-ceph-tools-66b77b8df5-x97q4 -n rook-ceph -- /bin/ceph osd erasure-code-profile get ecpool_ecprofile crush-device-class= crush-failure-domain=host crush-root=default jerasure-per-chunk-alignment=false k=2 m=1 plugin=jerasure technique=reed_sol_van w=8
|
bash
评论· · · · · ·