k8s挂载ceph存储

环境介绍

3台centos7.8系统,4c4g,两块硬盘。

系统优化

#防火墙
systemctl stop firewalld  && systemctl disable firewalld 
sed -ri 's#(SELINUX=).*#\1disabled#' /etc/selinux/config
setenforce 0
getenforce 0


#yum源
cd /etc/yum.repos.d/
mkdir old
mv CentOS-* old
curl -o /etc/yum.repos.d/Centos-7.repo http://mirrors.aliyun.com/repo/Centos-7.repo
wget -O /etc/yum.repos.d/epel.repo https://mirrors.aliyun.com/repo/epel-7.repo

#ntp
yum install chrony -y
sed -i.bak "s@server@#server@g" /etc/chrony.conf 
sed -i "6aserver ntp.aliyun.com iburst" /etc/chrony.conf 
systemctl enable chronyd --now  && systemctl status chronyd 

#查看同步状态,前面 ^*开头表示同步正常
chronyc sources -v

修改主机名

192.168.199.61  hostnamectl set-hostname ceph1
192.168.199.62  hostnamectl set-hostname ceph2
192.168.199.63  hostnamectl set-hostname ceph3

bash

vim /etc/hosts/

192.168.199.61  ceph1
192.168.199.62  ceph2
192.168.199.63  ceph3


ping -c 2 ceph1
ping -c 2 ceph2
ping -c 2 ceph3

配置密钥对

ssh-keygen
ssh-copy-id root@ceph1
ssh-copy-id root@ceph2
ssh-copy-id root@ceph3



配置ceph源

cat > /etc/yum.repos.d/ceph-yum.repo <<EOF
[ceph]
name=ceph
baseurl=https://mirrors.aliyun.com/ceph/rpm-nautilus/el7/x86_64/
gpgcheck=0
priority=1
enable=1
[ceph-noarch]
name=cephnoarch
baseurl=https://mirrors.aliyun.com/ceph/rpm-nautilus/el7/noarch/
gpgcheck=0
priority=1
enable=1
[ceph-source]
name=Ceph source packages
baseurl=https://mirrors.aliyun.com/ceph/rpm-nautilus/el7/SRPMS/
gpgcheck=0
priority=1
enable=1
EOF

安装ceph集群

安装ceph-deploy,在ceph1执行

 yum install python-setuptools ceph-deploy -y

在所有节点执行

yum install ceph ceph-radosgw -y

创建monitor节点,在ceph1操作

[root@ceph1 ~]# cd /etc/ceph/

[root@ceph1 ~]# ceph-deploy new ceph1 ceph2 ceph3 

[root@ceph1 ceph]# ls
ceph.conf  ceph-deploy-ceph.log  ceph.mon.keyring  rbdmap
[root@ceph1 ceph]# 
#生成了如下配置文件
ceph.conf ceph-deploy-ceph.log ceph.mon.keyring 
Ceph 配置文件、日志文件、keyring 是在增加 mon 的时候,mon 之间加密会用到的
备注:
ceph-deploy new 后面接的是要初始化成 monitor 的节点

安装monitor服务

修改 ceph 配置文件 ,把 ceph.conf 配置文件里的默认副本数从 3 改成 2。把 osd_pool_default_size = 2 加入[global]段,这样只有 2 个 osd 也能达到 active+clean 状态

[root@ceph1 ceph]# cat ceph.conf 
[global]
fsid = a1bfef86-0794-4e92-b4e6-36e4a623cb5c
mon_initial_members = ceph1, ceph2, ceph3
mon_host = 192.168.199.61,192.168.199.62,192.168.199.63
auth_cluster_required = cephx
auth_service_required = cephx
auth_client_required = cephx
filestore_xattr_use_omap = true #新加
osd_pool_default_size = 2 #新加
mon_clock_drift_allowed = 0.500  #新加

