羊蹓狼 发表于 2024-12-19 23:29:53

cephFS的使用以及K8S对接cephFS

1 cephFS快速搭建

1.创建两个存储池分别用于存储mds的元数据和数据
# ceph osd pool create cephfs_data
pool 'cephfs_data' created
# ceph osd pool create cephfs_metadata
pool 'cephfs_metadata' created
2.创建一个文件系统,名称为"zhiyong18-cephfs"
# ceph fs new zhiyong18-cephfs cephfs_metadata cephfs_data
Pool 'cephfs_data' (id '10') has pg autoscale mode 'on' but is not marked as bulk.
Consider setting the flag by running
    # ceph osd pool set cephfs_data bulk true
new fs with metadata pool 11 and data pool 10
3.查看创建的存储池
# ceph fs ls
name: zhiyong18-cephfs, metadata pool: cephfs_metadata, data pools:
# ceph mds stat
zhiyong18-cephfs:0
# ceph -s
cluster:
    id:   12fad866-9aa0-11ef-8656-6516a17ad6dd
    health: HEALTH_ERR
            1 filesystem is offline
            1 filesystem is online with fewer MDS than max_mds
            1 pool(s) do not have an application enabled

services:
    mon: 3 daemons, quorum ceph141,ceph142,ceph143 (age 73m)
    mgr: ceph141.yvswvf(active, since 73m), standbys: ceph142.gtcikx
    mds: 0/0 daemons up
    osd: 7 osds: 7 up (since 73m), 7 in (since 38h)

data:
    volumes: 1/1 healthy
    pools:   6 pools, 129 pgs
    objects: 50 objects, 18 MiB
    usage:   335 MiB used, 3.3 TiB / 3.3 TiB avail
    pgs:   129 active+clean
   发现:存储池的状态无法正常使用,而且集群是有错误的(HEALTH_ERR),因此我们须要先办理这个题目
在web页面中也有提示:All MDS ranks are unavailable. The MDS daemons managing metadata are down, rendering the filesystem offline.
https://i-blog.csdnimg.cn/direct/2114723232c0490f85a201de1d7fb207.png#pic_center
    以是先开启mds服务,元数据服务
4.应用mds的文件系统
# ceph orch apply mds zhiyong18-cephfs
Scheduled mds.zhiyong18-cephfs update...
5.添加第1个mds服务器,ceph143节点
# ceph orch daemon add mds zhiyong18-cephfs ceph143
Deployed mds.zhiyong18-cephfs.ceph143.eltfff on host 'ceph143'
# ceph mds stat
zhiyong18-cephfs:1 {0=zhiyong18-cephfs.ceph143.eltfff=up:active} 1 up:standby
添加第2个mds,ceph141节点
# ceph orch daemon add mds zhiyong18-cephfs ceph141
Deployed mds.zhiyong18-cephfs.ceph141.geohlx on host 'ceph141'
6.目前活跃提供服务是ceph143,备用的是ceph141
# ceph fs status zhiyong18-cephfs
zhiyong18-cephfs - 0 clients
================
RANKSTATE               MDS                   ACTIVITY   DNS    INOS   DIRS   CAPS
0    activezhiyong18-cephfs.ceph143.eltfffReqs:    0 /s    10   13   12      0   
      POOL         TYPE   USEDAVAIL
cephfs_metadatametadata96.0k1083G
cephfs_data      data       0   1083G
          STANDBY MDS            
zhiyong18-cephfs.ceph141.geohlx
MDS version: ceph version 18.2.4 (e7ad5345525c7aa95470c26863873b581076945d) reef (stable)
7.再次查看集群状态ERR状态消散。此处ERR状态是因为,之前的rbd题目(可以忽略)
# ceph -s
cluster:
    id:   12fad866-9aa0-11ef-8656-6516a17ad6dd
    health: HEALTH_WARN
            1 pool(s) do not have an application enabled

services:
    mon: 3 daemons, quorum ceph141,ceph142,ceph143 (age 84m)
    mgr: ceph141.yvswvf(active, since 84m), standbys: ceph142.gtcikx
    mds: 1/1 daemons up, 1 standby
    osd: 7 osds: 7 up (since 84m), 7 in (since 39h)

