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 #新加
备注,上述配置参数解释说明:
- fsid:这是 Ceph 集群的唯一标识符,用于识别特定的 Ceph 集群。
- mon_initial_members:这是指定初始监视器节点的列表。监视器节点用于管理 Ceph 集群的状态和拓 扑信息。
- mon_host:这是指定监视器节点的 IP 地址或主机名列表。它定义了监视器节点之间进行通信的网络地 址。
- auth_cluster_required:这是指定 Ceph 集群中的各个组件之间进行身份验证所需的安全机制。在这种 情况下,cephx 表示使用 Ceph 提供的基于令牌的身份验证机制。
- auth_service_required:这是指定在 Ceph 服务之间进行身份验证所需的安全机制。
- auth_client_required:这是指定 Ceph 客户端与 Ceph 集群进行身份验证所需的安全机制。
- filestore_xattr_use_omap:这是用于配置 Ceph 对象存储守护进程(OSD)是否使用 OMAP 作为存 储对象的扩展属性(extended attribute)的机制。当设置为 true 时,Ceph 将使用 OMAP 来存储扩展属性。OMAP 是 Ceph 中用于存储对象的扩展属性的有序映射数据结构。它提供了一种有效的方式来 存储和检索与对象相关的元数据,同时支持按键排序和范围查询。
- osd_pool_default_size:这是指定创建新存储池时的默认副本数量(数据冗余级别)。在这种情况下,osd_pool_default_size 设置为 2,表示每个对象将有两个副本。
- 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]#
备注,上述密钥文件解释说明:
- ceph.bootstrap-mds.keyring:这个文件包含了用于引导(bootstrap) MDS(Metadata Server)的密钥。MDS 是 Ceph 文件系统(CephFS)的一部分,负责管理文件系统的元数据和文件 访问控制。
- ceph.bootstrap-mgr.keyring:这个文件包含了用于引导(bootstrap) Mgr(Manager)的密 钥。Mgr 是 Ceph 的管理器组件,负责收集集群的监控数据和提供集群状态信息的查询接口。
- ceph.bootstrap-osd.keyring:这个文件包含了用于引导(bootstrap) OSD(Object Storage Daemon)的密钥。OSD 是 Ceph 存储集群中的存储守护进程,负责存储和管理对象数据。
- ceph.bootstrap-rgw.keyring:这个文件包含了用于引导(bootstrap) RGW(RADOS Gateway)的密钥。RGW 是 Ceph 的对象存储接口,提供与 S3 和 Swift 兼容的对象存储服务。
- . ceph.client.admin.keyring:这个文件包含了用于 Ceph 管理员客户端的密钥。它是用于管理整个 Ceph 集群的访问权限,可以执行各种集群管理操作。
- 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
要使用 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]#
如果 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
注意: 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
基于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==
回到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
创建pvc
[root@k8s-master ~]# cat ceph-pvc.yaml
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: ceph-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
创建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
注意:
把 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 ~]#
-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==
创建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
创建cephfs-pvc
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: cephfs-pvc
spec:
accessModes:
- ReadWriteMany
volumeName: cephfs-pv
resources:
requests:
storage: 1Gi
创建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
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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!