备注,上述配置参数解释说明:

  1. fsid:这是 Ceph 集群的唯一标识符,用于识别特定的 Ceph 集群。
  2. mon_initial_members:这是指定初始监视器节点的列表。监视器节点用于管理 Ceph 集群的状态和拓 扑信息。
  3. mon_host:这是指定监视器节点的 IP 地址或主机名列表。它定义了监视器节点之间进行通信的网络地 址。
  4. auth_cluster_required:这是指定 Ceph 集群中的各个组件之间进行身份验证所需的安全机制。在这种 情况下,cephx 表示使用 Ceph 提供的基于令牌的身份验证机制。
  5. auth_service_required:这是指定在 Ceph 服务之间进行身份验证所需的安全机制。
  6. auth_client_required:这是指定 Ceph 客户端与 Ceph 集群进行身份验证所需的安全机制。
  7. filestore_xattr_use_omap:这是用于配置 Ceph 对象存储守护进程(OSD)是否使用 OMAP 作为存 储对象的扩展属性(extended attribute)的机制。当设置为 true 时,Ceph 将使用 OMAP 来存储扩展属性。OMAP 是 Ceph 中用于存储对象的扩展属性的有序映射数据结构。它提供了一种有效的方式来 存储和检索与对象相关的元数据,同时支持按键排序和范围查询。
  8. osd_pool_default_size:这是指定创建新存储池时的默认副本数量(数据冗余级别)。在这种情况下,osd_pool_default_size 设置为 2,表示每个对象将有两个副本。
  9. mon_clock_drift_allowed:这是指定监视器节点之间允许的最大时钟偏差量。时钟偏差超过此阈值可 能导致监视器之间的通信问题。

安装 monitor、收集所有的密钥,在ceph1操作

[root@ceph1 ~]# cd /etc/ceph/
[root@ceph1 ceph]# ls
ceph.conf  ceph-deploy-ceph.log  ceph.mon.keyring  rbdmap
[root@ceph1 ceph]# ceph-deploy mon create-initial


[root@ceph1 ceph]# ls *.keyring
ceph.bootstrap-mds.keyring  ceph.bootstrap-osd.keyring  ceph.client.admin.keyring
ceph.bootstrap-mgr.keyring  ceph.bootstrap-rgw.keyring  ceph.mon.keyring
[root@ceph1 ceph]# 

image-20240408094502725

备注,上述密钥文件解释说明:

  1. ceph.bootstrap-mds.keyring:这个文件包含了用于引导(bootstrap) MDS(Metadata Server)的密钥。MDS 是 Ceph 文件系统(CephFS)的一部分,负责管理文件系统的元数据和文件 访问控制。
  2. ceph.bootstrap-mgr.keyring:这个文件包含了用于引导(bootstrap) Mgr(Manager)的密 钥。Mgr 是 Ceph 的管理器组件,负责收集集群的监控数据和提供集群状态信息的查询接口。
  3. ceph.bootstrap-osd.keyring:这个文件包含了用于引导(bootstrap) OSD(Object Storage Daemon)的密钥。OSD 是 Ceph 存储集群中的存储守护进程,负责存储和管理对象数据。
  4. ceph.bootstrap-rgw.keyring:这个文件包含了用于引导(bootstrap) RGW(RADOS Gateway)的密钥。RGW 是 Ceph 的对象存储接口,提供与 S3 和 Swift 兼容的对象存储服务。
  5. . ceph.client.admin.keyring:这个文件包含了用于 Ceph 管理员客户端的密钥。它是用于管理整个 Ceph 集群的访问权限,可以执行各种集群管理操作。
  6. ceph.mon.keyring:这个文件包含了用于引导(bootstrap)和管理监视器(monitors)之间通信的 密钥。监视器负责管理集群的状态和拓扑信息。

