OpenShift OKD 实验手册:持久化存储实战

OpenShift OKD 实验手册:持久化存储实战 (MySQL 案例)

1. 实验目标

  • 理解 Kubernetes/OpenShift 中的持久化存储模型:PV (Persistent Volume)PVC (Persistent Volume Claim)
  • 掌握如何在 OpenShift 中配置存储并将其挂载到有状态应用 (MySQL)。
  • 进阶目标:安装 LVM Storage Operator,实现存储的动态按需分配

2. 背景知识

  • 静态存储:管理员手动创建 PV,开发者创建 PVC 绑定。繁琐,不灵活。
  • 动态存储:开发者只需创建 PVC,StorageClass (SC) 会通过 Operator 自动在后端磁盘上创建 PV。
  • LVM Storage (LVMS):利用节点上未使用的磁盘空间(或分区)通过 LVM 技术虚拟化出多个卷,是 SNO 环境动态存储的首选。

3. 核心概念深度解析 (餐厅模型类比)

为了理解这三者的关系,我们可以想象一个餐厅的运行流程:

3.1 PersistentVolume (PV) —— “一盘做好的菜”

  • 定义:PV 是集群中的真实存储资源。它由管理员手动创建(静态)或由 StorageClass 自动创建(动态)。
  • 特点
    • 它是集群级别的资源,不属于任何特定的命名空间。
    • 它有具体的物理属性(如:大小为 10Gi,存储在 /mnt/data 下)。
    • 它的生命周期独立于 Pod。Pod 删了,PV 里的数据依然可以保留。

3.2 PersistentVolumeClaim (PVC) —— “点菜单”

  • 定义:PVC 是用户或应用对存储的请求/声明
  • 特点
    • 它是项目(Namespace)级别的资源。
    • 它不关心底层物理硬盘在哪,它只说:“我需要一个 5GB 的空间,且支持读写(ReadWriteOnce)”。
    • 系统会自动寻找满足要求的 PV 并与之“绑定 (Bound)”。

3.3 StorageClass (SC) —— “自动做菜机/菜单模板”

  • 定义:SC 定义了创建存储的方法。它让系统具备了“动态分配”的能力。
  • 特点
    • 它是一个工厂。当它看到一份 PVC(订单)时,它会根据预设的参数(如:VMware 磁盘类型、加密方式),自动去后端存储拉起一块硬盘,并自动生成对应的 PV。
    • 有了 SC,管理员不再需要手动预创建 PV。

4. 三者的关系图

1. 提交
2. 配置
3. 监控到请求, 自动创建
4. 寻找并绑定
5. 挂载

开发人员

PVC: 存储申请

管理员

StorageClass: 自动分配器

PV: 物理卷实体

应用 Pod

协作流程总结:

  1. 静态模式:管理员手动建 PV -> 用户发 PVC -> 系统匹配绑定。
  2. 动态模式:管理员配置 SC -> 用户发 PVC -> SC 自动生产 PV 并绑定。

5. 资源创建的先后顺序

根据存储分配模式的不同,创建顺序有本质区别:

5.1 动态存储模式 (推荐/自动化)

这种模式下,PV 是“按需生产”的。

  1. StorageClass (SC):管理员预先配置好存储类(工厂)。
  2. PersistentVolumeClaim (PVC):开发人员提交存储申请(订单)。
  3. PersistentVolume (PV)系统自动生成。SC 监测到 PVC 后,自动在后端创建 PV 并完成绑定。
  • 顺序:SC →\rightarrow PVC →\rightarrow PV (自动)

5.2 静态存储模式 (手动/传统)

这种模式下,PV 是“现货供应”的。

  1. PersistentVolume (PV):管理员手动划定物理空间,并定义 PV 对象(入库)。
  2. PersistentVolumeClaim (PVC):开发人员提交存储申请。
  3. 绑定:系统寻找库房中满足 PVC 条件的现有 PV 进行绑定。
  • 顺序:PV →\rightarrow PVC

避坑指南

  • 动态模式下,永远不要手动创建 PV,否则 SC 可能无法接管该卷。
  • 静态模式下,如果你先创建了 PVC 而没有对应的 PV,PVC 会一直处于 Pending(等待)状态。

6. 实操指南:如何编写并运行 YAML 配置

在 OpenShift 中,所有的资源(PV, PVC, Deployment 等)都通过 YAML 文件定义。

6.1 配置文件放哪里?

