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 重启数据全丢,项目跑不起来!

相关推荐
再ZzZ3 小时前
Docker快速部署Kafka(内网通用版本)
docker·容器·kafka
亚马逊云开发者3 小时前
告别手动部署:在 Amazon EKS 上用 CodePipeline + Argo CD 搭建 GitOps CI/CD
elasticsearch·ci/cd·kubernetes
@atweiwei3 小时前
深入解析gRPC服务发现机制
微服务·云原生·rpc·go·服务发现·consul
AI精钢6 小时前
什么是面向 Agent 的 LLM?从 Qwen3.6-Plus 看大模型的新分水岭
网络·数据库·人工智能·云原生·aigc
AI精钢7 小时前
从 Prompt Engineering 到 Fine-Tuning:LLM 应用落地的理性决策框架
大数据·人工智能·云原生·prompt·aigc
正经教主8 小时前
安全养虾:[windows]Docker部署OpenClaw详细过程记录
安全·docker·容器
程序员 沐阳8 小时前
Docker 命令完全指南:从入门到实战
docker·容器·eureka
繁星星繁8 小时前
Docker(一)
java·c语言·数据结构·c++·docker·容器·eureka
Riu_Peter8 小时前
【技术】Docker 释放空间
运维·docker·容器