当前位置: 首页 > news >正文

将ceph文件存储挂载给k8s使用

要将 Ceph 文件存储(CephFS)挂载到 Kubernetes 集群中使用,需通过CephFS-CSI 插件实现动态存储管理,支持 Pod 以ReadWriteMany模式共享存储。以下是详细步骤:

一、前提条件

  1. 已部署 CephFS 集群(参考之前的部署步骤),且存在文件系统(如mycephfs
  2. K8s 集群(1.24 + 版本)已运行,kubectl工具配置正常
  3. 获取 Ceph 集群关键信息:
    • 集群 ID(fsid):在 Ceph 节点执行ceph mon dump | grep fsid | awk '{print $2}'
    • Monitor 地址:如192.168.1.101:6789,192.168.1.102:6789,192.168.1.301:6789
    • CephFS 名称:如mycephfs
    • 数据池名称:如cephfs-data

二、部署 CephFS-CSI 插件(K8s 主节点执行)

1. 创建 Ceph 密钥 Secret

在 K8s 中存储 Ceph 管理员密钥,用于 CSI 插件访问 Ceph 集群:

yaml

# 创建cephfs-secret.yaml
apiVersion: v1
kind: Secret
metadata:name: cephfs-admin-secretnamespace: kube-system
type: kubernetes.io/rook-cephfs
data:# 替换为Ceph admin用户的密钥(base64编码)key: $(ceph auth get-key client.admin | base64)

bash

# 执行创建(会自动替换密钥)
envsubst < cephfs-secret.yaml | kubectl apply -f -
2. 部署 CephFS-CSI 插件

使用官方 CSI 插件部署文件存储驱动:

bash

# 创建工作目录
mkdir -p ~/cephfs-csi && cd ~/cephfs-csi# 下载CSI配置文件(v3.9.0稳定版)
wget https://raw.githubusercontent.com/ceph/ceph-csi/v3.9.0/deploy/cephfs/kubernetes/csi-cephfsplugin.yaml
wget https://raw.githubusercontent.com/ceph/ceph-csi/v3.9.0/deploy/cephfs/kubernetes/csi-cephfsplugin-provisioner.yaml
wget https://raw.githubusercontent.com/ceph/ceph-csi/v3.9.0/deploy/cephfs/kubernetes/csi-cephfsplugin-node.yaml
3. 修改 CSI 配置(关键步骤)

编辑csi-cephfsplugin-provisioner.yaml,替换以下参数(搜索并替换):

yaml

# 在provisioner容器的env中添加
- name: CLUSTER_IDvalue: "替换为Ceph集群ID(fsid)"
- name: MONITORSvalue: "192.168.1.101:6789,192.168.1.102:6789,192.168.1.301:6789"  # 替换为实际Monitor地址# 在volumeMounts中确保挂载密钥
- name: cephfs-csi-configmountPath: /etc/ceph-csi-config
- name: cephfs-admin-secretmountPath: /etc/ceph/admin-secret# 在volumes中添加密钥卷
- name: cephfs-admin-secretsecret:secretName: cephfs-admin-secret
4. 部署 CSI 组件

bash

# 部署CSI插件
kubectl apply -f csi-cephfsplugin.yaml
kubectl apply -f csi-cephfsplugin-provisioner.yaml
kubectl apply -f csi-cephfsplugin-node.yaml# 验证部署(所有Pod状态应为Running)
kubectl get pods -n kube-system | grep cephfs

三、创建 CephFS 存储类(StorageClass)

定义存储类用于动态创建 CephFS 卷:

yaml

# 创建storageclass-cephfs.yaml
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:name: cephfs-sc
provisioner: cephfs.csi.ceph.com
parameters:clusterID: "替换为Ceph集群ID"fsName: "mycephfs"  # CephFS文件系统名称pool: "cephfs-data"  # 数据池名称# 密钥配置csi.storage.k8s.io/provisioner-secret-name: cephfs-admin-secretcsi.storage.k8s.io/provisioner-secret-namespace: kube-systemcsi.storage.k8s.io/node-stage-secret-name: cephfs-admin-secretcsi.storage.k8s.io/node-stage-secret-namespace: kube-system
reclaimPolicy: Delete  # 删除PVC时自动删除卷
allowVolumeExpansion: true  # 支持卷扩容
mountOptions:- discard  # 启用TRIM- noatime  # 禁用访问时间记录(优化性能)

bash

kubectl apply -f storageclass-cephfs.yaml# 验证存储类
kubectl get sc cephfs-sc

四、创建 PVC 并挂载到 Pod

通过 PVC 申请 CephFS 存储,并在 Pod 中使用。

1. 创建 PVC(持久卷声明)

yaml

# 创建cephfs-pvc.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: cephfs-pvc
spec:accessModes:- ReadWriteMany  # 多Pod共享读写(CephFS核心优势)resources:requests:storage: 10Gi  # 申请10GB存储(根据需求调整)storageClassName: cephfs-sc  # 关联存储类

bash

kubectl apply -f cephfs-pvc.yaml# 验证PVC状态(应为Bound)
kubectl get pvc cephfs-pvc
2. 部署 Pod 使用 PVC

yaml

# 创建cephfs-pod.yaml
apiVersion: v1
kind: Pod
metadata:name: cephfs-demo-pod-1
spec:containers:- name: demo-containerimage: nginx:alpinevolumeMounts:- name: cephfs-volumemountPath: /data  # 容器内挂载路径volumes:- name: cephfs-volumepersistentVolumeClaim:claimName: cephfs-pvc  # 引用PVC
---
# 再创建一个Pod共享同一存储
apiVersion: v1
kind: Pod
metadata:name: cephfs-demo-pod-2
spec:containers:- name: demo-containerimage: nginx:alpinevolumeMounts:- name: cephfs-volumemountPath: /datavolumes:- name: cephfs-volumepersistentVolumeClaim:claimName: cephfs-pvc

bash

kubectl apply -f cephfs-pod.yaml# 验证Pod状态(应为Running)
kubectl get pods | grep cephfs-demo

五、验证 CephFS 共享功能

bash

# 在第一个Pod中创建测试文件
kubectl exec -it cephfs-demo-pod-1 -- sh -c "echo 'shared content' > /data/test.txt"# 在第二个Pod中验证文件共享
kubectl exec -it cephfs-demo-pod-2 -- cat /data/test.txt
# 输出应为:shared content,说明共享成功

六、关键配置说明

  1. 访问模式ReadWriteMany(RWX)是 CephFS 的核心优势,支持多 Pod 同时读写,适合日志共享、配置文件存储等场景。

  2. 性能优化

    • mountOptions中添加discard启用 TRIM,释放未使用空间(NVMe SSD 推荐)。
    • noatime禁用文件访问时间记录,减少元数据写入。
    • 如需更高性能,可在 Ceph 集群调整mds_cache_size(元数据缓存)。
  3. 权限控制

    • 生产环境建议创建专用 Ceph 用户(非admin),限制仅访问cephfs-datacephfs-metadata池:

      bash

      # 创建专用用户
      ceph auth get-or-create client.k8s-cephfs mon 'allow r' mds 'allow rw' osd 'allow rw pool=cephfs-data, allow rw pool=cephfs-metadata'
      # 导出密钥并替换Secret中的key字段
http://www.dtcms.com/a/389258.html

相关文章:

  • ENVI系列教程(七)——自定义 RPC 文件图像正射校正
  • 「Java EE开发指南」如何用MyEclipse开发Java EE企业应用程序?(二)
  • Linux -- 传输层协议UDP
  • 使用Android Studio中自带的手机投屏功能
  • LeetCode:19.螺旋矩阵
  • Windows 命令行:在 cd 命令中使用绝对路径与相对路径
  • 图片修改尺寸
  • 《嵌入式硬件(十五):基于IMX6ULL的统一异步收发器(UART)的操作》
  • Python爬虫实战:研究Pandas,构建苏宁易购月饼销售数据采集与智能推荐系统
  • 导购app佣金模式的分布式计算架构:实时分账与财务对账
  • Linux Bash脚本自动创建keystore和生成公钥
  • 数据库管理员偏爱哪些MySQL数据库连接工具?
  • 大数据毕业设计选题推荐-基于大数据的农产品交易数据分析与可视化系统-Spark-Hadoop-Bigdata
  • MySQL C API 的“连接孵化器”-`mysql_init()`
  • oracle 数据库导入dmp文件
  • 第二部分:VTK核心类详解(第28章 vtkMatrix4x4矩阵类)
  • JDK、JRE、JVM 是什么?有什么关系?【Java】
  • Visual Studio 2022创建CPP项目
  • Nginx反向代理+负载均衡
  • React Suspense底层原理揭秘
  • 关于pycharm高版本导入torch的问题
  • 【硬件研讨】【笔记本电脑】给老ThinkPad升级内存
  • 论文Review 3DGS SuGaR | CVPR 2024 | 3DGS 转 Mesh 开源方案!!
  • Makefile学习(一)- 基础规则
  • 动态代理 设计模式
  • APP小程序被攻击了该如何应对
  • 零基础从头教学Linux(Day 37)
  • ADB 在嵌入式 Linux 系统调试中的应用
  • 7HTMLCSS高级
  • 玩游戏/用设计软件提示d3dcompiler_47.dll缺失怎么修复?5步快速定位问题,高效修复不踩坑