ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

CephFS 架构解析与 Kubernetes 集成指南

CephFS 架构解析与 Kubernetes 集成指南 教程云原生容器编排【免费下载链接】kubernetes-handbookKubernetes 架构与生态从云原生到 AI 原生基础设施的构建指南项目地址https://gitcode.com/gh_mirrors/ku/kubernetes-handbook点击查看免费下载CephFS 是构建在 Ceph 集群之上、兼容 POSIX 标准的分布式文件系统它让 Kubernetes 中的多个 Pod 可以像使用本地目录一样共享读写同一份数据。本文以 practice/cephfs.md 为核心结合仓库中的 Ceph 与存储相关章节系统讲解 CephFS 的组件分工、两种客户端挂载方式的底层调用链以及在 Kubernetes 中以 Volume 形式使用 CephFS 的配置要点帮助你理解并落地 CephFS 这一高可用共享文件存储方案。CephFS 是什么CephFSCeph File System是一个基于 Ceph 集群实现、兼容 POSIX 标准的文件系统。与普通的本地文件系统不同CephFS 不依赖单台服务器上的物理磁盘而是将数据分布在整个 Ceph 集群的多台节点之上从而获得可扩展性与高可用性。在 Ceph 的统一存储体系中CephFS 与另外两种存储形态并列对象存储由 RADOS 直接提供对象读写或通过 radosgwCeph 对象网关暴露与 Amazon S3、OpenStack Swift 兼容的 RESTful API块存储Ceph RBD在 RADOS 对象存储之上实现的薄层通过 Linux 内核模块或 librbd 库访问供虚拟机与容器挂载块设备文件存储CephFS符合 POSIX 的文件系统使用 Ceph 集群存储数据供多客户端以文件目录方式并发访问。关于 Ceph 生态的整体架构RADOS、OSD、Monitor 等组件可参阅仓库中的 Ceph 介绍 一文。核心架构MDS 与 OSD 的分工创建 CephFS 文件系统时需要在 Ceph 集群中额外添加MDSMetadata Server元数据服务器服务。MDS 与 OSD 各司其职组件职责MDS元数据服务器负责处理 POSIX 文件系统中的metadata元数据部分如文件和目录列表、属性、所有权、权限等文件系统操作OSD对象存储守护进程负责实际的数据存储数据部分交由 Ceph 集群中的 OSDs 处理也就是说当客户端对 CephFS 执行ls、stat、chmod、创建/删除目录等操作时请求由 MDS 处理而真正读写文件内容时数据被切分为对象写入各 OSD。MDS 本身也借助 RADOS 对象来存储文件系统元数据与属性。MDS 具有水平扩展能力——可以向集群中增加更多的元数据服务器以支撑更多的文件系统操作客户端。在通过 Helm 部署 Ceph 集群的场景下见 Ceph Helm 安装指南ceph-mds 是独立的部署单元且需要注意若未给节点打上ceph-mdsenabled标签MDS Pod 会一直处于 Pending 状态CephFS 特性也就无法启用。客户端挂载方式内核模块与 FUSECephFS 支持两种客户端加载方式内核模块方式直接使用 Linux 内核内置的 Ceph 文件系统驱动挂载性能更好FUSE 方式通过用户空间文件系统Filesystem in Userspace挂载无需内核模块支持部署更灵活适合内核版本较旧或不允许加载内核模块的环境。无论采用内核模式还是 FUSE 模式其底层调用链是一致的CephFS 客户端内核模块 / FUSE │ ▼ libcephfs 库 —— 负责 CephFS 文件系统层的协议处理 │ ▼ librados 库 —— 负责与 Ceph 集群MON / OSD通信 │ ▼ Ceph 集群RADOS具体而言两种模式都是通过调用libcephfs库来实现 CephFS 文件系统的加载而 libcephfs 库又调用librados库与 Ceph 集群进行通信从而完成 CephFS 的挂载与读写。这也解释了为什么在 Kubernetes 节点上使用 Ceph 相关存储时通常需要安装ceph-common客户端软件包——它提供了 libcephfs、librados 以及rbd、ceph等命令行工具。Kubernetes 中的 CephFS 卷卷类型与访问模式Kubernetes 原生支持cephfs卷类型允许将现有的 CephFS 卷挂载到容器中详见 concepts/volume.md 中的 cephfs 小节。它与emptyDir等临时卷的本质区别在于生命周期emptyDir卷在 Pod 删除时被清除数据随 Pod 消失cephfs卷的内容在删除 Pod 后依然保留卷仅仅是被卸载。这意味着 CephFS 卷可以预先填充数据也可以在多个工作负载之间切换数据。更重要的是CephFS 支持多个写设备同时挂载因此在访问模式上表现突出——根据 concepts/persistent-volume.md 中的插件能力对照表Volume 插件ReadWriteOnceReadOnlyManyReadWriteManyCephFS✓✓✓相比 Ceph RBD仅支持 RWO/ROX不支持多节点同时读写和本地存储CephFS 是少数原生支持ReadWriteManyRWX多节点读/写的分布式存储方案非常适合需要多副本共享写入的场景如内容管理系统、共享工作区、横向扩展的应用数据目录等。卷配置参数使用cephfs卷时Kubernetes 需要访问 Ceph 集群的相关配置。结合 practice/using-ceph-for-persistent-storage.md 中列出的 Ceph 接入配置项挂载 CephFS 卷通常涉及以下参数配置项含义默认值/说明monitorsCeph monitor 列表必填指定连接哪个 Ceph 集群path作为挂载的根路径默认/userRADOS 用户名默认adminsecretFilekeyring 文件路径默认/etc/ceph/user.secretCeph 集群通常提供ceph.client.admin.keyring文件secretRefCeph 认证 secret 的引用配置了该字段将覆盖secretFilereadOnly文件系统是否只读布尔值默认 false以 Pod 直接引用cephfs卷为例其 spec 结构大致为apiVersion: v1 kind: Pod metadata: name: cephfs-pod spec: containers: - name: app image: nginx volumeMounts: - name: cephfs-data mountPath: /mnt/cephfs volumes: - name: cephfs-data cephfs: monitors: - 172.28.7.98:6789 - 172.28.7.99:6789 - 172.28.7.100:6789 path: /kubernetes user: admin secretFile: /etc/ceph/user.secret readOnly: false重要前提使用 CephFS 之前你必须先拥有自己的 Ceph 服务器集群Kubernetes 本身不负责搭建 Ceph。同时所有需要使用 CephFS 的节点上应安装ceph-common客户端并将ceph.conf放置到节点的/etc/ceph目录下。动态供给为什么 CephFS 需要外置 Provisioner在 Kubernetes 的存储体系中StorageClass 决定 PV 的动态供给能力见 concepts/storageclass.md。Kubernetes 内置了一批 internal provisioner名称前缀为kubernetes.io但并非所有卷插件都具备内置供给能力Volume 插件Internal Provisioner说明RBDCeph Block Device✓使用kubernetes.io/rbd即可动态供给CephFS-无内置 provisioner需要安装外置的 provisionerNFS-同样需外置 provisioner这一点在 practice/ceph.md 中亦有明确说明Kubernetes 自带 Ceph RBD 的 internal provisioner可配置动态供给如果要使用 CephFS 作为动态存储提供需要安装外置的 provisioner例如基于 Ceph CSI 驱动的csi-cephfs插件。对于 RBD 的动态供给仓库中提供了完整落地实践使用 rbd-provisioner 提供 rbd 持久化存储 展示了通过外置 provisionerceph.com/rbd解决 kube-controller-manager 容器化部署时缺少rbd命令导致无法动态创建镜像的问题使用 Ceph 做持久化存储创建 MySQL 集群 则给出了使用kubernetes.io/rbd配合 StorageClass 动态创建 PV 的完整流程包括 Ceph secret 生成、StorageClass 参数monitors、adminId、adminSecretName、pool、userId等与 StatefulSet 中volumeClaimTemplates的组合用法。这些参数的组织思路monitors 列表、认证 secret、池/路径指定同样适用于 CephFS 类存储的配置可作为理解动态供给机制的参考。与 RBD 的选型对比同为 Ceph 生态的存储方案CephFS 与 Ceph RBD 的适用场景有明显差异维度CephFSCeph RBD存储形态文件系统POSIX块设备访问模式RWO / ROX / RWX多写RWO / ROX单写多读挂载方式内核模块 / FUSE经 libcephfs → libradosLinux 内核模块 / librbd动态供给需外置 provisioner内置kubernetes.io/rbd典型场景多 Pod 共享读写、共享工作区数据库等单写者块存储场景仓库中的 MySQL Ceph 持久化实践 即采用 RBD 支撑 Galera 多主 MySQL 集群的单节点读写卷而当你需要多个 Pod 同时读写同一份文件数据时CephFS 的多写特性RWX则是更合适的选择。总结CephFS 的核心设计可以概括为三点MDS 管元数据、OSD 管数据的分离架构内核模块与 FUSE 双通道、libcephfs → librados 统一调用链的客户端模型以及RWO/ROX/RWX 全覆盖、支持多写的访问能力。在 Kubernetes 中它作为原生卷类型可直接挂载使用但要注意其动态供给依赖外置 provisioner。部署时请确保集群中存在已就绪的 MDS 服务如通过 Helm 部署时节点需打上ceph-mdsenabled标签并在所有节点安装ceph-common客户端即可为共享读写型工作负载提供稳定可靠的文件级持久化存储。参考文档CephFS 核心介绍Ceph 分布式存储介绍Volume 卷类型cephfs 小节PersistentVolume 持久化卷与访问模式StorageClass 与 Provisioner 能力对照Ceph Helm 安装指南ceph-mds 部署使用 Ceph 做持久化存储创建 MySQL 集群使用 rbd-provisioner 提供 rbd 持久化存储赞分享教程云原生容器编排【免费下载链接】kubernetes-handbookKubernetes 架构与生态从云原生到 AI 原生基础设施的构建指南项目地址https://gitcode.com/gh_mirrors/ku/kubernetes-handbook点击查看免费下载相关推荐Ceph libcephfs Proxy 架构深度解析libcephfs_proxy.so 与 libcephfsd 如何集中化 CephFS 客户端缓存Ceph libcephfs Proxy 架构深度解析libcephfs_proxy.so 与 libcephfsd 如何集中化 CephFS 客户端缓存 导存储分布式文件系统对象存储后端高可用textgen 本地大模型部署3 条路线、4 个调参点跑通只要 10 分钟textgen 本地大模型部署3 条路线、4 个调参点跑通只要 10 分钟 textgen 是一个本地大模型部署的开源项目聊天、看图、调用工具、OpenA人工智能大模型本地部署模型推理服务AI 应用桌面应用工具调用CephFS 日志急救指南cephfs-journal-tool 全面剖析与实战CephFS 日志急救指南cephfs journal tool 全面剖析与实战 当 CephFS 的元数据日志mdlog因异常断电、对象丢失或人为误操作存储分布式文件系统对象存储后端高可用创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表