当前位置: 代码迷 >> 综合 >> Kubernetes Cephfs 多pod挂载
  详细解决方案

Kubernetes Cephfs 多pod挂载

热度:38   发布时间:2023-09-30 12:53:33.0

文件系统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

  相关解决方案