Kubernetes dynamic provisioning 及 glusterfs 对

Ubuntu 20.04 搭建 GlusterFS 冗余存储池实战指南 分布式文件系统是现代基础设施中保障数据高可用的核心技术,其本质是通过多节点协同实现数据冗余、元数据分散与服务自治。GlusterFS 作为轻量级、无中心化元数据服务器(MDS)的典型代表,依托复制卷(replica)机制天然支持跨节点容错,显著降低运维复杂度。相比 Ceph 等强一致性系统,GlusterFS 更适合中小规模、缺乏专职存储团队的生产环境,尤其在边缘计算、CI/CD 制品仓和混合部署场景中展现出快速落地与稳定自愈能力。Ubuntu 20.04 凭借 LTS 长期支持、内核 5.4 对 XFS/ 阅读详情

引言

传统的运维中,往往需要管理员手动先在存储集群分配空间,然后才能挂载到应用中去。Kubernetes 的最新版中,dynamic provisioning 升级到了 beta ,并支持多种存储服务的动态预配置,从而可以更有效地利用存储环境中的存储容量,达到按需使用存储空间的目的。本文将介绍 dynamic provisioning 这一特性,并以 GlusterFS 为例,说明存储服务与 k8s 的对接。


dynamic provisioning:

存储是容器编排中非常重要的一部分。Kubernetes 从 v1.2 开始,提供了 dynamic provisioning 这一强大的特性,可以给集群提供按需分配的存储,并能支持包括 AWS-EBS、GCE-PD、Cinder-Openstack、Ceph、GlusterFS 等多种云存储。非官方支持的存储也可以通过编写 plugin 方式支持。

在没有 dynamic provisioning 时,容器为了使用 Volume,需要预先在存储端分配好,这个过程往往是管理员手动的。在引入 dynamic provisioning 之后,Kubernetes 会根据容器所需的 volume 大小,通过调用存储服务的接口,动态地创建满足所需的存储。


Storageclass:

管理员可以配置 storageclass,来描述所提供存储的类型。以 AWS-EBS 为例,管理员可以分别定义两种 storageclass:slow 和 fast。slow 对接 sc1(机械硬盘),fast 对接 gp2(固态硬盘)。应用可以根据业务的性能需求,分别选择两种 storageclass。


Glusterfs:

一个开源的分布式文件系统,具有强大的横向扩展能力,通过扩展能够支持数 PB 存储容量和处理数千客户端。GlusterFS 借助 TCP/IP 或 InfiniBandRDMA 网络将物理分布的存储资源聚集在一起,使用单一全局命名空间来管理数据。


Heketi:

