K8S使用开源CEPH作为后端StorageClass

news/2025/10/29 14:31:28/文章来源:https://www.cnblogs.com/singless233/p/19174351

1 引言

K8S在1.13版本开始支持使用Ceph作为StorageClass。其中云原生存储Rook和开源Ceph应用都非常广泛。本文主要介绍K8S如何对接开源Ceph使用RBD卷。

K8S对接Ceph的技术栈如下图所示。K8S主要通过容器存储接口CSI和Ceph进行交互。

 

 

CSI的官方地址如下

在部署CSI前需要确认好部署的CSI版本,在CSI的官网,我们可以看到CSI版本与K8S之间的对应关系。

 

 

CSI与Ceph之间的对应关系参考以下链接

作者环境的K8S版本为1.24,Ceph版本为14,因此使用3.5.1版本的CSI。下面开始部署。

2 Ceph侧资源创建

[root@ceph-1 ~]# ceph osd pool create k8s 64 64  ##创建k8s存储池
pool 'k8s' created
[root@ceph-1 ~]# ceph auth get-or-create client.k8s mon 'profile rbd' osd 'profile rbd pool=k8s' mgr 'profile rbd pool=k8s'  ##新建一个ceph用户,用户名和key后续需要使用到
[client.k8s]key = AQBClIVj8usBLxAAxTl0DwZCz9prNRRRI9Bl5A==
[root@ceph-1 ~]# ceph -s |grep id  ##查看ceph 的fsidid:     395b7a30-eb33-460d-8e38-524fc48c58cb
[root@ceph-1 ~]# ceph mon stat  #查看ceph的mon服务ip,我们主要采用v1版本的ip和端口
e3: 3 mons at {
ceph-1=[v2:10.0.245.192:3300/0,v1:10.0.245.192:6789/0],
ceph-2=[v2:10.0.138.175:3300/0,v1:10.0.138.175:6789/0],
ceph-3=[v2:10.0.28.226:3300/0,v1:10.0.28.226:6789/0]}, 
election epoch 1112, leader 0 ceph-1, quorum 0,1,2 ceph-1,ceph-2,ceph-3        

3 ceph-csi部署环境准备

主要步骤为下载官方csi部署文件,创建csi需要使用到的configmap及sa、secret。使用到的文件均位于ceph-csi/deploy/rbd/kubernetes/ 目录下,同时会新建以下三个文件用于保存ceph相关配置

  • csi-kms-config-map.yaml
  • ceph-config-map.yaml
  • csi-rbd-secret.yaml