这些密钥文件在 Ceph 集群的启动和管理过程中起着关键的作用。它们用于引导和授权不同的组 件,确保安全的集群通信和访问控制。对这些文件的保护和安全性非常重要,只有授权的用户才能访问和 使用它们。

部署osd服务,在ceph1操作

使用 ceph-deploy 工具在 Ceph 集群每个节点上创建一个 OSD(对象存储设备)。这将把 /dev/sdb 设备分配为一个存储设备,并将其用作 Ceph 集群中的一个 OSD。OSD(Object Storage Device)负责存储 Ceph 集群中的对象数据。

[root@ceph1 ceph]# ceph-deploy osd create --data /dev/sdb ceph1
[root@ceph1 ceph]# ceph-deploy osd create --data /dev/sdb ceph2
[root@ceph1 ceph]# ceph-deploy osd create --data /dev/sdb ceph3

image-20240408100011741

image-20240408100026913

image-20240408100043905

要使用 Ceph 文件系统,你的 Ceph 的存储集群里至少需要存在一个 Ceph 的元数据服务器(mds)。

创建ceph文件系统,在ceph1操作

创建mds

[root@ceph1 ceph]# ceph-deploy mds create ceph1 ceph2 ceph3

查看ceph当前文件系统

[root@ceph1 ceph]# ceph fs ls
No filesystems enabled
[root@ceph1 ceph]# 

使用 ceph fs ls 命令来检查 Ceph 当前是否存在文件系统。如果输出为"No filesystems enabled",表示当前没有启用的文件系统。

创建存储池,使用 ceph osd pool create 命令创建两个存储池:一个用于数据(data),另一个 用于元数据(metadata)。示例命令如下:

[root@ceph1 ceph]# ceph osd pool create cephfs_data 8
pool 'cephfs_data' created
[root@ceph1 ceph]# ceph osd pool create cephfs_metadata 8
pool 'cephfs_metadata' created
[root@ceph1 ceph]# 

这将创建名为 cephfs_data 和 cephfs_metadata 的存储池,并且每个存储池将有 8 个 pg (Placement Group)。

注意事项: 对于 cephfs_metadata 存储池,建议设置较高级别的副本级别,因为元数据的损坏可能导致整个文 件系统无法使用。建议在元数据存储池中使用低延迟的存储介质,例如 SSD,以提高客户端的响应速 度。

创建存储池的命令参数解释说明:

ceph osd pool create {pool-name} {pg-num}

确定 pg_num 取值是强制性的,因为不能自动计算。下面是几个常用的值:

1、少于 5 个 OSD 时可把 pg_num 设置为 128

2、OSD 数量在 5 到 10 个时,可把 pg_num 设置为 512

3、OSD 数量在 10 到 50 个时,可把 pg_num 设置为 4096 *OSD 数量大于 50 时,你得理解权衡方法、以及如何自己计算 pg_num 取值

4、自己计算 pg_num 取值时可借助 pgcalc 工具 随着

5、OSD 数量的增加,正确的 pg_num 取值变得更加重要,因为它显著地影响着集群的行为、 以及出错时的数据持久性(即灾难性事件导致数据丢失的概率)。

创建文件系统

创建好存储池后,你就可以用 fs new 命令创建文件系统了

[root@ceph1 ceph]# ceph fs new test1 cephfs_metadata cephfs_data
# 这将创建一个名为 xuegod 的文件系统,其中 cephfs_metadata 是元数据池,cephfs_data 是
数据池。
	
[root@ceph1 ceph]# ceph fs ls

name: test1, metadata pool: cephfs_metadata, data pools: [cephfs_data ]

[root@ceph1 ceph]# ceph mds stat
test1:1 {0=ceph2=up:active} 2 up:standby
[root@ceph1 ceph]# 


active 是活跃的,另 1 个是处于热备份的状态 。

使用 ceph fs ls 命令可以查看创建后的 Ceph 文件系统。

使用 ceph mds stat 命令可以查看 MDS 节点的状态。

