一、概述
在 OpenShift Container Platform(OCP)中,选择块存储还是NFS 存储取决于具体的应用场景。你的选择是块存储,从性能和一致性角度来看,这确实是更优的选择,但也要考虑一些细节。
1、为什么推荐块存储?
1.高性能
-
块存储(如 Ceph RBD、iSCSI、EBS)提供低延迟、高吞吐量的存储性能,适用于数据库、消息队列、缓存等对存储 IOPS 要求高的应用。
2.数据一致性
-
块存储提供强一致性,适用于状态ful应用(如 MySQL、PostgreSQL、MongoDB 等)。
3.容器持久化支持更好
-
OCP 支持 Persistent Volume (PV) + Persistent Volume Claim (PVC),块存储可以与这些机制良好结合,确保 Pod 迁移时数据不会丢失。
2、什么时候适合用 NFS?
1.共享存储需求
-
NFS 适用于多个 Pod 需要共享数据的场景,例如日志存储、共享配置、Web 服务器静态文件(如 WordPress 的
wp-content
)。
2.低成本/简单部署
-
NFS 适用于测试环境,或者不需要高性能、强一致性的应用场景,例如CI/CD 构建缓存、备份存储等。
3、综合建议
-
数据库、分布式存储 → 块存储 ✅(高性能、低延迟)
-
共享存储(Web 服务器、CI/CD 构建缓存) → NFS ✅(简单、可共享)
-
混合部署:如果你有一些需要高性能的数据存储(数据库)和一些共享文件存储(配置、日志),可以同时使用块存储 + NFS。
二、OCP部署Rook-Ceph
Rook-Ceph 可以在 OCP 里自动管理 Ceph,省去手动配置 Ceph 集群的复杂性,尤其是 基于 VM 部署时,更容易管理存储和扩展。
1、OCP 里部署 Rook-Ceph 的完整步骤
-
在每个 OCP Worker 节点提供一块额外的磁盘(裸设备,未格式化)。
-
安装 Rook-Ceph Operator(自动管理 Ceph)。
-
创建 CephCluster 资源(Rook 自动创建 OSD、MON、MGR)。
-
配置 StorageClass(让 OCP 使用 Ceph 存储)。
-
创建 PVC(在 OCP 里给 IBM CP4BA 挂载存储)。
2、准备 OCP 计算节点
在每个 OCP Worker 节点上,确保至少 有 1 块额外磁盘,且该磁盘未格式化:
lsblk
示例输出:
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
vda 252:0 0 40G 0 disk /
vdb 252:1 0 100G 0 disk # 用于 Ceph 存储
✅ 确保 vdb(100GB)未被挂载或使用。
3、安装 Rook-Ceph Operator
在 OpenShift 里执行:
kubectl create namespace rook-ceph
kubectl apply -f https://github.com/rook/rook/raw/master/deploy/examples/crds.yaml
kubectl apply -f https://github.com/rook/rook/raw/master/deploy/examples/common.yaml
kubectl apply -f https://github.com/rook/rook/raw/master/deploy/examples/operator.yaml
这样 OCP 里就有 Rook-Ceph 了。
4、创建 Ceph 集群
创建 ceph-cluster.yaml
,并让 Rook-Ceph 负责集群:
apiVersion: ceph.rook.io/v1
kind: CephCluster
metadata:
name: my-ceph
namespace: rook-ceph
spec:
dataDirHostPath: /var/lib/rook
mon:
count: 3
storage:
useAllNodes: true
useAllDevices: true # 让 Rook 自动发现 OSD
dashboard:
enabled: true # 开启 Ceph Dashboard
✅ 这样,Rook-Ceph 会自动管理 Ceph OSD、MON、MGR。
5、配置 StorageClass
创建 ceph-storageclass.yaml
:
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: rook-ceph-block
provisioner: rook-ceph.rbd.csi.ceph.com
parameters:
clusterID: rook-ceph
pool: replicapool
imageFormat: "2"
imageFeatures: "layering"
reclaimPolicy: Retain
kubectl apply -f ceph-storageclass.yaml
6、在 OCP 里使用 Ceph 存储
创建 PVC,例如给 IBM CP4BA 用:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: cp4ba-db-storage
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 20Gi
storageClassName: rook-ceph-block
kubectl apply -f pvc.yaml
✅ 这样,IBM CP4BA 部署时就可以挂载 PVC!
7、访问 Ceph Dashboard
查看 Ceph Dashboard 地址:
kubectl get svc -n rook-ceph
找到类似:
rook-ceph-mgr-dashboard ClusterIP 10.43.120.99 8080/TCP
然后端口转发:
kubectl port-forward -n rook-ceph svc/rook-ceph-mgr-dashboard 8443:8080
✅ 浏览器访问 https://localhost:8443
,即可管理 Ceph!🎉
8、总结
✅ Rook-Ceph 让 OCP 里管理 Ceph 更简单:
-
自动管理 OSD、MON、MGR
-
提供 StorageClass,直接让 OCP 使用
-
内置 Ceph Dashboard
-
无需手动安装 Ceph CSI 插件
三、OCP连接现有的Ceph RBD
1、安装 Ceph CSI 插件
Ceph CSI 插件允许 OpenShift 通过 Container Storage Interface (CSI) 使用 Ceph 存储。
(1)创建 ceph-csi
命名空间
kubectl create namespace ceph-csi
(2)部署 Ceph CSI 插件
kubectl apply -f https://raw.githubusercontent.com/ceph/ceph-csi/devel/deploy/rbd/kubernetes/csi-config-map.yaml
kubectl apply -f https://raw.githubusercontent.com/ceph/ceph-csi/devel/deploy/rbd/kubernetes/csi-rbdplugin.yaml
kubectl apply -f https://raw.githubusercontent.com/ceph/ceph-csi/devel/deploy/rbd/kubernetes/csi-rbdplugin-provisioner.yaml
✅ 这样,OpenShift 内部就有 Ceph CSI 插件了。
2、创建 Ceph 认证 Secret
OCP 需要用 Ceph 认证信息访问 RBD。
(1)获取 Ceph 客户端密钥
ceph auth get-key client.admin
输出示例:
AQATzT5dAAAAABAAABABXl==
(2)创建 Secret
apiVersion: v1
kind: Secret
metadata:
name: ceph-secret
namespace: default # 修改为你的 IBM CP4BA 命名空间
data:
userID: YWRtaW4= # base64 编码的 "admin"
userKey: AQATzT5dAAAAABAAABABXl== # base64 编码的密钥
kubectl apply -f ceph-secret.yaml
这样,OpenShift 就能使用 Ceph 进行身份验证。
3、创建 Ceph RBD StorageClass
让 OpenShift 通过 CSI 访问 Ceph RBD。
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: ceph-rbd
provisioner: rbd.csi.ceph.com
parameters:
clusterID: rook-ceph
pool: rbd-pool
imageFormat: "2"
imageFeatures: "layering"
csi.storage.k8s.io/provisioner-secret-name: ceph-secret
csi.storage.k8s.io/provisioner-secret-namespace: default
csi.storage.k8s.io/node-stage-secret-name: ceph-secret
csi.storage.k8s.io/node-stage-secret-namespace: default
fsType: ext4
✅ OCP 现在知道 Ceph RBD 是一个可用的存储类型了!
4、在 OCP 里使用 Ceph RBD
IBM CP4BA 需要持久存储,我们创建 PVC 申请 20GB 存储:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: cp4ba-db-storage
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 20Gi
storageClassName: ceph-rbd
kubectl apply -f pvc.yaml
✅ 这样,IBM CP4BA 部署时可以用这个 PVC 挂载存储!
5、总结
-
安装 Ceph CSI 插件
-
创建 Ceph 认证 Secret
-
配置 OpenShift StorageClass
-
创建 PVC,IBM CP4BA 申请存储
-
CP4BA Pod 挂载 PVC
可以用以下命令检查是否正常:
kubectl get sc
kubectl get pvc
kubectl get pods -n ceph-csi