data:
    volumes: 1/1 healthy
    pools:   6 pools, 129 pgs
    objects: 72 objects, 18 MiB
    usage:   335 MiB used, 3.3 TiB / 3.3 TiB avail
    pgs:   129 active+clean
8.验证mds的高可用性
直接给ceph143节点关机:init 0,然后查看cephfs的状态照旧正常的
# ceph fs status zhiyong18-cephfs
zhiyong18-cephfs - 0 clients
================
RANKSTATE               MDS                   ACTIVITY   DNS    INOS   DIRS   CAPS
0    activezhiyong18-cephfs.ceph141.geohlxReqs:    0 /s    10   13   12      0   
      POOL         TYPE   USEDAVAIL
cephfs_metadatametadata96.0k1625G
cephfs_data      data       0   1083G
MDS version: ceph version 18.2.4 (e7ad5345525c7aa95470c26863873b581076945d) reef (stable)
2 cephFS配置多活

1.查看之前的状态
# ceph fs status zhiyong18-cephfs
zhiyong18-cephfs - 0 clients
================
RANKSTATE               MDS                   ACTIVITY   DNS    INOS   DIRS   CAPS
0    activezhiyong18-cephfs.ceph141.geohlxReqs:    0 /s    10   13   12      0   
      POOL         TYPE   USEDAVAIL
cephfs_metadatametadata   104k1083G
cephfs_data      data       0   1083G
          STANDBY MDS            
zhiyong18-cephfs.ceph143.eltfff
MDS version: ceph version 18.2.4 (e7ad5345525c7aa95470c26863873b581076945d) reef (stable)
2.查看默认的mds数量为1,同时仅有一个对外提供服务。修改为2,以让2个mds同时对外提供服务
# ceph fs get zhiyong18-cephfs | grepmax_mds
max_mds        1
# ceph fs set zhiyong18-cephfsmax_mds 2
# ceph fs get zhiyong18-cephfs | grepmax_mds
max_mds        2
3.再次查看cephFS 。此时ceph141和ceph143同时对外提供服务,任何一个mds挂掉,都导致集群不可用!
# ceph orch daemon add mds zhiyong18-cephfs ceph142
# ceph fs status zhiyong18-cephfs
zhiyong18-cephfs - 0 clients
================
RANKSTATE               MDS                   ACTIVITY   DNS    INOS   DIRS   CAPS
0    activezhiyong18-cephfs.ceph141.geohlxReqs:    0 /s    10   13   12      0   
1    activezhiyong18-cephfs.ceph143.eltfffReqs:    0 /s    10   13   11      0   
      POOL         TYPE   USEDAVAIL
cephfs_metadatametadata   176k1083G
cephfs_data      data       0   1083G
MDS version: ceph version 18.2.4 (e7ad5345525c7aa95470c26863873b581076945d) reef (stable)
4.添加一个备用的mds,ceph142充当。添加后再次查看cephFS状态
# ceph fs status zhiyong18-cephfs
zhiyong18-cephfs - 0 clients
================
RANKSTATE               MDS                   ACTIVITY   DNS    INOS   DIRS   CAPS
0    activezhiyong18-cephfs.ceph141.geohlxReqs:    0 /s    10   13   12      0   
1    activezhiyong18-cephfs.ceph143.eltfffReqs:    0 /s    10   13   11      0   
      POOL         TYPE   USEDAVAIL
cephfs_metadatametadata   176k1083G
cephfs_data      data       0   1083G
          STANDBY MDS            
zhiyong18-cephfs.ceph142.igigvp
MDS version: ceph version 18.2.4 (e7ad5345525c7aa95470c26863873b581076945d) reef (stable)
5.验证是否生效。关闭ceph143节点:init 0。然后发现ceph142节点切换过去。
# ceph fs status zhiyong18-cephfs
zhiyong18-cephfs - 0 clients
================
RANKSTATE               MDS                   ACTIVITY   DNS    INOS   DIRS   CAPS
0    activezhiyong18-cephfs.ceph141.geohlxReqs:    0 /s    10   13   12      0   
1    activezhiyong18-cephfs.ceph142.igigvpReqs:    0 /s    10   13   11      0   
      POOL         TYPE   USEDAVAIL
