OKD 实战:基于 LVM 动态存储部署 MinIO 及多端口 (纯 CLI 版)
摘要:在云原生架构中,命令行操作(CLI)是实现自动化与可重复性的核心。本文详细记录了在 OKD SNO 环境下,如何通过
oc工具完成从动态存储申请到 MinIO 多端口部署的全过程。
1. 架构图解
1.1 存储与流量转发逻辑
2. 什么是 PVC (持久化卷声明)?
- 定义:PVC 是用户对存储资源的“申请书”。
- 解耦:开发者只需声明容量和访问模式,无需关心底层存储硬件。
- 动态性:配合 StorageClass,系统可自动在 LVM 卷组中切分物理空间并绑定。
3. 部署全过程 (纯命令行实战)
3.1 准备命名空间
oc new-project minio-storage
命令解释:
oc new-project: 创建一个新的项目空间并自动切换到该项目下,实现资源间的逻辑隔离。
3.2 创建持久化存储声明 (PVC)
cat <<EOF | oc apply -f -
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: minio-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Gi
storageClassName: lvms-vg1
EOF
命令解释:
cat <<EOF | oc apply -f -: 使用标准输入直接创建 YAML,避免频繁创建临时文件。accessModes: ReadWriteOnce: 定义该卷只能被单个 Pod 以读写模式挂载。storageClassName: lvms-vg1: 指定使用 LVM 动态存储类,这是触发 Operator 自动切盘的关键。
3.3 部署 MinIO 核心应用
oc new-app --name=minio \
--image=quay.io/minio/minio:latest \
-e MINIO_ROOT_USER=admin \
-e MINIO_ROOT_PASSWORD=admin123
命令解释:
oc new-app: 自动化部署命令,会同步创建 Deployment、Service。-e: 为容器注入运行所需的环境变量(AccessKey/SecretKey)。
3.4 注入启动参数与多端口 (关键修正)
oc patch deployment minio --type=json -p='[
{"op": "add", "path": "/spec/template/spec/containers/0/command", "value": ["minio"]},
{"op": "add", "path": "/spec/template/spec/containers/0/args", "value": ["server", "/data", "--console-address", ":9001"]},
{"op": "add", "path": "/spec/template/spec/containers/0/ports/-", "value": {"containerPort": 9001, "protocol": "TCP"}}
]'
命令解释:
oc patch: 动态修改已存在的资源配置。command/args: 显式指定 MinIO 的启动模式及数据目录,并强制开启 9001 控制台端口。ports/-: 在端口列表中追加定义 9001,确保集群路由能正确寻址。
3.5 挂载动态存储卷
oc set volume deployment/minio --add \
--name=minio-data \
--type=pvc \
--claim-name=minio-pvc \
--mount-path=/data
命令解释:
oc set volume: 管理 Deployment 的卷挂载。--mount-path: 将 10GB 的 LVM 硬盘挂载到容器内的/data目录。执行后 Pod 会触发滚动重启。
3.6 暴露访问路由 (Route)
oc expose svc/minio --name=minio-api --port=9000
oc create route edge minio-ui --service=minio --port=9001
命令解释:
oc expose: 为 9000 端口创建标准的 API 访问路径。oc create route edge: 为 9001 控制台创建一个带 TLS 证书加密 的路由,确保浏览器访问的安全性。
4. 验证与测试
4.1 检查资源状态
oc get pods,pvc,route
预期现象:
- Pod 状态为
Running。 - PVC 状态为
Bound(说明 10GB LVM 空间已成功划拨)。 - Route 列表显示两个外部访问域名。
4.2 暴力持久化验证
oc delete pod -l app=minio
操作流程:
- 进入 UI 上传一张图片。
- 执行上述删除命令模拟宕机。
- 新 Pod 启动后,重新登录 UI,图片依然存在,证明 LVM 存储持久化 成功。
5. 结语与心得
- 标准化:纯 CLI 操作极大降低了人为误操作的概率,且所有操作均可编写为自动化脚本。
- 网络闭环:理解 Service 到 Route 的端口映射关系是部署复杂有状态应用的关键。
- 高性能:LVM 动态存储提供了原生磁盘级的 I/O 效率,完美承载对象存储的高频并发请求。
895

被折叠的 条评论
为什么被折叠?