Heketi(https://github.com/heketi/heketi),是一个基于 RESTful API 的 GlusterFS 卷管理框架。

Heketi 可以方便地和云平台整合,提供 RESTful API 供 Kubernetes 调用,实现多 glusterfs 集群的卷管理。另外,heketi 还有保证 bricks 和它对应的副本均匀分布在集群中的不同可用区的优点。


部署基于 GlusterFS 的 dynamic provisioning

1、安装 GlusterFS。可以参见官方文档,在此不赘述。

2、部署 heketi。本文将以容器化的形式部署 heketi。heketi 的 yaml 如下:

apiVersion: extensions/v1beta1

kind: Deployment

metadata:

 name: heketi

 labels:

   app: heketi

spec:

 replicas: 1

 template:

   metadata:

     labels:

       app: heketi

   spec:

     containers:

     - name: heketi

       image:caicloud: heketi

       ports:

       - containerPort: 8080

       volumeMounts:

       - mountPath: /etc/heketi

         name: heketi-volume

       - mountPath: /root/.ssh

         name: ssh-volume

     volumes:

     - name: ssh-volume

       hostPath:

         path: /root/.ssh # This node must be able to ssh to other nodes.

     - name: heketi-volume

       hostPath:

         path: /root/heketi

     nodeName: {{heketi_node}} # Pinned to node


等 heketi 开始成功运行后,需要将 glusterfs 集群的配置载入,可以通过 curl api 的形式,也可以通过 heketi 的客户端来载入,如 ./heketi-cli load --json=new-cluster.json。new-cluster.json 中定义了 glusterfs 集群的各个节点 IP、可用分区等信息。典型的配置例子:https://github.com/heketi/heketi/blob/master/client/cli/go/topology-sample.json


注意事项:

Heketi 需要使用能够免密 ssh 到 glusterfs 集群所有节点的私钥,并且 heketi 会在 glusterfs 集群将指定的分区格式化,  并调用 pvcreate 和 lvcreate 将分区组装成 volume group。


3、部署 StorageClass


apiVersion: storage.k8s.io/v1beta1

kind: StorageClass

metadata:

name: glusterfs-rep3

provisioner: kubernetes.io/glusterfs

parameters:

resturl: "http://192.168.1.111:8081" //heketi地址,也可以填域名

clusterid: "630372ccdc720a92c681fb928f27b53f" // 可选,要使用的集群id

restuser: "admin" // 可选,authentication 的用户名

secretNamespace: "default" // 可选,authentication 的密码所在的 secret 所在的namespace

secretName: "heketi-secret" // 可选,authentication 的密码所在的 secret

gidMin: "40000" // 能够使用的最小gid,可选,每个 gluster volume 都有唯一的 gid

gidMax: "50000" // 能够使用的最大gid,可选

volumetype: "replicate:3" // 可选,glusterfs 的 volume 类型,数字为副本的数量


这里 volumetype 填了 replicate:3,同理,我们也可以定义其他卷类型的storageclass,比如 disperse:4:2,表示使用纠错卷(disperse),每 4 份 brick 做 2 份冗余。volumetype: none 将会默认使用分布式卷。


4、创建 PVC(Persistent Volume Claim),指定 storageclass,并声明所需存储大小。

apiVersion: v1

kind: PersistentVolumeClaim

metadata:

name: gluster-pvc-10G

annotations:

  volume.beta.kubernetes.io/storage-class: glusterfs-rep3 // 指定storageclass

spec:

accessModes:

 - ReadWriteMany // 可以被多个pod挂载读写

resources:

  requests:

    storage: 10Gi // 指定使用10G大小的存储


创建 pvc 后,Kubernetes 会调用 heketi 的 create volume API。之后 heketi 将会去检查 glusterfs 集群的可用空间。本文指定了 rep3 的 storageclass, 所以需要 3 个节点有至少 10G 的可用磁盘空间。如果满足条件,Kubernetes 则会创建相应大小的 PV (Persistent Volume),并绑定该 PVC。否则,该 PVC 将一直停留在 pending 状态。

本文指定了 3 个副本的 gluster 存储,其实只要将 annotations 中的 storageclass 换个名字,应用就可以使用其他类型的存储,非常方便。


5、验证

PVC 成功绑定 PV 后,可以让应用使用该 PVC 作为存储。我们可以新建一个 debian 的 pod,用来验证,yaml 如下:

apiVersion: v1

kind: Pod

metadata:

 name: gluster-tester

spec:

 containers:

 - name: glusterfs

   image: cargo.caicloud.io/caicloud/debian:jessie

   volumeMounts:

   - mountPath: "/mnt/gluster"

     name: test-vol

   args:

   - tail

   - "-f"

   - "/dev/null"

 volumes:

 - name: test-vol

   persistentVolumeClaim:

     claimName: gluster-pvc-10G


通过 kubectl exec 进入该容器的终端后,就可以在 /mnt/glusterfs 目录下使用 10G 的 glusterfs 存储。因为 gluster-pvc-10G 是 ReadWriteMany(可以被多个 pod 挂载读写)的,所以可以在其他应用中也使用这个 PVC,达到数据共享的目的。

总结

可以看到,有使用存储需求的应用,都只需要声明大小,指定 storageclass,Kubernetes 就可以动态地配置相应大小的存储,应用完全的不需要底层存储的细节。

最后,glusterfs/heketi 相关的yaml 和部署说明可以在https://github.com/heketi/heketi/tree/master/extras/kubernetes 找到。

【信息科学与工程学】【数据中心】第三十五篇 云计算数据中心的学科知识04 编号学科(课程)核心知识点在云计算/云存储/云网络/云安全/云MaaS中的作用代表教材/资料/论文 + 数学方程式列表工业界应用D1421​云原生数据库:TiDB​HTAP(混合事务/分析处理)、分布式SQL、水平扩展、强一致(Raft)、自动故障恢复、与MySQL兼容、TiFlash列式引擎提供弹性扩展的分布式数据库;支撑高并发在线交易与实时分析教材:《TiDB in Action》PingCAP(2020) 论文:《TiDB: A Raft-based HTAP Database》(2017) 阅读详情

相关推荐

【信息科学与工程学】计算机科学与自动化 第二百三十三篇 凤凰架构01

编号类型领域系统软件/硬件或系统集成方案及系统架构模块子模块函数名称/算法名称算法的数学分析及计算机体系架构及数据结构与算法详细设计及参数列表及数值范围设计关联知识1共识算法分布式基石状态机复制架构:Proposer/Acceptor/Learner 多节点角色模型,基于操作转移(Operation Transfer)分布式共识PaxosPaxos 协议(Prepare/Promise/Accept/Accepted 两阶段)数学基础:多数派(Quorum)投票,基于鸽巢原理保证 W+R>N 时读写集合必有

weixin_49199313的博客 267

Dynamic Provisioning原理分析

static provisioning 在kubernetes pod应用中如果有持久化数据的场景,一般会接触到pvc、pv和storageClass这些概念: pvc: 描述的是pod希望使用的持久化存储的属性 pv: 描述的是具体的持久化存储数据卷信息 storageClass: 创建pv的模板 如果在实际中我们要用到nfs作为pod应用的持久化存储,一般会如下几个步骤: nfs server端创建一个目录 创建pv,并配置nfs server和挂载路径 创建pvc,并与上述pv绑定 pod引用上

NUCEMLS的博客 1267

【信息科学与工程学】计算机科学与自动化-——第十五篇云计算 12 公有云里的“多Region + 多AZ“ 02 运营算法01

算法逐步思考推理思考(含数学方程式、对象、资源、任务、进程/协程/线程及对应的代数、约束、目标函数/传递函数/依赖函数、参数及参数的数值范围及边界条件、逐步推理的数学方程式列表、上下文切换、并发/串行/随机/乱序/顺序)算法逐步思考推理思考(含数学方程式、对象、资源、任务、进程/协程/线程及对应的代数、约束、目标函数/传递函数/依赖函数、参数及参数的数值范围及边界条件、逐步推理的数学方程式列表、上下文切换、并发/串行/随机/乱序/顺序)云厂商提高闲置资源利用率。算法复杂度为O(N),N为实例数量。

weixin_49199313的博客 283

kubernetes动态存储之glusterfs集群(heketi)

kubernetes存储类资源的详细实现过程

taonihou_的博客 1373

【信息科学与工程学】计算机科学与自动化——第三百零五篇 数据中心 Scale-Up、Scale-Out、Scale-Across 01

临界带宽B_critical满足:V_orig/B_critical = V_orig/(r·B_critical) + V_orig/R_compress + r·V_orig/R_decompress ⇒ 1/B_critical = 1/(r·B_critical) + 1/R_compress + r/R_decompress ⇒ B_critical = (1 - 1/r) / (1/R_compress + r/R_decompress)。T_original中所有数据均经内存总线传输。

weixin_49199313的博客 476

【信息科学与工程学】计算机科学与自动化——第三百零五篇 数据中心 Scale-Up、Scale-Out、Scale-Across 18

普通CDN在遭遇50Gbps攻击时,节点瘫痪率高达70%。云化安全CDN的零信任模型通过将动态身份验证、最小权限访问与CDN的分布式加速能力深度集成,实现安全与性能的协同优化。云化的安全CDN(如腾讯云EdgeOne)与普通的安全CDN在架构、功能、性能和适用场景上存在显著差异。某视频平台接入腾讯云EdgeOne+零信任方案后,全球平均延迟降至46ms,攻击拦截率99.97%,验证了协同模型在高并发场景的普适性。​:随着边缘计算普及,云化安全CDN将逐步取代传统方案,成为高交互、高安全场景的标配基础设施。

weixin_49199313的博客 1703

kubernetes集群部署GlusterFS分布式文件系统

#1.metadata:data:EOF##2.metadata:true 2d23h定义文件如下,该PVC申请1G空间,StorageClass使用gluster-heketi。PVC一旦生成,系统便触发Heketi进行相应操作:1、GlusterFS集群上创建Brick,再创建Volume。

刘元林的博客 1661

【信息科学与工程学】计算机科学与自动化——第三十五篇 调度理论和调度算法01——资源调度算法

算法逻辑

weixin_49199313的博客 688

使用kubernetes方式部署glusterfs作为kubernetes持久化文件存储

准备四台虚拟机,系统使用centos7,并安装配置好kubernetes集群环境,本次实验使用kubeadm来安装单master多node集群。所有工作节点新挂在一块硬盘,不需要格式化。 [root@k8s-node1 ~]# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 100G 0 disk ├─sda1 8:1 0 300M 0 part /boot ├─sda2 8:2 0 3

myitsite的博客 1835

如何将rvt(BIM)转换为点云格式

1、为什么将BIM转换为点云格式? 如何使设计BIM与真实场景进行配准,分析在建、未建、已建构建的情况,真实场景是通过点云生产的,和点云配准需要相同的格式。 2、如何转换? 实用工具revit,转换过程如下图,这样就可以转换成三角网格形式。 3、FBX还需要进行一次转换,即转换成点云常用的类型,如bin\ply\pcd等格式。 需要软件cloudcompare.exe,软件下载地址百度云 链接:https://pan.baidu.com/s/1pflcKNc04loBnS1yKR39hw 提取码:obaf

self_Name_的博客 4493

AM243x多核MCU启动流程解析与OSPI Flash烧录实战

嵌入式系统开发中,引导加载器是芯片上电后执行的第一段软件,负责初始化硬件、加载操作系统或应用程序。其工作原理通常遵循多级引导链,从ROM固件到用户可定制的二级引导程序,逐级建立完整的软件运行环境。这一机制的技术价值在于实现可靠的系统启动、支持安全校验,并为多核异构架构提供协同基础。在应用场景上,引导加载器广泛应用于工业控制、汽车电子和物联网设备,确保设备能从非易失性存储器中自主启动。本文聚焦于TI AM243x这类高性能多核MCU,深入剖析其包含RBL和SBL在内的三级启动流程,并详细演示如何通过UART接

weixin_28703451的博客 584

Kubernetes dynamic provisioning 及 glusterfs 对接

引言 传统的运维中,往往需要管理员手动先在存储集群分配空间,然后才能挂载到 应用中去。Kubernetes 的最新版中,dynamic provisioning 升级到了 beta ,并支持多种存储服务的动态预配置,从而可以更有效地利用存储环境中的存储容量,达到按需使用存储空间的目的。本文将介绍 dynamic provisioning 这一特性,并以 ...

weixin_34107955的博客 235

若依集成mybatisplus、兼容旧分页【亲测有效】

service类继承ServiceImpl类 实现 你的Service接口。hutool工具包和lombok工具包如果不需要的话可以自行删除并修改后面的类里面的代码。自带的pagehelper用的1.4.6里面的jsqlparser用的4.5.0。mybatis-plus用的3.4.2里面的jsqlparser用的4.0.0。jsqlparser包,不剔除是这样的,有个冲突,我用的前端写的请求,返回的格式和原来的一样,已兼容。你的Entity类上面需要增加表的名字。

lh155136的博客 3567

kubernetes 搭建heketi-glusterfs(自动创建存储卷)

本文包含: gluster各存储卷详解、创建及使用 gluster-kubernetes搭建glusterfs存储 前言 传统的运维中,往往需要管理员手动先在存储集群分配空间,然后才能挂载到应用中去。Kubernetes 的最新版中,dynamic provisioning 升级到了 beta ,并支持多种存储服务的动态预配置,从而可以更有效地利用存储环境中的存储容量,达到按需使用存储空间的...

weixin_40965647的博客 1073

贝叶斯神经网络(Bayesian Neural Network)

最近在研究贝叶斯神经网络,一些概念一直搞不清楚,这里整理一下相关内容,方便以后查阅。

梁小憨憨的博客 3659

LPDDR5 物理层一致性测试(连载・下):电平、过冲下冲与 Rx 接收眼图 Mask 掩模完整指标解读

本文系统梳理LPDDR5物理层一致性测试全流程,涵盖差分/单端电平、边沿斜率、交叉点电压、过冲下冲及CS/CA/DQ接收眼图掩模(Rx Mask)测试,详解各参数定义与工程实操要点。强调配置需与DRAM MR寄存器同步,突出差分≠合格、面积积分不可忽视、掩模失败优先排查参考电压与信号完整性等高频坑点,为硬件调试与SI工程师提供权威参考。

一只豌豆象的博客 51

从概念到落地!K8s 动态卷供应:Local Path Provisioner 与 NFS Provisioner 实操

本文讲解 Kubernetes 动态卷供应原理,对比动态存储相较于静态 PV 的优势,详解 StorageClass 核心作用。结合两类实战场景,分别部署 Local Path Provisioner 本地存储驱动与 NFS Provisioner 网络存储驱动,附带完整 YAML 与操作命令,演示自动创建 PV 的完整流程,帮助读者掌握 K8s 存储自动化落地方案。

2602_95508776的博客 584

用 AI 设计力打造专业 UI_UX:在 Trea、Qoder 等 AI IDE 中集成 ui-ux-pro-max-skill

的核心是知识库Trea 和 Qoder 虽未被--ai all原生支持,但完全可通过@folder手动集成使用后,你的 AI 生成代码将从“功能可用”跃升至“设计专业”这是零成本提升产品质感的最佳实践之一🎨好的 UI 不应是设计师的专利,而是每个开发者的默认能力。然后在 Trea 或 Qoder 中输入—— 让 AI 成为你最懂设计的结对编程伙伴。

lpfasd123的博客 7109

Kubernetes 共享存储:PV、PVC、StorageClass 详解及使用

Kubernetes 共享存储:PV、PVC、StorageClass 详解及使用

liu_chen_yang的博客 2271

YOLO11改进|注意力机制篇|引入MLCA轻量级注意力机制

YOLO11中添加MLCA轻量级注意力机制

A1983Z的博客 4064

你分得清ChatGPT、Gemini、Grok、豆包、千问、DeepSeek、OpenClaw、CloudCode、vibeCodeing、sKill、MCP,飞书、微信这些到底是什么吗?

AI技术生态呈现层级化发展,从基础模型到应用平台形成完整技术栈。核心分为五层:模型层(GPT、Gemini等基础模型)→AI助手层(ChatGPT等应用产品)→工具层(ClaudeCode等开发工具)→协议层(MCP等接口标准)→应用层(微信、飞书等平台)。未来趋势将形成"模型公司-开发框架-应用生态"三层结构,AI正逐步演变为新型操作系统,通过标准化协议连接各类外部系统,实现能力调用与生态整合。技术发展呈现出从底层基础设施到上层应用场景的垂直整合特征。

hy行者勇哥的博客 400

知识点13---k8s存储持久化

Kubernetes存储持久化解决方案摘要(149字) K8s通过存储卷机制解决数据持久化问题,使数据库等有状态应用能够运行。相比localPath方案(仅支持只读且需额外运维),K8s提供了多种专业存储卷类型:包括AWS/Azure云磁盘、CephFS分布式存储、CSI接口卷、临时存储emptyDir、主机路径hostPath等。用户可通过kubectl explain pod.spec.volumes查看当前集群支持的存储选项,每种类型对应不同存储场景,如gitRepo适用于代码仓库,glusterfs

别人笑我太疯癫,我笑他人看不穿。 682

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

云原生技术04-为什么你的Pod无法互相通信?99%是因为没搞懂CNI,Flannel vs Calico vs Cilium:选错网络插件让你的K8s慢成蜗牛

摘要: Kubernetes的CNI与CSI是集群的“血管系统”,选型不当将导致网络性能下降或数据丢失。本文对比三大CNI插件:Flannel(简单轻量,适合中小集群)、Calico(BGP路由,支持大规模与网络策略)、Cilium(eBPF驱动,提供L7安全与可观测性),并给出选型决策树。同时详解CSI存储接口,包括PV/PVC动态供给、StorageClass配置及快照管理。核心建议: 网络:小集群用Flannel,大集群或需策略选Calico,高安全场景用Cilium。 存储:优先动态供给,注意访问模

weitingfu的博客 409

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

使用GlusterFS作为Kubernetes的后端存储

用GlusterFS作为Kubernetes的存储 这里简单的介绍一下使用基于容器化的GlusterFS + heketi作kubernetes的后端存储的部署方式;对于GlusterFS的介绍这里就不多说了;部署过程主要参考:gluster-kubernetes 1、环境 [root@master-0 ~]# kubectl get nodes -o wide NAME STAT...

2469

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

学习笔记-架构的演进之k8s的存储设计-3月day09

文章目录前言Mount 和 VolumeStatic ProvisioningDynamic Provisioning附 前言 Kubernetes 在规划持久化存储能力的时候,依然遵循着它的一贯设计哲学,用户负责以资源和声明式 API 来描述自己的意图,Kubernetes 负责根据用户意图来完成具体的操作。但是,描述清楚用户的存储意图,也不是一件容易的事情,相比 Kubernetes 提供的其他能力的资源,它内置的存储资源其实格外地复杂。(可以说比较繁琐了) 通过以下围绕着“Volume”所衍生出的概念

sinat_22180095的博客 435
上一篇: kubernetes glusterfs heketi
下一篇: Redmine部署以及插件安装
hxpjava1
博客等级 码龄19年 1365粉丝 511原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值