cephfs_metadatametadata   183k1625G
cephfs_data      data       0   1083G
MDS version: ceph version 18.2.4 (e7ad5345525c7aa95470c26863873b581076945d) reef (stable)
# ceph -s
cluster:
    id:   12fad866-9aa0-11ef-8656-6516a17ad6dd
    health: HEALTH_WARN
            failed to probe daemons or devices
            insufficient standby MDS daemons available
            1/3 mons down, quorum ceph141,ceph142
            2 osds down
            1 host (2 osds) down
            Degraded data redundancy: 91/273 objects degraded (33.333%), 50 pgs degraded
            1 pool(s) do not have an application enabled

services:
    mon: 3 daemons, quorum ceph141,ceph142 (age 36s), out of quorum: ceph143
    mgr: ceph141.yvswvf(active, since 7h), standbys: ceph142.gtcikx
    mds: 2/2 daemons up
    osd: 7 osds: 5 up (since 35s), 7 in (since 80m)

data:
    volumes: 1/1 healthy
    pools:   6 pools, 129 pgs
    objects: 91 objects, 18 MiB
    usage:   367 MiB used, 3.3 TiB / 3.3 TiB avail
    pgs:   91/273 objects degraded (33.333%)
             79 active+undersized
             50 active+undersized+degraded
6.再把ceph143添加到集群
# ceph orch daemon add mds zhiyong18-cephfs ceph143
最后发现添加不成功,大概是mds不支持3个,最后把max_mds改为了1
3 客户端使用cephFS

01 服务端准备工作

1.确认cephFS的可用
# ceph fs ls
name: zhiyong18-cephfs, metadata pool: cephfs_metadata, data pools:
# ceph fs status zhiyong18-cephfs
zhiyong18-cephfs - 0 clients
================
RANKSTATE               MDS                   ACTIVITY   DNS    INOS   DIRS   CAPS
0    activezhiyong18-cephfs.ceph141.geohlxReqs:    0 /s    10   13   12      0   
      POOL         TYPE   USEDAVAIL
cephfs_metadatametadata   249k1083G
cephfs_data      data       0   1083G
          STANDBY MDS            
zhiyong18-cephfs.ceph142.oszjfe
MDS version: ceph version 18.2.4 (e7ad5345525c7aa95470c26863873b581076945d) reef (stable)
# ceph fs get zhiyong18-cephfs | grep max_mds
max_mds        1
2.管理节点创建用户并导出钥匙环和key文件,发到其他节点
# ceph auth add client.wenzhiyongfs mon 'allow r' mds 'allow rw' osd 'allow rwx'
added key for client.wenzhiyongfs
# ceph auth get client.wenzhiyongfs

        key = AQCOfitnDobhOBAAdJT9D0JVIjRch+kOQl8q3g==
        caps mds = "allow rw"
        caps mon = "allow r"
        caps osd = "allow rwx"
# ceph auth get client.wenzhiyongfs > ceph.client.wenzhiyongfs.keyring
# ceph authprint-key client.wenzhiyongfs > wenzhiyongfs.key
# more wenzhiyongfs.key
AQCOfitnDobhOBAAdJT9D0JVIjRch+kOQl8q3g==


# scp ceph.client.wenzhiyongfs.keyring wenzhiyongfs.key ceph143:/etc/ceph/
# scp ceph.client.wenzhiyongfs.keyringceph142:/etc/ceph/
3.客户端确认本地的认证文件
# ll | grep wen
-rw-r--r-- 1 root root 139 Nov6 22:53 ceph.client.wenzhiyongfs.keyring
-rw-r--r-- 1 root root40 Nov6 22:53 wenzhiyongfs.key
02 客户端使用cephFS

1.客户端ceph141基于key文件举行挂载并尝试写入数据
# df -h | grep mnt
# mount -t ceph ceph141:6789,ceph142:6789,ceph143:6789:/ /mnt \
-o name=wenzhiyongfs,secretfile=/etc/ceph/wenzhiyongfs.key

# df -h | grep mnt
10.0.0.141:6789,10.0.0.142:6789,127.0.1.1:6789,10.0.0.143:6789:/1.1T   01.1T   0% /mnt