部署mgr

安装 mgr 用于后面我们配置 dashboard 监控,而且避免挂载 ceph 时可能会提示 warring 信息

root@ceph1 ceph]# ceph-deploy mgr create ceph1 ceph2 ceph3 

#安装后查看状态
[root@ceph1 ceph]# ceph -s
  cluster:
    id:     a1bfef86-0794-4e92-b4e6-36e4a623cb5c
    health: HEALTH_WARN
            mons are allowing insecure global_id reclaim
 
  services:
    mon: 3 daemons, quorum ceph1,ceph2,ceph3 (age 2h)
    mgr: ceph1(active, since 4m), standbys: ceph2, ceph3
    mds: test1:1 {0=ceph2=up:active} 2 up:standby
    osd: 3 osds: 3 up (since 105m), 3 in (since 105m)
 
  data:
    pools:   3 pools, 24 pgs
    objects: 22 objects, 2.7 KiB
    usage:   3.0 GiB used, 597 GiB / 600 GiB avail
    pgs:     24 active+clean
 



#查看状态
[root@ceph1 ceph]# systemctl status ceph-osd.target 
● ceph-osd.target - ceph target allowing to start/stop all ceph-osd@.service instances at once
   Loaded: loaded (/usr/lib/systemd/system/ceph-osd.target; enabled; vendor preset: enabled)
   Active: active since 日 2024-04-07 18:03:58 CST; 17h ago

4月 07 18:03:58 ceph1 systemd[1]: Reached target ceph target allowing to start/s...ce.
Hint: Some lines were ellipsized, use -l to show in full.
[root@ceph1 ceph]# 


image-20240408114432341

如果 ceph -s 看到警告:

cluster 84469565-5d11-4aeb-88bd-204dc25b2d50

health HEALTH_WARN

too many PGs per OSD (320 > max 300)

互动 1:警告什么意思?

问题原是集群 osd 数量较少,测试过程中建立了大量的 pool,每个 pool 都要用一些 pg_num 和 pgs

解决办法如下: 修改 node1-monitor 节点 ceph 的配置文件 ceph.conf

[root@node1-monitor ~]# vim /etc/ceph/ceph.conf

最后一行增加如下内容: mon_pg_warn_max_per_osd = 1000

#重启 monitor 进程

[root@node1-monitor ~]# systemctl restart ceph-mon.target

[root@master1-admin ~]# systemctl restart ceph-mon.target

[root@node2-osd ~]# systemctl restart ceph-mon.target

修改后在使用 ceph -s查看就可以了。

在k8s挂载ceph rbd

kubernetes 要想使用 ceph,需要在 k8s 的每个 node 节点安装 ceph-common,把 ceph 节 点上的 ceph.repo 文件拷贝到 k8s 各个节点/etc/yum.repos.d/目录下,然后在 k8s 的各个节点 yum install ceph-common -y

[root@k8s-master ~]# kubectl get nodes -owide
NAME         STATUS   ROLES           AGE   VERSION   INTERNAL-IP       EXTERNAL-IP   OS-IMAGE                KERNEL-VERSION           CONTAINER-RUNTIME
k8s-master   Ready    control-plane   77d   v1.24.4   192.168.199.171   <none>        CentOS Linux 7 (Core)   3.10.0-1127.el7.x86_64   containerd://1.6.27
k8s-slave1   Ready    <none>          77d   v1.24.4   192.168.199.172   <none>        CentOS Linux 7 (Core)   3.10.0-1127.el7.x86_64   containerd://1.6.27
k8s-slave2   Ready    <none>          77d   v1.24.4   192.168.199.173   <none>        CentOS Linux 7 (Core)   3.10.0-1127.el7.x86_64   containerd://1.6.27
k8s-slave3   Ready    <none>          65d   v1.24.4   192.168.199.174   <none>        CentOS Linux 7 (Core)   3.10.0-1127.el7.x86_64   containerd://1.6.28
k8s-slave4   Ready    <none>          65d   v1.24.4   192.168.199.175   <none>        CentOS Linux 7 (Core)   3.10.0-1127.el7.x86_64   containerd://1.6.28



