尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
k8s存储与实战
1.下载插件[rootk8s-master ~]# wget https://github.com/ceph/ceph-csi/archive/refs/tags/v3.17.0.tar.gz [rootk8s-master ~]# tar zxf ceph-csi-3.17.0.tar.gz[rootk8s-master ~]# cd ceph-csi-3.17.0/[rootk8s-master ceph-csi-3.17.0]# lsactions build.env deploy.sh go.mod lychee.toml README.md v3AGENTS.md charts docs go.sum Makefile scripts vendorapi cmd e2e internal PendingReleaseNotes.md toolsassets deploy examples LICENSE pkg troubleshootingtipsdeploy # 官方原生yaml部署清单我们实操就用这个├─cephfs/kubernetes # cephfs文件存储csi全部yaml└─rbd/kubernetes # rbd块存储csi全部yaml实际部署我们只用到 2 个位置deploy/cephfs/kubernetes/cephfs 模式rbac、provisioner、nodeplugin、storageclass yaml 全部在这里examples/里面有 pvc 测试模板部署完 csi 后拿这里 yaml 创建 PVC 验证存储是否可用。重点部署 ceph‑csi 有两种方式①手动 apply deploy 下面 yaml②helm 使用 charts 目录不要修改 cmd、pkg 这些源码目录业务部署只操作 deploydeploy 下面分 cephfs文件存储、rbd块存储两套独立 yaml不要混用区分 cephfs vs rbdCephFS文件存储ReadWriteMany 多节点同时读写RBD块存储只能 ReadWriteOnce一个 Pod 挂载2.建立插件需要的secretstipsceph‑csi 要访问外部 Ceph 存储集群K8s 本身不知道 ceph 账号密码所以用 K8s 的 Secret 对象保存 Ceph 的认证信息CSI 的 Provisioner、Node‑plugin Pod 读取这个 Secret拿账号密钥去连接 Ceph Mon实现创建 / 挂载 CephFS 存储所以我们要创建secret.yaml来实现(1)查看ceph集群账号信息[rootstorage-node1 ~]# ceph auth ls #在storage-node1中执行(2)生成secrets将账号信息注入k8s[rootstorage-node1 ceph-csi]# ceph auth get-key client.adminAQCEnZNq7SHBBhAAHr0LxOmCrgZR2nOzH5TfzQ#查看密码[rootk8s-master ~]# kubectl create namespace cephfs#创建命名空间cephfsnamespace/cephfs created [rootk8s-master ~]# cd /root/ceph-csi-3.17/ceph-csi-3.17.0/examples/cephfs/[rootk8s-master cephfs]# lsdeployment.yaml plugin-deploy.sh pod-rwop.yaml pvc.yamlexec-bash.sh plugin-teardown.sh pod.yaml secret.yamlgroupsnapshotclass.yaml pod-clone.yaml pvc-clone.yaml snapshotclass.yamlgroupsnapshot.yaml pod-ephemeral.yaml pvc-restore.yaml snapshot.yamllogs.sh pod-restore.yaml pvc-rwop.yaml storageclass.yaml[rootk8s-master cephfs]# vim secret.yaml#创建secret.yaml---apiVersion: v1kind: Secretmetadata:name: csi-cephfs-secretnamespace: cephfs#设定加密认证信息注入的namespacestringData:# Required for statically and dynamically provisioned volumes# The userID must not include the client. prefix!userID: admin#以集群管理员身份访问ceph集群userKey: AQCaF0Nqod89JxAAetU6barLePZdmgSWYm9zA#给定client.admin密码# Encryption passphraseencryptionPassphrase: test_passphrase3.生成k8s中ceph的配置文件tips创建ceph‑conf.yaml里面两个ConfigMap (CM)k8s 存放非敏感配置明文密码密钥放 Secret不能放 CM第一个cm 会被 ceph‑csi 的 provisioner、nodeplugin Pod 挂载到容器内部作为 ceph 客户端配置ceph.conf 开启 cephx 认证第二个cm存储卷加密 KMS 密钥管理服务的配置卷加密 KMS[rootk8s-master ~]# cd ceph-csi-3.17/ceph-csi-3.17.0/deploy/[rootk8s-master deploy]# vim ceph-conf.yaml---# This is a sample configmap that helps define a Ceph configuration as required# by the CSI plugins.# Sample ceph.conf available at# https://github.com/ceph/ceph/blob/master/src/sample.ceph.conf Detailed# documentation is available at# https://docs.ceph.com/en/latest/rados/configuration/ceph-conf/apiVersion: v1kind: ConfigMapdata:ceph.conf: |[global]auth_cluster_required cephx#ceph 集群开启 cephx 认证所有客户端连接必须使用 cephx 密钥认证ceph‑csi 内部的 librados 库读取这份 ceph.conf告诉客户端集群开启密码验证auth_service_required cephxauth_client_required cephx# enable ceph librbd,librados logs in rbd/cephfs/nfs container logs# log_to_stderr true# debug_rbd 30 # enable debug rbd logs# debug_rados 30 # enable debug rados logs# debug_rbd_mirror 30 # enable debugging logs for rbd mirroring daemon# keyring is a required key and its value should be emptykeyring: |#这里必须留空官方要求metadata:name: ceph-config#ceph‑csi 的 pod yaml 里面硬编码引用这个 cm 名字,不能随便改 因为打开 csi‑cephfs‑provisioner.yaml、csi‑cephfs‑nodeplugin.yaml里面 volumes 卷定义写死了这个 ConfigMap 名字如果要改因为我们是手动 apply yaml可以用helm chart 部署 ceph‑csihelm 支持参数 cephConfConfigMapName可以自定义 ConfigMap 名字helm 会自动渲染 Pod 的 volumes 字段替换成你自定义名字namespace: cephfs#指定配置配置文件注入namespacecsi pod 会挂载它工作流程ceph‑csi Pod 把ceph-config这个 ConfigMap 挂载进容器生成/etc/ceph/ceph.conf配置开启 cephx真正的 userID/userKey 从 Secret 读取不是 cm---apiVersion: v1kind: ConfigMapmetadata:name: ceph-csi-encryption-kms-config#在ceph-csi插件的配置中是要去使用这个名字的CM的名字一定要注意namespace: cephfs#我现在没有开启 ceph 卷加密所以DATA0没有配置数据如果要开启 PVC 加密需要在这个 cm 里面填写 KMS 服务信息不做加密实验创建出来放着即可不影响 cephfs 正常动态供给[rootk8s-master deploy]# kubectl apply -f ceph-conf.yaml[rootk8s-master deploy]# kubectl -n cephfs get cm4.在k8s中安装ceph插件[rootstorage-node1 ceph-csi]# ceph -s#在ceph-node1中查看idcluster:id: 60766dd2-a41f-11f1-9169-000c298dd9f7health: HEALTH_WARN[rootstorage-node1 ceph-csi]# ceph mon stat#查看monitor节点ipe1: 1 mons at {storage-node1[v2:172.25.254.200:3300/0,v1:172.25.254.200:6789/0]} removed_ranks: {} disallowed_leaders: {}, election epoch 9, leader 0 storage-node1, quorum 0 storage-node1[rootk8s-master deploy]# cd ceph-csi-3.17/ceph-csi-3.17.0/deploy/cephfs/kubernetes/[rootk8s-master kubernetes]# vim csi-config-map.yaml#这个cm告诉 CSI Ceph 集群在哪集群 ID 是多少# 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: v1kind: ConfigMapmetadata:name: ceph-csi-config#名字也是固定第三个固定名字的cmnamespace: cephfs#和 csi‑provisioner、csi‑nodeplugin Pod 的命名空间一致data:config.json: |-[{clusterID: 60766dd2-a41f-11f1-9169-000c298dd9f7,#指定集群ID每套集群拥有自己唯一的clusterIDceph‑s 拿到的 fsidmonitors: [172.25.254.200:6789#指定集群位置如果有多个节点换行用“”隔开]}]tipsmon是ceph的监控节点作用维护集群所有状态OSD 上线下线、pool、cephfs、权限处理客户端ceph‑csi、cephfs 挂载连接给客户端下发集群 map多个 mon 之间实时同步集群元数据库Paxos 投票过半同意才生效[rootk8s-master kubernetes]# kubectl apply -f csi-config-map.yamlconfigmap/ceph-csi-config created[rootk8s-master kubernetes]# kubectl get cm -n cephfsNAME DATA AGEceph-config 2 32mceph-csi-config 1 8sceph-csi-encryption-kms-config 0 32mkube-root-ca.crt 1 58m5.更改ns(1)检索本地 yaml 文件里面的文本内容[rootk8s-master ~]# cd ceph-csi-3.17/ceph-csi-3.17.0/deploy/cephfs/kubernetes [rootk8s-master kubernetes]# grep namespace: csi-nodeplugin-rbac.yaml csi-provisioner-rbac.yamltips:RBAC 文件里面所有资源写的都是 namespace: default但是我的 Secret、ceph‑csi‑config ConfigMap 放在了 cephfs 命名空间因为下载的官方 ceph‑csi 原始 yaml全部默认写死运行在 default 命名空间虽然我写 secret、configmap 时手动填了 namespace:cephfs但是官方解压出来的 ceph‑csi RBAC、Deployment 的 yaml没有改ServiceAccount、CSI Pod 依然是default命名空间 a.区分两类 K8s 资源面试必考点集群级别资源不受 namespace 限制ClusterRole、ClusterRoleBinding、StorageClass、CRD全局生效不属于任何 namespace放哪里都没关系。b.命名空间级资源受 namespace 约束Pod、Deployment、ServiceAccount、Secret、ConfigMap(2)修改 RBAC 文件sed -i s/namespace: default/namespace: cephfs/g csi-nodeplugin-rbac.yaml csi-provisioner-rbac.yaml
RELATED