# cp /etc/os-release /etc/fstab /etc/hosts /mnt/
# ls /mnt/
fstabhostsos-release
2.启动另一个客户端ceph142测试,测试时发现数据和ceph143同步了:都能看到全部节点上传的4个文件
# mount -t ceph ceph141:6789,ceph142:6789,ceph143:6789:/ /mnt \
-o name=wenzhiyongfs,secret=AQCOfitnDobhOBAAdJT9D0JVIjRch+kOQl8q3g==
# df -h | grep mnt
10.0.0.141:6789,127.0.1.1:6789,10.0.0.142:6789,10.0.0.143:6789:/1.1T   01.1T   0% /mnt
# cp /etc/hostname /mnt/
# ls /mnt/
fstabhostnamehostsos-release
ceph143节点查看:
# ls /mnt/
fstabhostnamehostsos-release
3.把认证文件删除后ceph.client.wenzhiyongfs.keyring,固然不影响挂载,但是会有提示。
# ls
ceph.client.admin.keyringceph.client.wenzhiyongfs.keyringceph.confrbdmap
# rm -rf ceph.client.wenzhiyongfs.keyring
# umount /mnt
# mount -t ceph ceph141:6789,ceph142:6789,ceph143:6789:/ /mnt -o name=wenzhiyongfs,secret=AQCOfitnDobhOBAAdJT9D0JVIjRch+kOQl8q3g==
2024-11-06T23:35:58.145+0800 7f21d1629100 -1 auth: unable to find a keyring on /etc/ceph/ceph.client.wenzhiyongfs.keyring,/etc/ceph/ceph.keyring,/etc/ceph/keyring,/etc/ceph/keyring.bin: (2) No such file or directory
# df -h | grep mnt
10.0.0.141:6789,127.0.1.1:6789,10.0.0.142:6789,10.0.0.143:6789:/1.1T   01.1T   0% /mnt
4.ceph142节点仍旧可以正常写入。用起来就和NFS差不多
# cp /etc/netplan/00-installer-config.yaml /mnt/
4 K8S对接cephFS

4.1 cephFS作为volumes

1.Ubuntu默认安装的最新版本是17.2.7,也可以使用拷贝ceph的APT源,实现安装最新版。
全部K8S节点安装ceph-common:
apt -y install ceph-common
ceph节点把认证文件传输到全部K8S节点:
scp admin.secret 10.0.0.231:/etc/ceph/
scp admin.secret 10.0.0.232:/etc/ceph/
scp admin.secret 10.0.0.233:/etc/ceph/
1.编写资源清单
# cat 01-k8s-use-cephfs.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: deploy-volume-cephfs-admin-secretfile
spec:
replicas: 3
selector:
    matchLabels:
      apps: ceph-fs
template:
    metadata:
      labels:
      apps: ceph-fs
    spec:
      volumes:
      - name: data
      # 指定存储卷的类型是cephFS
      cephfs:
          monitors:
          - 10.0.0.141:6789
          - 10.0.0.142:6789
          - 10.0.0.143:6789
          # 指定引用的cephFS的路径,若不指定默认为"/"
          path: /
          # 对于Pod而言,无需修改文件,因此设置为true
          readOnly: true
          # 指定连接ceph集群的用户,若不指定,默认为admin
          user: admin
          # 指定admin用户对应的认证文件所在路径
          secretFile: "/etc/ceph/admin.secret"
      containers:
      - name: c1
      image: registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps:v1
      volumeMounts:
      - name: data
          mountPath: /wenzhiyong-data
      ports:
      - containerPort: 80
---

apiVersion: v1
kind: Service
metadata:
name: svc-cephfs-secretfile
spec:
type: NodePort
selector:
    apps: ceph-fs
ports:
- protocol: TCP
    port: 80
    targetPort: 80
    nodePort: 30011
2.进入容器测试,可以看到之前ceph节点写入的数据;因为设置了只读,以是不能写入数据。pod如果要有写入权限,就把volumes中改为:readOnly: false
kubectl exec deploy-volume-cephfs-admin-secretfile-57f6cf7df5-wmfg5 -- sh -c 'ls /wenzhiyong-data'

00-installer-config.yaml
fstab
hostname
hosts
os-release

# 进入pod测试
/ # cd /wenzhiyong-data/
/wenzhiyong-data # ls
00-installer-config.yamlfstab                     hostname                  hosts                     os-release
/wenzhiyong-data # echo 11 >> pods.txt
sh: can't create pods.txt: Read-only file system
4.2 cephFS作为PVC