你可以直接在 132 节点 (SNO 节点) 上创建这些文件。因为该节点已经配置好了 oc 命令工具。

6.2 如何创建文件?

推荐使用 cat 命令快速创建文件(直接复制粘贴以下代码到终端即可):

# 示例:创建 PV 配置文件
cat <<EOF > mysql-pv-static.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
  name: mysql-pv-manual
spec:
  capacity:
    storage: 5Gi
  accessModes:
    - ReadWriteOnce
  persistentVolumeReclaimPolicy: Retain
  hostPath:
    path: /mnt/data/mysql
  storageClassName: manual
EOF

6.3 如何使配置生效?

使用 oc apply 命令将文件内容递交给集群 API:

# 执行此命令后,集群会按照 YAML 描述创建资源
oc apply -f mysql-pv-static.yaml

6.4 如何检查生效状态?

# 查看资源列表及其状态
oc get pv
oc get pvc

7. 第一阶段:基础实践 (手动 PV)

如果您还没有未分配的磁盘,可以使用此方法快速开始。

步骤 1:在节点准备目录

ssh core@192.168.179.132
sudo mkdir -p /mnt/data/mysql
sudo chmod 777 /mnt/data/mysql
sudo chcon -Rt svirt_sandbox_file_t /mnt/data/mysql

步骤 2:创建静态 PV 和 PVC

请依次复制并运行以下两段代码,系统会自动创建 YAML 文件并立即使其生效。

1. 创建并应用 PV (持久化卷)

cat <<EOF > mysql-pv-static.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
  name: mysql-pv-manual
spec:
  capacity:
    storage: 5Gi
  accessModes:
    - ReadWriteOnce
  persistentVolumeReclaimPolicy: Retain
  hostPath:
    path: /mnt/data/mysql
  storageClassName: manual
EOF

oc apply -f mysql-pv-static.yaml

2. 创建并应用 PVC (持久化卷声明)

cat <<EOF > mysql-pvc.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: mysql-pvc
spec:
  storageClassName: manual
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 5Gi
EOF

oc apply -f mysql-pvc.yaml

# 验证状态 (期望结果: Bound)
oc get pv,pvc

8. 第二阶段:进阶实践 (动态存储 - LVM Storage)

这是本实验的核心! 我们将让集群具备“自动生产磁盘”的能力。

步骤 1:安装 LVM Storage Operator

请执行以下代码安装 Operator:

cat <<EOF > lvm-operator-sub.yaml
apiVersion: operators.coreos.com/v1alpha1
kind: Subscription
metadata:
  name: lvms-operator
  namespace: openshift-storage
spec:
  channel: stable-4.21
  installPlanApproval: Automatic
  name: lvms-operator
  source: redhat-operators
  sourceNamespace: openshift-marketplace
EOF

oc apply -f lvm-operator-sub.yaml

步骤 2:创建 LVM 集群配置 (LVMCluster)

cat <<EOF > lvm-cluster.yaml
apiVersion: lvm.topolvm.io/v1alpha1
kind: LVMCluster
metadata:
  name: lvmcluster
  namespace: openshift-storage
spec:
  storage:
    deviceClasses:
    - name: vg1
      thinPoolConfig:
        name: thin-pool-1
        overprovisionRatio: 10
EOF

oc apply -f lvm-cluster.yaml

# 等待 StorageClass 生成
watch oc get sc

步骤 3:使用动态存储部署 MySQL

cat <<EOF > mysql-pvc-dynamic.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: mysql-pvc-dynamic
spec:
  storageClassName: lvms-vg1
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 10Gi
EOF

oc apply -f mysql-pvc-dynamic.yaml

# 验证 PV 是否已自动创建
oc get pvc mysql-pvc-dynamic

5. 验证数据持久性 (通用步骤)

  1. 写入数据
    oc exec -it $(oc get pods -l app=mysql -o name) -- mysql -u root -ppassword123 lab_db -e "CREATE TABLE test (id INT); INSERT INTO test VALUES (100);"
    
  2. 强制销毁 Pod
    oc delete pod -l app=mysql
    
  3. 验证恢复
    等待新 Pod Ready 后执行:
    oc exec -it $(oc get pods -l app=mysql -o name) -- mysql -u root -ppassword123 lab_db -e "SELECT * FROM test;"
    

6. 实验架构图 (Dynamic)

PVC Request

StorageClass: LVM

LVM Operator

LVM Volume Group

Auto-created PV

Physical Disk Partitions

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值