[root@k8s-master02 ~]# wget https://github.com/ceph/ceph-csi/archive/refs/tags/v3.5.1.tar.gz ##本次实验ceph版本为14,使用3.5.1版本有较好的兼容性
[root@k8s-master02 ~]# tar xvf v3.5.1.tar.gz
[root@k8s-master02 ~]# mv ceph-csi-3.5.1 ceph-csi
[root@k8s-master02 ~]# cd /root/ceph-csi/deploy/rbd/kubernetes/
[root@k8s-master02 kubernetes]# cat csi-config-map.yaml ##编辑config-map文件
#
# /!\ DO NOT MODIFY THIS FILE
#
# This file has been automatically generated by Ceph-CSI yamlgen.
# The source for the contents can be found in the api/deploy directory, make
# your modifications there.
#
---
apiVersion: v1
kind: ConfigMap
metadata:name: "ceph-csi-config"
data:config.json: |-[{"clusterID": "395b7a30-eb33-460d-8e38-524fc48c58cb",  #ceph -s输出的id"monitors": ["10.0.245.192:6789",  ##三个mon服务的ip地址"10.0.138.175:6789","10.0.28.226:6789"]}]
[root@k8s-master02 kubernetes]# kubectl create ns ceph-csi  ##创建namespace
namespace/ceph-csi created
[root@k8s-master02 kubernetes]# kubectl -n ceph-csi create -f csi-config-map.yaml 
configmap/ceph-csi-config created
[root@k8s-master02 kubernetes]# cat csi-kms-config-map.yaml ##新建kms-config文件
---
apiVersion: v1
kind: ConfigMap
data:config.json: |-{}
metadata:name: ceph-csi-encryption-kms-config
[root@k8s-master02 kubernetes]# kubectl create -n ceph-csi -f csi-kms-config-map.yaml 
configmap/ceph-csi-encryption-kms-config created
[root@k8s-master02 kubernetes]# cat ceph-config-map.yaml ##新建一个ceph-config文件,ceph.conf中的内容与ceph集群中/etc/ceph/ceph.conf的内容保持一致
---
apiVersion: v1
kind: ConfigMap
data:ceph.conf: |[global]fsid = 395b7a30-eb33-460d-8e38-524fc48c58cbpublic_network = 10.0.0.0/16cluster_network = 10.0.0.0/16mon_initial_members = ceph-1mon_host = 10.0.245.192auth_cluster_required = cephxauth_service_required = cephxauth_client_required = cephxmon_allow_pool_delete = trueauth_allow_insecure_global_id_reclaim = falserbd_default_format = 2# keyring is a required key and its value should be emptykeyring: |
metadata:name: ceph-config
[root@k8s-master02 kubernetes]# kubectl -n ceph-csi create -f ceph-config-map.yaml 
configmap/ceph-config created
[root@k8s-master02 kubernetes]# cat csi-rbd-secret.yaml ##新建一个secret文件
apiVersion: v1
kind: Secret
metadata:name: csi-rbd-secretnamespace: ceph-csi
stringData:userID: k8s   ##ceph集群上创建额用户userKey: AQBClIVj8usBLxAAxTl0DwZCz9prNRRRI9Bl5A==  ##用户的key
[root@k8s-master02 kubernetes]# kubectl create -f csi-rbd-secret.yaml 
secret/csi-rbd-secret created  
[root@k8s-master02 ~]# sed -i "s/namespace: default/namespace: ceph-csi/g"  $(grep -rl "namespace: default" ./)  #将所有yaml文件的namespace从default改成ceph-csi
[root@k8s-master02 kubernetes]# cat csi-provisioner-rbac.yaml ##检查配置文件中namespace是否更改成功
---
apiVersion: v1
kind: ServiceAccount
metadata:name: rbd-csi-provisioner# replace with non-default namespace namenamespace: ceph-csi ---
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:name: rbd-external-provisioner-runner##创建rbac权限
[root@k8s-master02 kubernetes]# kubectl create -f csi-provisioner-rbac.yaml 
serviceaccount/rbd-csi-provisioner created
clusterrole.rbac.authorization.k8s.io/rbd-external-provisioner-runner created
clusterrolebinding.rbac.authorization.k8s.io/rbd-csi-provisioner-role created
role.rbac.authorization.k8s.io/rbd-external-provisioner-cfg created
rolebinding.rbac.authorization.k8s.io/rbd-csi-provisioner-role-cfg created
[root@k8s-master02 kubernetes]# kubectl create -f csi-nodeplugin-rbac.yaml 
serviceaccount/rbd-csi-nodeplugin created
clusterrole.rbac.authorization.k8s.io/rbd-csi-nodeplugin created
clusterrolebinding.rbac.authorization.k8s.io/rbd-csi-nodeplugin created

4 部署ceph-csi相关容器

yaml中的镜像源需要替换,否则部署时镜像可能下载不成功。如果部署其他版本的csi,可以自己设置通过阿里云容器镜像服务托管下载中相关csi版本的镜像。

[root@k8s-master02 kubernetes]# sed -i 's#k8s.gcr.io/sig-storage/#registry.cn-shanghai.aliyuncs.com/singless/#' csi-rbdplugin*  ##替换yaml里的镜像源
[root@k8s-master02 kubernetes]# kubectl -n ceph-csi create -f csi-rbdplugin-provisioner.yaml ##部署sidecar容器,yaml文件里的所有镜像地址修改为registry.cn-shanghai.aliyuncs.com/singless/
service/csi-rbdplugin-provisioner created
deployment.apps/csi-rbdplugin-provisioner created
[root@k8s-master02 kubernetes]# kubectl -n ceph-csi create -f csi-rbdplugin.yaml ##部署RBD CSI driver容器
daemonset.apps/csi-rbdplugin created
service/csi-metrics-rbdplugin created
[root@k8s-master02 kubernetes]# kubectl get pod -n ceph-csi  ##检查pod是否都已启动
NAME                                         READY   STATUS    RESTARTS   AGE
csi-rbdplugin-8s6cf                          3/3     Running   0          60m
csi-rbdplugin-g74qd                          3/3     Running   0          60m
csi-rbdplugin-provisioner-56d6d755c7-jhcwl   7/7     Running   0          14m
csi-rbdplugin-provisioner-56d6d755c7-lz2zf   7/7     Running   0          14m
csi-rbdplugin-provisioner-56d6d755c7-pxw7q   7/7     Running   0          14m
csi-rbdplugin-twjdh                          3/3     Running   0          60m
csi-rbdplugin-v529x                          3/3     Running   0          60m
csi-rbdplugin-wgh5c                          3/3     Running   0          60m

5 创建StorageClass

[root@k8s-master02 kubernetes]# cat storageclass.yaml 
---
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:name: csi-rbd-sc
provisioner: rbd.csi.ceph.com
parameters:clusterID: 395b7a30-eb33-460d-8e38-524fc48c58cb  ##ceph集群IDpool: k8s   ##ceph集群的pool名imageFeatures: layering  ##定义创建的rbd featurescsi.storage.k8s.io/provisioner-secret-name: csi-rbd-secretcsi.storage.k8s.io/provisioner-secret-namespace: ceph-csicsi.storage.k8s.io/controller-expand-secret-name: csi-rbd-secretcsi.storage.k8s.io/controller-expand-secret-namespace: ceph-csicsi.storage.k8s.io/node-stage-secret-name: csi-rbd-secretcsi.storage.k8s.io/node-stage-secret-namespace: ceph-csicsi.storage.k8s/fstype: ext4
reclaimPolicy: Delete
allowVolumeExpansion: true
mountOptions:- discard
[root@k8s-master02 kubernetes]# kubectl create -f storageclass.yaml 
storageclass.storage.k8s.io/csi-rbd-sc created

6 创建PV

[root@k8s-master02 kubernetes]# cd /root/ceph-csi/examples/rbd/
[root@k8s-master02 rbd]# kubectl create -f pvc.yaml 
persistentvolumeclaim/rbd-pvc created

本文主要介绍K8S对接Ceph使用RBD块的方法,对象存储或文件存储可以参考官方文档进行对接。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/949892.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2025 年锅炉厂家最新推荐榜:智能控制与稳定可靠品牌综合测评结果及优质厂商名单电锅炉/蒸汽锅炉/燃气锅炉/燃油锅炉/电蒸汽锅炉公司推荐

引言 随着工业、商业及民生领域热能需求激增,锅炉设备的性能与品质愈发关键。为帮助企业精准筛选优质品牌,特种设备安全与节能协会联合行业权威机构开展 2025 年锅炉制造商综合测评,本次测评覆盖全国 120 余家主流厂…

Python自动化之Docx文档处理(二)

1 基本概念 1.1 python-docx-template模块 虽然前面提到的python-docx模块让我们能使用python代码写word,但正常情况下我们写word文档肯定都是直接使用office或wps之类的办公软件。更常用的需求是拿到一个word模板,用…

Python自动化之Docx文档处理(一)

1 基本概念 1.1 python-docx模块 相信大家在日常工作中,免不了要处理word文档,今天就介绍一个能通过python处理word文档的模块,python-docx[1]。 安装python-docx模块pip install python-docx然后通过官方的python代…

替换 Android APEX 下属动态库的方法

先确定要替换的库属于哪个 APEX 包,再替换库文件所属的整个 APEX 包。只单独替换 APEX 包下的库文件,会导致系统无法启动。Qidi Huang 2025.10.29 1. 确定要替换的库属于哪个 APEX 包 比如要替换 libaudioroute.so,…

配置管理工具-Confd

1 简介 1.1 Confd介绍 Confd是一个轻量级的配置管理工具。通过查询后端存储,结合配置模板引擎,保持本地配置最新,同时具备定期探测机制,配置变更自动reload。对应的后端存储可以是etcd,redis、zookeeper等。[1] 通…

探索Go语言性能优化:全面解析pprof工具

摘自:https://baijiahao.baidu.com/s?id=1846491710332725792&wfr=spider&for=pc go pprof作为Go语言性能优化的得力工具,其重要性不言而喻。然而,对于许多开发者来说,如何解读profile信息并有效利用ppro…

Bcache详解及踩坑记录

关注公众号 singless ,后台回复bcache,获取bcache相关资料1 介绍 1.1 背景介绍 Bcache是Linux内核块设备层的软件驱动,使用高速存储设备为传统机械磁盘做IO缓存,经常访问的热数据会缓存在固态硬盘中并直接返回给应…

HDD介质OSD新增SSD或NVME类型的DB或WAL分区

关注公众号singless,后台回复ceph可以获取文中相关脚本。 1 介绍 在ceph中,BlueStore使用RocksDB key-value数据库来管理内部元数据,比如从对象名称到磁盘上块位置的映射。一个对象的元数据在bluestore内称为Onode。…

什么是跨网域资源共享(CROS)

1 同源策略 浏览器的同源策略 - Web 安全 | MDNdeveloper.mozilla.org/zh-CN/docs/Web/Security/Same-origin_policy 同源策略是一种重要的安全机制,它限制一个源加载的文档或脚本如何与另一个源的资源进行交互。同源…

【生活】选购油烟机

前言: 主包家里的厨房在六楼,油烟可以直接从墙上预留通风口排出,所以以下内容是按主包的实际需求出发的性价比公式风量(\(m^3 / min\)):也就是吸力,经常爆炒的至少 20 \(m^3 / min\) 最好 静压(\(Pa\)):也就…

从经验到数据:MyEMS 如何推动能源管理的范式升级?

在 “双碳” 目标深化推进与能源结构转型加速的背景下,能源管理已从传统的 “降本降耗” 单一诉求,升级为 “效率提升、低碳转型、安全保障” 三位一体的核心需求。然而,长期以来,我国工业、建筑、园区等领域的能源…

2025 年试压泵厂家最新推荐榜,技术实力与市场口碑深度解析,展现国产设备卓越性能四缸电动/三缸电动/水管/大流量电动/柴油动力试压泵公司推荐

引言 为精准筛选出 2025 年试压泵领域兼具技术实力与市场认可度的优质品牌,通用机械工业协会泵业分会联合行业权威检测机构,开展了为期 3 个月的专项测评。测评采用 “多维量化 + 实地考察” 双轨模式,从企业综合实…

Ceph运维手册(基于P版本)

本文基于Ceph P版,适用于ceph-deploy部署非容器化部署场景。 完整版PDF下载链接请点击以下链接 https://mp.weixin.qq.com/s/57zn-a4zZ4Dc2mBhsa23PQ 修订记录版本 时间 修订人V1.0 2024年03月06号 singless目录 一、…

2025最新AI智能体学习路线图

零基础如何入门AI智能体?智能体来了为你梳理完整学习路径。 🧠智能体来了课程主体线路下图描绘了智能体学习的整体思路,细节内容颇多,今天给各位看官讲解部分,关注博主,详细细节后续会持续更新。大纲打造旨在解…

K8S如何查询PVC的已用容量和剩余可用容量

在业务中如果有数据持久化存储的需求就免不了要使用到PV、PVC,既然使用了PV和PVC那么它们的容量使用情况也是我们需要关注的。目前K8S并未提供接口让我们可以直接查询到PVC的容量使用情况,因此本文主要介绍K8S环境下…

学术会议会议合集 | 人工智能、未来教育 、智能控制 、计算科学 、传感器技术等EI会议合集

人工智能、未来教育 、智能控制 、计算科学 、传感器技术等EI会议合集2025年第二届人工智能与未来教育国际学术会议(AIFE 2025) 2025 2nd International Conference on Artificial Intelligence and Future Educatio…

完整教程:金融分析师技能提升路径与学习资源指南

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

2025 年水磨石厂家最新推荐榜,技术实力与市场口碑深度解析水磨石预制板/人造水磨石/水磨石地砖/水磨石成品地砖/彩色水磨石地砖公司推荐

随着无机水磨石、预制板等细分品类需求激增,市场品牌分化加剧。为破解采购难题,本次榜单依托建筑材料流通协会地坪委员会 2025 年度测评数据,采用 "四维评估体系":生产实力(占比 30%)涵盖厂房规模与自…

Unreal:如何调用DLL

说说我的方法吧,不知道正不正确,但是能用,哈哈哈哈,跟着官方的第三方库弄的打包dll那一套我就不赘述了,就说说拿到DLL和Lib怎么办 以官方模板创建得插件TestThird为例 将dll,lib文件放到TestThird\Source\ThirdP…

建筑矿山设备工厂:MyEMS 如何助力实现 30% 能源自给率与 ISO 50001 认证?

建筑矿山设备工厂作为典型的高能耗制造场景,其生产流程涉及大型机床加工、热处理、焊接、装配等环节,对电力、热力、燃料的需求旺盛。近年来,在 “双碳” 目标与能源成本上涨的双重压力下,工厂不仅需要降低对传统化…