#每个k8s节点都执行
scp /etc/yum.repos.d/ceph-yum.repo root@192.168.199.171:/etc/yum.repos.d/
yum install ceph ceph-common -y
[root@ceph1 ceph]# scp /etc/ceph/* root@192.168.199.171:/etc/ceph/


创建ceph rbd,在ceph1上操作

[root@ceph1 ceph]# ceph osd pool create k8srbd1 8
pool 'k8srbd1' created
[root@ceph1 ceph]# rbd create rbda -s 1024 -p k8srbd1
[root@ceph1 ceph]# # 在k8srbd1这个pool池中创建rdb,大小是1024M
[root@ceph1 ceph]# rbd feature disable k8srbd1/rbda object-map fast-diff deep-flatten

• k8srbd1/rbda: 这是 RBD 镜像的名称。k8srbd1 是池(pool)的名称,rbda 是镜像(image)的名 称。

• object-map: 这是一种 RBD 镜像特性(feature),用于启用或禁用镜像中的对象映射(object mapping)。对象映射是一种索引结构,用于加速随机读取操作,减少读取延迟。通过禁用此特性,将 禁用对象映射功能。

• fast-diff: 这是另一种 RBD 镜像特性,用于启用或禁用快速差异(fast diff)。快速差异是一种优化技 术,用于加速增量镜像的操作,例如增量备份和快照回滚。通过禁用此特性,将禁用快速差异功能。

• deep-flatten: 这也是一种 RBD 镜像特性,用于启用或禁用深度展平(deep flatten)。深度展平是一 种技术,用于减少镜像链的长度,以提高写入性能和快照管理效率。通过禁用此特性,将禁用深度展平功 能。

rbd feature disable 命令允许禁用 RBD 镜像中的特定特性。禁用特性可能会影响到某些功能或性 能,具体取决于应用程序对这些特性的使用方式和依赖程度。在禁用特性之前,请确保了解其影响,并根 据具体需求进行决策。

基于块设备创建pod,只能给一个pod使用

apiVersion: v1
kind: Pod
metadata:
  name: testrbd
spec:
  containers:
    - image: nginx
      name: nginx
      imagePullPolicy: IfNotPresent
      volumeMounts:
      - name: testrbd
        mountPath: /mnt
  volumes:
    - name: testrbd
      rbd:
        monitors:
        - '192.168.199.61:6789'
        - '192.168.199.62:6789'
        - '192.168.199.63:6789'
        pool: k8srbd1
        image: rbda
        fsType: xfs
        readOnly: false
        user: admin
        keyring: /etc/ceph/ceph.client.admin.keyring


[root@k8s-master ~]# kubectl get pods
NAME         READY   STATUS    RESTARTS      AGE
centos-pod   1/1     Running   8 (51m ago)   37d
testrbd      1/1     Running   0             13s

image-20240408142455584

注意: k8srbd1 下的 rbda 被 pod 挂载了,那其他 pod 就不能占用这个 k8srbd1 下的 rbda 了 例:创建一个 pod-1.yaml

[root@k8s-master ~]# cat ceph-pod1.yaml 
apiVersion: v1
kind: Pod
metadata:
  name: testrbd1
spec:
  containers:
    - image: nginx
      name: nginx
      imagePullPolicy: IfNotPresent
      volumeMounts:
      - name: testrbd
        mountPath: /mnt
  volumes:
    - name: testrbd
      rbd:
        monitors:
        - '192.168.199.61:6789'
        - '192.168.199.62:6789'
        - '192.168.199.63:6789'
        pool: k8srbd1
        image: rbda
        fsType: xfs
        readOnly: false
        user: admin
        keyring: /etc/ceph/ceph.client.admin.keyring


