文件系统cephfs
Ceph文件系统(CephFS)是一个符合POSIX标准的文件系统,它使用Ceph存储集群来存储其数据。 Ceph文件系统使用与Ceph块设备相同的Ceph存储集群系统。
用户可以在块设备上创建xfs文件系统,也可以创建ext4等其他文件系统,Ceph集群实现了自己的文件系统来组织管理集群的存储空间,用户可以直接将Ceph集群的文件系统挂载到用户机上使用,Ceph有了块设备接口,在块设备上完全可以构建一个文件系统,那么Ceph为什么还需要文件系统接口呢?
主要是因为应用场景的不同,Ceph的块设备具有优异的读写性能,但不能多处挂载同时读写,目前主要用在OpenStack上作为虚拟磁盘,而Ceph的文件系统接口读写性能较块设备接口差,但具有优异的共享性。
创建文件系统
创建好存储池后,你就可以用 fs new 命令创建文件系统了
[root@ master1-admin ceph]# ceph fs new xianchao cephfs_metadata cephfs_data
new fs with metadata pool 2 and data pool 1
其中:new后的fsname 可自定义
ceph rbd是不支持跨界点去挂载的。
之前创建了xianchao这个文件系统
[root@master ~]# ceph fs ls
name: xianchao, metadata pool: cephfs_metadata, data pools: [cephfs_data ]
1、创建ceph子目录
为了别的地方能挂载cephfs,先创建一个secretfile
[root@master1-admin ~]# cat /etc/ceph/ceph.client.admin.keyring |grep key|awk -F" " '{print $3}' > /etc/ceph/admin.secret
[root@master1-admin ~]# cat /etc/ceph/admin.secret
AQC9axxhO3E3NRAABYfuB2VHIRFDABdstPhLsw==
挂载cephfs的根目录到集群的mon节点下的一个目录,比如xianchao_data,因为挂载后,我们就可以直接在xianchao_data下面用Linux命令创建子目录了。
可以看到已经将cephfs文件系统挂载在本地了
[root@master1-admin ~]# mkdir xianchao_data
You have new mail in /var/spool/mail/root[root@master1-admin ~]# mount -t ceph 192.168.0.6:6789:/ /root/xianchao_data -o name=admin,secretfile=/etc/ceph/admin.secret
You have new mail in /var/spool/mail/root[root@master1-admin ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/vda1 20G 2.3G 17G 12% /
devtmpfs 487M 0 487M 0% /dev
tmpfs 497M 0 497M 0% /dev/shm
tmpfs 497M 57M 440M 12% /run
tmpfs 497M 0 497M 0% /sys/fs/cgroup
/dev/vdc1 15G 118M 15G 1% /var/lib/ceph/osd/ceph-0
tmpfs 100M 0 100M 0% /run/user/0
192.168.0.6:6789:/ 45G 368M 45G 1% /root/xianchao_data
在cephfs的根目录里面创建了一个子目录lucky,k8s以后就可以挂载这个目录
[root@master1-admin ~]# cd /root/xianchao_data/
You have new mail in /var/spool/mail/root
[root@master1-admin xianchao_data]# mkdir lucky
[root@master1-admin xianchao_data]# chmod 0777 lucky/
2、测试k8s的pod挂载cephfs
1)创建k8s连接ceph使用的secret
将/etc/ceph/ceph.client.admin.keyring里面的key的值转换为base64,否则会有问题
[root@master1-admin ~]# echo "AQC9axxhO3E3NRAABYfuB2VHIRFDABdstPhLsw==" | base64
QVFDOWF4eGhPM0UzTlJBQUJZZnVCMlZISVJGREFCZHN0UGhMc3c9PQo=
You have new mail in /var/spool/mail/root
[root@master ceph]# vim cephfs-secret.yaml
[root@master ceph]# kubectl apply -f cephfs-secret.yaml
secret/cephfs-secret created
[root@master ceph]# cat cephfs-secret.yaml
apiVersion: v1
kind: Secret
metadata:name: cephfs-secret
data:key: QVFDOWF4eGhPM0UzTlJBQUJZZnVCMlZISVJGREFCZHN0UGhMc3c9PQo=[root@master ceph]# kubectl apply -f cephfs-pv.yaml
persistentvolume/cephfs-pv created
[root@master ceph]# kubectl get pv
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
cephfs-pv 1Gi RWX Recycle Available 42s
[root@master ceph]# cat cephfs-pvc.yaml
kind: PersistentVolumeClaim
apiVersion: v1
metadata:name: cephfs-pvc
spec:accessModes:- ReadWriteManyvolumeName: cephfs-pvresources:requests:storage: 1Gi[root@master ceph]# kubectl apply -f cephfs-pvc.yaml
persistentvolumeclaim/cephfs-pvc created
[root@master ceph]# kubectl get pvc
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
cephfs-pvc Bound cephfs-pv 1Gi RWX 11s
创建第一个pod,挂载cephfs-pvc
[root@master ceph]# cat cephfs-pod-1.yaml
apiVersion: v1
kind: Pod
metadata:name: cephfs-pod-1
spec:containers:- image: nginxname: nginximagePullPolicy: IfNotPresentvolumeMounts:- name: test-v1mountPath: /mntvolumes:- name: test-v1persistentVolumeClaim:claimName: cephfs-pvc
[root@master ceph]# kubectl apply -f cephfs-pod-1.yaml
pod/cephfs-pod-1 created
创建第二个pod,挂载cephfs-pvc
[root@master ceph]# cat cephfs-pod-2.yaml
apiVersion: v1
kind: Pod
metadata:name: cephfs-pod-2
spec:containers:- image: nginxname: nginximagePullPolicy: IfNotPresentvolumeMounts:- name: test-v1mountPath: /mntvolumes:- name: test-v1persistentVolumeClaim:claimName: cephfs-pvc[root@master ceph]# kubectl apply -f cephfs-pod-2.yaml
pod/cephfs-pod-2 created
[root@master ceph]# kubectl get pod
NAME READY STATUS RESTARTS AGE
cephfs-pod-1 1/1 Running 0 86s
cephfs-pod-2 1/1 Running 0 47s
[root@master ceph]# kubectl exec -it cephfs-pod-1 -- /bin/sh
# cd /mnt
# touch welcome[root@master ceph]# kubectl exec -it cephfs-pod-2 -- /bin/sh
# cd /mnt
# touch test
回到master1-admin上,可以看到在cephfs文件目录下已经存在内容了
[root@master1-admin ~]# cd /root/xianchao_data/lucky/
You have new mail in /var/spool/mail/root
[root@master1-admin lucky]# ls
test welcome