K8s后端接入 CephFS 文件存储

: 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

你可能感兴趣的:(K8S)