[root@k8s-master ~]# kubectl apply -f ceph-pod1.yaml 
pod/testrbd1 created
[root@k8s-master ~]# kubectl get pods
NAME         READY   STATUS              RESTARTS      AGE
centos-pod   1/1     Running             8 (55m ago)   37d
testrbd      1/1     Running             0             3m52s
testrbd1     0/1     ContainerCreating   0             4s

image-20240408142948953

基于ceph rbd 生成pv

创建 ceph-secret 这个 k8s secret 对象,这个 secret 对象用于 k8s volume 插件访问 ceph 集 群,获取 client.admin 的 keyring 值,并用 base64 编码,在 master1-admin(ceph 管理节点)操 作

[root@ceph1 ceph]# cat ceph.client.admin.keyring 
[client.admin]
	key = AQDASxNm2pDvIhAADZF/NAjGGZtGx7va/JBrcw==
	caps mds = "allow *"
	caps mgr = "allow *"
	caps mon = "allow *"
	caps osd = "allow *"
[root@ceph1 ceph]# ceph auth get-key client.admin | base64
QVFEQVN4Tm0ycER2SWhBQURaRi9OQWpHR1p0R3g3dmEvSkJyY3c9PQ==     #加密后的数据
[root@ceph1 ceph]# 
	

在 Ceph 中,ceph auth get-key 命令用于获取指定客户端(client)的密钥(key)。该命令后面 跟着客户端的名称,例如 client.admin 表示获取名为"admin"的客户端的密钥。

在给定客户端的密钥后,使用 base64 命令对密钥进行编码,将其转换为 Base64 格式。Base64 是 一种常用的编码方式,用于将二进制数据表示为可打印的 ASCII 字符序列。

因此,ceph auth get-key client.admin | base64 的意思是,获取名为"admin"的客户端的密 钥,并对该密钥进行 Base64 编码。这样做可能是为了以文本形式方便地传输或存储该密钥。

创建ceph的secret,在k8s的控制节点操作

[root@k8s-master ~]# cat ceph-secret.yaml 
apiVersion: v1
kind: Secret
metadata:
  name: ceph-secret
data:
  key: QVFEQVN4Tm0ycER2SWhBQURaRi9OQWpHR1p0R3g3dmEvSkJyY3c9PQ==

image-20240408155941886

回到ceph1创建pool池

[root@ceph1 ceph]# ceph osd  pool create k8stest 6
pool 'k8stest' created
[root@ceph1 ceph]# rbd create rbda -s 1024 -p k8stest
[root@ceph1 ceph]# rbd feature disable k8stest/rbda object-map fast-diff deep-flatten
[root@ceph1 ceph]# 

创建pv

[root@k8s-master ~]# cat ceph-pv.yaml 
apiVersion: v1 
kind: PersistentVolume 
metadata: 
  name: ceph-pv 
spec:   
   capacity:     
     storage: 1Gi   
   accessModes:     
   - ReadWriteOnce   
   rbd:     
         monitors:       
         - 192.168.199.61:6789     
         - 192.168.199.62:6789     
         - 192.168.199.63:6789     
         pool: k8stest     
         image: rbda     
         user: admin     
         secretRef:       
             name: ceph-secret     
         fsType: xfs     
         readOnly: false   
   persistentVolumeReclaimPolicy: Recycle

image-20240409150613294

创建pvc

[root@k8s-master ~]# cat ceph-pvc.yaml 
kind: PersistentVolumeClaim 
apiVersion: v1 
metadata:   
  name: ceph-pvc 
spec:   
  accessModes:     
  - ReadWriteOnce   
  resources:     
   requests:       
    storage: 1Gi

image-20240409151029935

创建pod挂载ceph-pvc

