目录

前言

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

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

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

2. 添加 OpenEBS Helm 仓库

3. 创建命名空间

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

5. 查看 OpenEBS 运行状态

6. 查看存储类 SC

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

完整 YAML(自定义存储类)

逐字段解释(超清晰)

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

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

2. Ollama 大模型部署会用

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

五、极简总结(背会就能懂 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 重启数据全丢,项目跑不起来!

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