- ceph 与 kubernetes 集成
- ceph 与 kubernetes 集成概述
- ceph 与 volumes 结合
- ceph 与 pv pvc 结合
- ceph 与 storageClass 结合
1.0 ceph 与 kubernetes 集成
1.1 ceph 与 kubernetes 集成概述
- 在 K8S 集群中,比较麻烦的是: 有状态服务持久化,并且保证高可用,面临的问题:
- 有状态服务 Pod 消亡时,持久化数据能够立刻转移到新拉起的 Pod
- 持久化数据本身读写的高可用
- ceph 分布式存储就是解决问题2。同时使用独立的分布式存储集群,分离 PV 与 工作节点的耦合,确保 PV 能够转移给新的 Pod,解决问题1
- kubernetes 和 ceph 集成提供了三种实现方式:
- volumes存储卷 <volumes结合>
- PV/PVC持久化卷/持久化声明 <PV/PVC结合>
- storageClass动态存储类,动态创建PV和PVC <storageClass结合>
2.0 ceph 与 volumes 结合
- 缺点: 管理员需要知道每一个 volumes 的细节
- RBD example
- ceph 与 kubernetes volumes 集成文档:
- https://github.com/kubernetes/examples/tree/master/volumes/rbd
1 | // 所有 k8s 节点都需要安装 |
2.1 创建 secrets 对象
1 | [root@k8s-master01 ~]# cat ceph-secret.yaml |
2.2 创建 rbd 块
1 | [root@ceph-node01 ~]# rbd create kubernetes/volumes-rbd.img --size 10G |
1 | // pod 中引用 RBD volumes |
3.0 ceph 与 pv pvc 结合
- 预先将存储空间划分好
- pool、镜像、用户认证、secrets 参考 2.0
3.1 创建 pv、pvc
1 | // 创建块 |
3.2 容器引用 pvc 存储
- 容器通过 pvc 调用存储
1 | // 需要确认 kubernetes/ceph-pv-rbd.img 是否为 "features: layering" |
4.0 ceph 与 storageClass 结合
- 准备工作: pool 创建、用户创建 <2.0已经创建好了>
4.1 ceph csi 驱动安装
1 | // 生成 ceph-csi configmap 文件 |
4.1.1 认证 key 配置
1 | [root@ceph-node01 ~]# ceph auth get client.kubernetes # 查询 key |
4.1.2 创建 sa 和 rbac
- 下载对应 kubernetes 的版本。[kubernetes v1.28.0、ceph csi v3.11.0,如 k8s 版本迭代升级更新,ceph 版本不兼容,可能会出现兼容异常!!!]
- 上面 6 个文件中,只有 “csi-rbdplugin.yaml” 文件需要添加几行内容,如下。
1 | [root@k8s-master01 csi]# cat csi-rbdplugin.yaml |
1 | [root@k8s-master01 csi]# ls |
4.2 pvc 动态申请空间
- Kubernetes StorageClass定义了一类存储。可以创建多个 StorageClass 对象来映射到不同的服务质量级别(即 NVMe 与基于 HDD 的池)和功能
1 | [root@ceph-node01 ~]# ceph -s |
4.2.1 块存储
1 | [root@k8s-master01 ceph-kubernetes]# cat raw-block-pvc.yaml |
4.2.2 文件系统
1 | [root@k8s-master01 ceph-kubernetes]# cat fs-pvc.yaml |
4.2.3 sts 的 pvc
1 | [root@k8s-master01 ceph-kubernetes]# cat nginx.yaml |
- 本文作者: [email protected]
- 本文链接: https://www.ink8s.com/2025/07/17/ceph-与-kubernetes-集成/
- 版权声明: 本博客所有文章除特别声明外,均采用 MIT 许可协议。转载请注明出处!