[root@k8s-master ~]# cat ceph-pod-pvc.yaml 
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  selector:
    matchLabels:
     app: nginx
  replicas: 2 # tells deployment to run 2 pods matching the template
  template: # create pods using pod definition in this template
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 80
        volumeMounts:
          - mountPath: "/ceph-data"
            name: ceph-data
      volumes:
      - name: ceph-data
        persistentVolumeClaim:
            claimName: ceph-pvc

image-20240409152726918

注意:

把 rbd 块设备做成 pv,pvc 跟 pv 绑定,也不支持跨节点 pod 挂载。

ceph rbd 块存储的特点: ceph rbd 块存储能在同一个 node 给多个 pod 共享挂载。

ceph rbd 块存储不能给不同的 node 节点上的 pod 挂载。

k8s挂载cephfs

使用cephfs挂载给pod,可以节点使用。

块设备只能给一个pod用,

块设备的pv pvc可以给多个pod使用,但是不能跨节点

[root@ceph1 ~]# ceph fs ls
name: test1, metadata pool: cephfs_metadata, data pools: [cephfs_data ]
[root@ceph1 ~]# cat /etc/ceph/ceph.client.admin.keyring |grep key|awk -F" " '{print $3}' > /etc/ceph/admin.secret
[root@ceph1 ~]# cat /etc/ceph/admin.secret 
AQDASxNm2pDvIhAADZF/NAjGGZtGx7va/JBrcw==
[root@ceph1 ~]# mkdir /root/cephfs
[root@ceph1 ~]# mount -t ceph 192.168.199.61:6789,192.168.199.62:6789,192.168.199.63:6789:/ /root/cephfs -o name=admin,secretfile=/etc/ceph/admin.secret
[root@ceph1 ~]# df -h
文件系统                                                       容量  已用  可用 已用% 挂载点
devtmpfs                                                       1.9G     0  1.9G    0% /dev
tmpfs                                                          1.9G     0  1.9G    0% /dev/shm
tmpfs                                                          1.9G   12M  1.9G    1% /run
tmpfs                                                          1.9G     0  1.9G    0% /sys/fs/cgroup
/dev/mapper/centos-root                                         50G  2.4G   48G    5% /
/dev/sda1                                                     1014M  153M  862M   16% /boot
/dev/mapper/centos-home                                        146G   33M  146G    1% /home
tmpfs                                                          1.9G   52K  1.9G    1% /var/lib/ceph/osd/ceph-0
tmpfs                                                          378M     0  378M    0% /run/user/0
192.168.199.61:6789,192.168.199.62:6789,192.168.199.63:6789:/  284G     0  284G    0% /root/cephfs
[root@ceph1 ~]# 

image-20240409154055078

-t ceph: 指定文件系统类型为 Ceph。

192.168.199.61:6789:/: 指定 Ceph Monitor 的 IP 地址和端口号,并指定要挂载的根路径为根目录 (/)。

/root/cephfs: 指定要挂载到的目标目录。

-o name=admin,secretfile=/etc/ceph/admin.secret: 使用 admin 作为认证用户名,并通过指定的 /etc/ceph/admin.secret 文件提供认证密钥。

1、在cephfs根目录创建一个子目录k8scephfs,k8s以后挂载这个目录

192.168.199.61:6789,192.168.199.62:6789,192.168.199.63:6789:/  284G     0  284G    0% /root/cephfs
[root@ceph1 ~]# cd /root/cephfs/
[root@ceph1 cephfs]# ls
[root@ceph1 cephfs]# ls
[root@ceph1 cephfs]# mkdir k8scephfs
[root@ceph1 cephfs]# chmod 777 k8scephfs/
[root@ceph1 cephfs]# 

2、测试k8s的pod挂载cephfs

创建k8s链接ceph使用的secret,将key值转换为base64,否则会有问题。

