通过 rook 在 k8s 上部署 ceph 集群¶
背景¶
为了方便集群的使用,想在 k8s 集群里部署一个 ceph 集群。
Ceph 有这些组成部分:
- mon:monitor
- mgr:manager
- osd:storage
- mds(optional):用于 CephFS
- radosgw(optional:用于 Ceph Object Storage
配置¶
我们采用的是 rook 来部署 ceph 集群。
参考文档:https://rook.github.io/docs/rook/v1.5/ceph-examples.html
首先,克隆 rook 的仓库。建议选择一个 release 版本。
接着,运行下面的命令:
sudo apt install -y lvm2
# required
kubectl apply -f rook/cluster/examples/kubernetes/ceph/crds.yaml
kubectl apply -f rook/cluster/examples/kubernetes/ceph/common.yaml
kubectl apply -f rook/cluster/examples/kubernetes/ceph/operator.yaml
# debugging only
kubectl apply -f rook/cluster/examples/kubernetes/ceph/toolbox.yaml
kubectl apply -f rook/cluster/examples/kubernetes/ceph/direct-mount.yaml
# CephFS
kubectl apply -f rook/cluster/examples/kubernetes/ceph/filesystem.yaml
kubectl apply -f rook/cluster/examples/kubernetes/ceph/csi/cephfs/storageclass.yaml
前面三个 yaml 是必须的,toolbox 是用来查看 ceph 状态的,direct mount 是用来 mount cephfs 的,后两个是为了用 cephfs 的。
接着,按照自己的需求编辑 rook/cluster/exmaples/kuberenetes/ceph/cluster.yaml
然后应用。此时你的集群应该就已经起来了。
然后,可以进 toolbox 查看 ceph 状态:
# get volume path of pvc
kubectl get pv -o custom-columns=NAME:.metadata.name,NAMSEPACE:.spec.claimRef.namespace,CLAIM:.spec.claimRef.name,PATH:.spec.csi.volumeAttributes.subvolumeName
kubectl -n rook-ceph exec -it deploy/rook-direct-mount -- bash
# in the pod
mkdir /tmp/registry
mon_endpoints=$(grep mon_host /etc/ceph/ceph.conf | awk '{print $3}')
my_secret=$(grep key /etc/ceph/keyring | awk '{print $3}')
mount -t ceph -o mds_namespace=myfs,name=admin,secret=$my_secret $mon_endpoints:/ /tmp/registry
df -h
cd /tmp/registry/volumes/csi/PATH