OpenEBS + PV/PVC 解析:命令、文件、作用、后续用法

目录

前言

[一、先搞懂 4 个核心概念(必须先看)](#一、先搞懂 4 个核心概念(必须先看))

二、逐行解析:你执行的每一条命令

[1. 安装 iSCSI 客户端(三节点都要执行)](#1. 安装 iSCSI 客户端(三节点都要执行))

[2. 添加 OpenEBS Helm 仓库](#2. 添加 OpenEBS Helm 仓库)

[3. 创建命名空间](#3. 创建命名空间)

[4. 安装 OpenEBS(核心存储服务)](#4. 安装 OpenEBS(核心存储服务))

[5. 查看 OpenEBS 运行状态](#5. 查看 OpenEBS 运行状态)

[6. 查看存储类 SC](#6. 查看存储类 SC)

[三、逐字段解析:你写的 StorageClass YAML](#三、逐字段解析:你写的 StorageClass YAML)

[完整 YAML(自定义存储类)](#完整 YAML(自定义存储类))

逐字段解释(超清晰)

[四、最重要:PV / PVC / SC 后面到底哪里用?](#四、最重要:PV / PVC / SC 后面到底哪里用?)

[1. MySQL 部署会用(最核心)](#1. MySQL 部署会用(最核心))

[2. Ollama 大模型部署会用](#2. Ollama 大模型部署会用)

[3. 所有需要持久化的服务都会用](#3. 所有需要持久化的服务都会用)

[五、极简总结(背会就能懂 PV 全套)](#五、极简总结(背会就能懂 PV 全套))


前言

我在部署 K8s 项目时,对 PV、PVC、StorageClass、OpenEBS 完全分不清:每个命令是干嘛的?每个 YAML 字段啥意思?配置完后面哪里用?


一、先搞懂 4 个核心概念(必须先看)

  1. PV (PersistentVolume):真实的存储空间(相当于 "硬盘")
  2. PVC (PersistentVolumeClaim):Pod 申请使用存储的 "申请单"
  3. StorageClass (SC):存储 "模板 / 分类",自动创建 PV
  4. OpenEBS:K8s 存储服务,负责把节点本地目录变成 K8s 可用存储

二、逐行解析:你执行的每一条命令

1. 安装 iSCSI 客户端(三节点都要执行)

复制代码
sudo dnf install -y iscsi-initiator-utils
  • 作用:安装 K8s 存储必备依赖工具
  • 服务功能:让节点能挂载远程 / 本地块存储
  • 文件类型:系统依赖安装
  • 后续用途:OpenEBS 运行依赖,不装后面 PVC 无法挂载

2. 添加 OpenEBS Helm 仓库

复制代码
helm repo add openebs https://openebs.github.io/charts
helm repo update
  • 作用:让 Helm 能下载 OpenEBS 存储安装包
  • 服务功能:Helm 应用仓库配置
  • 文件类型:仓库配置
  • 后续用途:安装 OpenEBS 必须先加仓库

3. 创建命名空间

复制代码
kubectl create namespace openebs
  • 作用:给 OpenEBS 单独创建运行空间
  • 服务功能:K8s 资源隔离
  • 文件类型:命名空间
  • 后续用途:所有 OpenEBS 组件都跑在这个 ns 里

4. 安装 OpenEBS(核心存储服务)

复制代码
helm install openebs openebs/openebs \
--namespace openebs \
--set localprovisioner.enabled=true \
--set jiva.enabled=false \
--set cstor.enabled=false \
--set nfs-provisioner.enabled=false \
--set zfs-localpv.enabled=false \
--set lvm-localpv.enabled=false
  • 作用:安装轻量 OpenEBS 本地存储服务
  • 服务功能
    • localprovisioner:本地目录存储服务(核心)
    • 其他全部关闭:节省资源、避免报错
  • 文件类型:Helm 部署服务
  • 后续用途
    • 为 MySQL 提供持久化存储
    • 为 Ollama 提供模型文件存储
    • 所有需要持久化的 Pod 都靠它

5. 查看 OpenEBS 运行状态

复制代码
kubectl get pod -n openebs -w
  • 作用:实时看存储服务是否启动成功
  • 服务功能:状态检查
  • 文件类型:检查命令
  • 后续用途:确保 SC 正常,否则 PVC 无法绑定

6. 查看存储类 SC

复制代码
kubectl get sc
  • 作用:查看自动生成的存储模板
  • 服务功能:查看 SC 资源
  • 文件类型:查询命令
  • 后续用途 :确认 openebs-hostpath 存在,才能创建 PVC

三、逐字段解析:你写的 StorageClass YAML

完整 YAML(自定义存储类)

复制代码
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: openebs-hostpath-retain
  annotations:
    openebs.io/cas-type: "local-hostpath"
    cas.openebs.io/config: |
      - name: StorageType
        value: "hostpath"
      - name: BasePath
        value: "/var/openebs/local/"
provisioner: openebs.io/local
reclaimPolicy: Retain
volumeBindingMode: WaitForFirstConsumer

逐字段解释(超清晰)

表格

字段 作用 文件类型 后续用途
kind: StorageClass 定义存储类 K8s 存储策略 用于自动创建 PV
name: openebs-hostpath-retain 存储类名称 策略名称 PVC 里指定使用这个 SC
openebs.io/cas-type: local-hostpath 使用 OpenEBS 本地目录存储 存储类型配置 告诉 OpenEBS 使用本地路径
BasePath: /var/openebs/local/ 数据存在节点该目录下 存储路径配置 PV 实际数据位置
provisioner: openebs.io/local OpenEBS 存储驱动 驱动配置 K8s 用它创建 PV
reclaimPolicy: Retain PVC 删除后数据保留 回收策略 生产必备,防止数据丢失
volumeBindingMode: WaitForFirstConsumer 等 Pod 调度后再绑定 PV 绑定策略 本地存储必须加,否则调度失败

四、最重要:PV / PVC / SC 后面到底哪里用?

1. MySQL 部署会用(最核心)

MySQL 的 YAML 里会写:

yaml

复制代码
volumes:
  - name: mysql-data
    persistentVolumeClaim:
      claimName: mysql-pvc

然后 PVC 里会指定:

复制代码
storageClassName: openebs-hostpath 或 openebs-hostpath-retain
  • 作用:让 MySQL 使用 OpenEBS 存储
  • 结果:MySQL 重启数据不丢失

2. Ollama 大模型部署会用

Ollama 存储模型文件必须用 PVC + OpenEBS

  • 不配置:重启容器,模型重新下载,非常慢

3. 所有需要持久化的服务都会用

包括:

  • 数据库
  • 缓存
  • AI 模型
  • 日志存储

五、极简总结(背会就能懂 PV 全套)

  1. OpenEBS = 存储服务
  2. StorageClass(SC) = 存储模板
  3. PV = 真实硬盘空间
  4. PVC = Pod 申请存储
  5. 你刚才配置的所有内容 = 为后面 MySQL、Ollama 提供持久化存储

一句话:不配置这块,Pod 重启数据全丢,项目跑不起来!

相关推荐
eEKI DAND10 小时前
对Docker部署的MySQL中的数据进行备份恢复
mysql·docker·容器
阿里云云原生11 小时前
给 OpenClaw 加上企业级 Memory,你的 Agent 终于不用再问第二遍
云原生
平行云13 小时前
虚拟直播混合式2D/3D应用程序实时云渲染推流解决方案
linux·unity·云原生·ue5·图形渲染·实时云渲染·像素流送
longerxin202013 小时前
kubeasz 快速指南:一键部署 Kubernetes-k8s 测试环境
云原生·容器·kubernetes
cyber_两只龙宝14 小时前
【Oracle】 Oracle之SQL的子查询
linux·运维·数据库·sql·云原生·oracle
米高梅狮子14 小时前
03.Kubernetes自动化部署和namespace、pod
容器·kubernetes·自动化
特长腿特长14 小时前
LVS_DR 模式的原理
linux·运维·网络·云原生·centos·lvs
Sirius Wu15 小时前
Docker 镜像的构建、打包、变更、再次打包全流程
运维·docker·容器
Zhu75816 小时前
【软件部署】docker环境部署domino
运维·docker·容器
努力的搬砖人.19 小时前
配置 Docker 镜像加速器
运维·docker·容器