[root@ceph1 ceph]# cat ceph.client.admin.keyring 
[client.admin]
	key = AQDASxNm2pDvIhAADZF/NAjGGZtGx7va/JBrcw==
	caps mds = "allow *"
	caps mgr = "allow *"
	caps mon = "allow *"
	caps osd = "allow *"
[root@ceph1 ceph]# echo "AQDASxNm2pDvIhAADZF/NAjGGZtGx7va/JBrcw==" | base64
QVFEQVN4Tm0ycER2SWhBQURaRi9OQWpHR1p0R3g3dmEvSkJyY3c9PQo=
[root@ceph1 ceph]# 


[root@k8s-master ~]# cat ceph-secret.yaml 
apiVersion: v1
kind: Secret
metadata:
  name: ceph-secret
data:
  key: QVFEQVN4Tm0ycER2SWhBQURaRi9OQWpHR1p0R3g3dmEvSkJyY3c9PQ==

image-20240409155515257

创建cephfs-pv

[root@k8s-master ~]# cat cephfs-pv.yaml 
apiVersion: v1
kind: PersistentVolume
metadata:
  name: cephfs-pv
spec:
  capacity:
    storage: 1Gi
  accessModes:
    - ReadWriteMany
  cephfs:
    monitors:
      - 192.168.199.61:6789
      - 192.168.199.62:6789
      - 192.168.199.63:6789
      
    path: /k8scephfs
    user: admin
    readOnly: false
    secretRef:
        name: cephfs-secret
  persistentVolumeReclaimPolicy: Recycle  

image-20240409155937815

创建cephfs-pvc

kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: cephfs-pvc
spec:
  accessModes:
    - ReadWriteMany
  volumeName: cephfs-pv
  resources:
    requests:
      storage: 1Gi


image-20240409160336501

创建cephfs-pvc-pod

apiVersion: apps/v1
kind: Deployment
metadata:
  name: cephfs-pvc-pod
spec:
  selector:
    matchLabels:
     app: nginx2
  replicas: 1 # tells deployment to run 2 pods matching the template
  template: # create pods using pod definition in this template
    metadata:
      labels:
        app: nginx2
    spec:
      containers:
      - name: nginx2
        image: nginx
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 80
        volumeMounts:
          - mountPath: "/cephfs-pvc-pod"
            name: cephfs-pvc-pod
      volumes:
      - name: cephfs-pvc-pod
        persistentVolumeClaim:
            claimName: cephfs-pvc


[root@k8s-master ~]# cat cephfs-pvc-pod2.yaml 
apiVersion: v1
kind: Pod
metadata:
  name: cephfs-pod-1
spec:
  hostname: k8s-slave1
  containers:
  - image: nginx
    name: nginx
    imagePullPolicy: IfNotPresent
    volumeMounts:
    - name: cephfs-pvc-pod
      mountPath: "/cephfs-pvc-pod"
  volumes:
  - name: cephfs-pvc-pod
    persistentVolumeClaim:
      claimName: cephfs-pvc

image-20240409165936321

image-20240409170355462

ceph-web界面配置

 yum install ceph-mgr-dashboard -y

ceph mgr module enable dashboard --forece



[root@ceph1 k8scephfs]# ls aa
aa
[root@ceph1 k8scephfs]# cat aa
666

[root@ceph1 k8scephfs]# ceph dashboard ac-user-create admin -i aa administrator
{"username": "admin", "lastUpdate": 1712654636, "name": null, "roles": ["administrator"], "password": "$2b$12$TXp7qKQo2Lmq/993fZmw9OjeKrmR1GYhHHcoP.h4ct0Df2pnglc.u", "email": null}
[root@ceph1 k8scephfs]# 



[root@ceph1 k8scephfs]# ceph mgr services
{
    "dashboard": "https://ceph1.test:8443/"
}


hosts

192.168.199.61 ceph1.test

image-20240409172827277

image-20240409173018671

posted @   挖挖挖  阅读(269)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
点击右上角即可分享
微信分享提示