一、前言
CephFS(Ceph File System)是Ceph存储解决方案中的一个组件,它提供了一个分布式文件系统,允许用户在多个节点上访问和管理文件数据,相当于是共享文件系统,可应用于k8s的存储,linux系统的共享存储等,需要额外部署mds组件服务
二、部署
cephfs需要用到两个存储池,一个用于存储文件数据,另一个用于存储元数据
数据池(Data Pool):数据池用于存储文件数据。这是实际存储用户文件内容的地方可以配置数据池的副本数和其他参数
元数据池(Metadata Pool):元数据池用于存储文件系统的元数据,如文件名、目录结构等。元数据的管理对于文件系统的性能至关重要。因此,将元数据存储在单独的池中有助于优化性能
创建数据存储池
ceph osd pool create cephfs_data 32 32
#其中的两个32分别指的是pg数量和pg副本数,pg副本数必须大于等于pg数
#根据官网的说明pg数量越多,数据分布的越均衡
创建元数据存储池
ceph osd pool create cephfs_metadata 32 32
查看创建的存储池信息
ceph osd pool ls detail
size 3:表示每个对象将被复制成 3 个副本
min_size 2:这表示至少需要 2 个副本在线才能满足数据的可用性需求
crush_rule 0:这指示了使用的 CRUSH 规则的编号。CRUSH 是 Ceph 使用的数据分布算法,用于确定数据在存储集群中的存放位置
object_hash rjenkins:这表示对象的哈希算法是 rjenkins
pg_num 32:这指示了存储池中 PG(Placement Group)的数量
pgp_num 32:这表示在每个 PG 中的副本数
autoscale_mode on:这表示存储池启用了自动扩展模式,即 PG 的数量会根据存储集群的大小自动调整
last_change 133:这是上次更改存储池配置的时间戳
flags hashpspool stripe_width 0:这是一些存储池的标志和参数设置,如是否使用 CRUSH 哈希算法、条带宽度等
application cephfs:这指示了存储池的应用场景,即该存储池用于支持 Ceph 文件系统(CephFS)
创建cephfs并命名为cephfs
ceph fs new cephfs cephfs_metadata cephfs_data
#指定之前创建的数据存储池和元数据存储池
创建mds
ceph orch apply mds cephfs --placement="3 ceph01 ceph02 ceph03"
查看cephfs
ceph fs ls
ceph fs status cephfs
默认情况下,ceph只支持一个活跃的MDS,其他的作为备用MDS,所以会看到只有一个mds节点为active状态
至此cephfs部署完成
cephfs的使用
centos系统挂载使用
先安装ceph客户端
编辑yum源
vi /etc/yum.repos.d/ceph.repo
[Ceph]
name=Ceph
baseurl=https://mirrors.aliyun.com/ceph/rpm-15.2.9/el7/x86_64/
enabled=1
gpgcheck=0
[Ceph-noarch]
name=Ceph noarch packages
baseurl=https://mirrors.aliyun.com/ceph/rpm-15.2.9/el7/noarch/
enabled=1
gpgcheck=0
安装eple解决依赖问题
yum -y install epel-release
安装ceph客户端
yum -y install ceph-common
在ceph01管理节点生成密钥
ceph-authtool -p /etc/ceph/ceph.client.admin.keyring > ceph.key
将密钥拷贝到客户端的ceph目录下
scp ceph.key 10.1.60.118@root:/etc/ceph
#客户端安装ceph时会自动生成ceph目录,这里我是使用另外的118主机作为客户端
在客户端挂载cephfs文件系统
#创建挂载目录
mkdir /mnt/cephfs
#这里使用默认的admin用户,有需要可以自行创建其它用户
mount -t ceph -o name=admin,secretfile=/etc/ceph/ceph.key 10.1.60.126:6789:/ /mnt/cephfs
查看挂载的目录
df -Th
k8s使用cephfs作为存储
创建ceph目录
mkdir /opt/ceph && cd /opt/ceph
将ceph01管理节点生成的密钥拷贝到k8s节点上
k8s的所有工作节点也需要安装ceph-common
将ceph密钥进行base64编码
cat ceph.key |base64
编辑secret的yaml文件
vi secret.yaml
apiVersion: v1
kind: Secret
metadata:
name: ceph-secret
type: "kubernetes.io/rbd" #这里必须使用rbd类型
data:
key: "QVFCenRndG1wVzJPQXhBQW5oMVFyRHlvT05Oa2RZR25tSHpYUmc9PQo=" #将生成的密钥编码填入
编辑pv的yaml文件
vi pv.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
name: ceph-pv
spec:
capacity:
storage: 20Gi
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Retain
storageClassName: ceph
cephfs:
monitors: ["10.1.60.126:6789", "10.1.60.127:6789", "10.1.60.128:6789"] #填写提供cephfs服务的节点
path: / #挂载目录,如果有创建其它目录也可以直接镜像挂载
user: admin
secretRef:
name: ceph-secret #使用secret进行验证
编辑pvc的yaml文件
vi pvc.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: cephfs-pvc
namespace: default
spec:
accessModes: ["ReadWriteOnce"]
storageClassName: ceph
resources:
requests:
storage: 20Gi
执行yaml文件生成对应服务
kubectl apply -f secret.yaml
kubectl apply -f pv.yaml
kubectl apply -f pvc.yaml
查看pv和pvc是否正常
kubectl get pv,pvc