一: ceph操作部分
此节所有操作需要在【Ceph 节点】中进行
1)使用 CephFS 必须保证至少有一个节点提供 mds 服务
# ceph mds stat
1 up:standby
2)创建资源池
#ceph osd pool create cephfs_data 10
#ceph osd pool create cephfs_metadata 10
文件系统需要两个资源池,一个用于存储数据本体,一个用于存放索引信息及其他数据相关信息。
3)创建文件系统
# ceph fs new cephfs cephfs_metadata cephfs_data
new fs with metadata pool 10 and data pool 7
# ceph mds stat
cephfs:1 {0=szbqjrtest01=up:active}
# ceph fs ls
name: cephfs, metadata pool: cephfs_metadata, data pools: [cephfs_data ]
#
4)获取 admin 秘钥
# echo "AQAfLMFdptOdMRAA24zqFbx5kaKwLpuroPV0Ug==" |base64
QVFBZkxNRmRwdE9kTVJBQTI0enFGYng1a2FLd0xwdXJvUFYwVWc9PQo=
这里输出的结果是直接进行 base64 加密的,方便后面直接使用。请记下这串字符。
################################################################################################
二: K8S操作
2.1 )测试挂载CephFS文件系统
cephfs有两种mount方式:内核(即mount命令)、用户态(ceph-fuse)
内核挂载(即mount命令)
[root@k8s1 /]# cat /etc/ceph/ceph.client.admin.keyring
[client.admin]
key = AQAfLMFdptOdMRAA24zqFbx5kaKwLpuroPV0Ug==
caps mds = "allow *"
caps mgr = "allow *"
caps mon = "allow *"
caps osd = "allow *"
[root@k8s1 /]#
[root@k8s1 /]# mount -t ceph 10.83.35.79:/ /cephfs -o name=admin,secret=AQAfLMFdptOdMRAA24zqFbx5kaKwLpuroPV0Ug==
[root@k8s1 /]#
################################################################################################
用户态挂载命令:
cephfs还支持用户态mount,方法是使用ceph-fuse命令。
[root@k8s2 ~]# yum -y install ceph-fuse
[root@k8s2 /]# ceph-fuse -m 10.83.35.79:6789 /ceph-fuse
ceph-fuse[1560587]: starting ceph client2019-11-19 18:30:22.821 7fd889dc0e00 -1 init, newargv = 0x5581bbbf0050 newargc=7
ceph-fuse[1560587]: starting fuse
[root@k8s2 /]#
[root@k8s2 /]# df |grep ceph
ceph-fuse 12660736 0 12660736 0% /ceph-fuse
[root@k8s2 /]#
###############################################################################################
三: 测试pod使用CephFS文件系统
[root@k8s1 /]# kubectl get secret -n kube-system|grep ceph-secret
ceph-secret kubernetes.io/rbd 1 6d5h
ceph-secret-01 Opaque 1 5h29m
[root@k8s1 /]#
[root@k8s1 /]#
[root@k8s1 /]# cat ceph-test.yaml
apiVersion: v1
kind: Pod
metadata:
name: cephfs2
namespace: kube-system
spec:
containers:
- name: cephfs-rw
image: nginx
volumeMounts:
- mountPath: "/mnt/cephfs"
name: cephfs
volumes:
- name: cephfs
cephfs:
monitors:
- 10.83.35.79:6789
user: "admin"
secretRef:
name: ceph-secret-admin
readOnly: true
[root@k8s1 /]# kubectl apply -f ceph-test.yaml
pod/cephfs2 created
[root@k8s1 /]#
[root@k8s1 /]# kubectl get pod -n kube-system|grep cephfs
cephfs2 1/1 Running 0 25s
[root@k8s1 /]#
[root@k8s1 /]#
[root@k8s1 /]# kubectl exec -it -n kube-system cephfs2 -- mount|grep cephfs
ceph-fuse on /mnt/cephfs type fuse.ceph-fuse (ro,relatime,user_id=0,group_id=0,allow_other)
[root@k8s1 /]#
[root@k8s1 /]#
[root@k8s1 /]#
[root@k8s1 /]# kubectl exec -it cephfs2 -n kube-system /bin/bash
root@cephfs2:/#
root@cephfs2:/# cat /etc/hosts
# Kubernetes-managed hosts file.
127.0.0.1 localhost
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
fe00::0 ip6-mcastprefix
fe00::1 ip6-allnodes
fe00::2 ip6-allrouters
192.168.109.100 cephfs2
root@cephfs2:/# df |grep cephfs
ceph-fuse 12660736 102400 12558336 1% /mnt/cephfs
root@cephfs2:/#
# 可以查看到cephfs2的pod已经挂载了cephfs