apiVersion: v1
kind: PersistentVolume
metadata:
name: zhiyong18-cephfs-pv
labels:
    school: zhiyong18
spec:
accessModes:
- ReadWriteMany
cephfs:
    monitors:
    - 10.0.0.141:6789
    - 10.0.0.141:6789
    - 10.0.0.141:6789
    path: /
    readOnly: false
    user: admin
    secretFile: "/etc/ceph/admin.secret"
persistentVolumeReclaimPolicy: Retain
capacity:
    storage: 2Gi
---

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: zhiyong18-cephfs-pvc
spec:
# 选择上一步创建的PV
volumeName: zhiyong18-cephfs-pv
accessModes:
- ReadWriteMany
resources:
    limits:
       storage: 2Gi
    requests:
       storage: 1Gi
---

apiVersion: apps/v1
kind: Deployment
metadata:
name: deploy-pvc-cephfs-secretfile
spec:
replicas: 3
selector:
    matchLabels:
      apps: cephfs
template:
    metadata:
      labels:
      apps: cephfs
    spec:
      volumes:
      - name: data
      persistentVolumeClaim:
          claimName: zhiyong18-cephfs-pvc
      containers:
      - name: c1
      image: registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps:v1
      volumeMounts:
      - name: data
          mountPath: /usr/share/nginx/html
      ports:
      - containerPort: 80
---

apiVersion: v1
kind: Service
metadata:
name: svc-cephfs-secretfile
spec:
type: NodePort
selector:
    apps: cephfs
ports:
- protocol: TCP
    port: 80
    targetPort: 80
    nodePort: 30012
   

[*]PV 的 accessModes 表现该卷支持的访问模式范围。ReadWriteMany` 表现该 PV 可以支持多个节点同时读写该卷
[*]PVC 的 accessModes 表现 PVC 向PV请求的访问模式。如果 PVC 请求的是 ReadWriteMany,那么它会尝试绑定一个支持该模式的 PV
2.运用后查看pod目次下的文件,另有之前ceph集群测试时留下来的文件。在nginx pod内创建目次和写入文件。
# kubectl exec -it deploy-pvc-cephfs-secretfile-6cfcdbfcf-r6sbt -- sh
/ # cd /usr/share/nginx/html/
/usr/share/nginx/html # ls
00-installer-config.yaml   fstab         hostname      hosts         os-release

/usr/share/nginx/html # mkdir nginx
/usr/share/nginx/html # echo wzywzy.fun > nginx/index.html
3.回到宿主机测试,访问任意一个pod都能看到返回准确的内容,说明:3个pod在共享这个cephFS
# kubectl get pods -o wide
NAME                                           READY   STATUS    RESTARTS   AGE   IP            NODE      NOMINATED NODE   READINESS GATES
deploy-pvc-cephfs-secretfile-6cfcdbfcf-r6sbt   1/1   Running   0          7m57s   10.100.2.37   worker232   <none>         <none>
deploy-pvc-cephfs-secretfile-6cfcdbfcf-v55zb   1/1   Running   0          7m57s   10.100.2.38   worker232   <none>         <none>
deploy-pvc-cephfs-secretfile-6cfcdbfcf-vzzbf   1/1   Running   0          7m57s   10.100.1.19   worker233   <none>         <none>
# curl 10.100.2.37/nginx/index.html
wzywzy.fun
# curl 10.100.2.38/nginx/index.html
wzywzy.fun
# curl 10.100.1.19/nginx/index.html
wzywzy.fun
ning   0          7m57s   10.100.2.37   worker232   <none>         <none>
deploy-pvc-cephfs-secretfile-6cfcdbfcf-v55zb   1/1   Running   0          7m57s   10.100.2.38   worker232   <none>         <none>
deploy-pvc-cephfs-secretfile-6cfcdbfcf-vzzbf   1/1   Running   0          7m57s   10.100.1.19   worker233   <none>         <none>
# curl 10.100.2.37/nginx/index.html
wzywzy.fun
# curl 10.100.2.38/nginx/index.html
wzywzy.fun
# curl 10.100.1.19/nginx/index.html
wzywzy.fun

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: cephFS的使用以及K8S对接cephFS