相关推荐

GUI Guider实战:零代码拖拽开发嵌入式温度计UI

GUI Guider实战:零代码拖拽开发嵌入式温度计UI

我用GUI Guider快速写个温度计:从零到一的嵌入式UI开发实战在嵌入式开发中,为设备添加一个直观、美观的用户界面(UI)往往是一个既耗时又需要专业图形设计知识的环节。传统的LVGL(Light and Versatile Graphics Library…

📅 2026/10/29 8:33:01
图像放大技术如何选?从AI超分原理到Luma实测避坑指南

图像放大技术如何选?从AI超分原理到Luma实测避坑指南

图像放大功能升级,最容易让注意力停在“能放大多少倍”上,但真正决定这个功能有没有用的,是放大之后边缘是否干净、纹理是否自然、文字有没有变形、透明通道是否保留。Luma 的图像放大能力最近因为“再升级”这个说法被反复讨论,我…

📅 2026/10/9 1:30:38
C++(21)——特殊类设计

C++(21)——特殊类设计

1. 不能被拷贝的类实现方式:1. 私有化(C98):将拷贝构造函数与赋值运算符重载只声明不定义,并且将其访问权限设置为私有即可原理:1. 只声明不定义:防止类内部不小心调用2. 设置成私有&#xff1a…

📅 2026/9/4 15:07:11
MORE NEWS

更多资讯

📰

基于改进Faster R-CNN的膝关节骨关节炎自动分级系统

1. 项目概述膝关节骨关节炎(Knee Osteoarthritis, KOA)是中老年人群中最常见的退行性关节疾病,全球约有3亿患者。传统诊断主要依赖X光片和医生经验判断,存在主观性强、早期诊断困难等问题。我们基于改进的Faster R-CNN深度学习模型…

📰

集中式空调需求响应信息模型:从对象类到联调落地

简介:电力需求响应依赖标准化的信息模型实现平台与负荷设备之间的语义互操作。集中式空调作为城市中规模最大、热惯性最突出的柔性可调负荷,其对象类、属性与状态机设计是模型建设的样板。通过将冷水机组、输配系统、末端设备映射为统一对象实例&#xf…

📰

激光雷达特征抽取与多传感器融合技术解析

1. 激光雷达特征抽取模块技术解析激光雷达作为自动驾驶感知层的核心传感器,其数据处理流程中的特征抽取环节直接决定了后续目标检测与跟踪的精度。当前主流特征抽取方法可分为四大技术路线,每种方案在计算效率、特征保留完整度等方面各具特色。1.1 基于点…

📰

MCP协议中context-mode的本质与SQLite上下文治理实践

1. “context-mode”不是功能开关,而是MCP协议里的一次语义跃迁最近在好几个技术群里被问到:“context-mode到底是个啥?是不是像VS Code里那个‘智能上下文’开关一样,点一下就开了?”——我一开始也这么以为。直到把M…

📰

激光雷达特征抽取技术解析与智能驾驶应用

1. 激光雷达特征抽取模块技术解析在智能驾驶系统中,激光雷达作为核心传感器之一,其数据处理流程中的特征抽取环节直接决定了环境感知的精度和效率。目前主流的特征抽取方法主要分为四种技术路线,每种方法都有其独特的优势和应用场景。1.1 基于…

📰

营销技能项目化:从抽象能力到可落地技术方案

我无法根据当前输入生成符合要求的博文。原因如下:项目标题 "marketingskills" 过于宽泛、抽象,缺乏具体场景、技术载体或实践指向。它不是一个可落地的项目名称(如“用Python自动化生成小红书爆款标题”“零预算冷启动本地烘焙店私…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