OpenShift+OpenShift Data Foundation+集成Ceph
一个正在运行且功能正常的 OpenShift Container Platform (OCP) 集群。版本建议为 ODF 支持的版本 (请参考 ODF 文档)。具有权限的 OCP 用户账号。已安装并配置好oc(OpenShift CLI) 命令行工具,能够连接并管理目标 OCP 集群。对 OCP 集群的网络、节点和 Operator 生命周期管理有基本了解。一个独立于 OCP、正在运行且功能正常的
先决条件 (Prerequisites)
在开始集成 OpenShift Data Foundation (ODF) 与外部 Ceph 集群之前,请确保满足以下条件:
-
OpenShift 集群 (OpenShift Cluster):
-
一个正在运行且功能正常的 OpenShift Container Platform (OCP) 集群。版本建议为 ODF 支持的版本 (请参考 ODF 文档)。
-
具有
cluster-admin
权限的 OCP 用户账号。 -
已安装并配置好
oc
(OpenShift CLI) 命令行工具,能够连接并管理目标 OCP 集群。 -
对 OCP 集群的网络、节点和 Operator 生命周期管理有基本了解。
-
-
外部 Ceph 集群 (External Ceph Cluster):
-
一个独立于 OCP、正在运行且功能正常的 Ceph 存储集群。版本建议为 ODF 支持的 Ceph 版本 (请参考 ODF 文档)。
-
Ceph 集群处于健康状态 (
HEALTH_OK
或明确了解并接受HEALTH_WARN
的原因)。 -
具有对 Ceph 集群的管理权限(例如,能够执行
sudo ceph ...
命令)。 -
已安装
ceph
命令行工具,并能够连接和管理 Ceph 集群。 -
熟悉 Ceph 的基本概念,如 Monitors, OSDs, Pools, Ceph Users, FSID, CephFS (如果需要)。
-
(如果计划使用 CephFS) 确保 Ceph Metadata Server (MDS) 守护进程已部署、配置完成并且至少有一个处于
active
状态。
-
-
网络连接 (Network Connectivity):
-
OpenShift 集群节点(特别是运行 ODF CSI Pods 的 Worker 节点)必须能够通过网络访问外部 Ceph 集群的所有 Monitor 节点(检查 Ceph Monitor 使用的 v1 和 v2 端口,通常是 6789 和 3300)。
-
根据 CSI Driver 配置和网络策略,可能还需要允许 Worker 节点访问 Ceph OSD 节点上的特定端口范围(通常是 6800-7300)。
-
确保 OCP 节点与 Ceph 集群之间的防火墙已开放所需的端口。
-
-
ODF Operator 可用性 (ODF Operator Availability):
-
在线环境: OpenShift OperatorHub 能够访问 Red Hat 官方提供的 Operator Catalog,并能从中找到并安装 OpenShift Data Foundation Operator。
-
离线/断开连接/镜像环境:
-
必须已将所需版本的 ODF Operator 镜像及其所有依赖项成功镜像到您的私有容器镜像仓库 (例如 Harbor)。
-
必须已在 OpenShift 集群中正确创建了指向私有仓库中 Operator 索引镜像的
CatalogSource
资源(如示例中的cs-redhat-operator-index
)。 -
可能需要根据您的环境配置
ImageContentSourcePolicy
来确保 OCP 从私有仓库拉取镜像。
-
-
-
必要信息准备 (Information Ready):
-
您需要提前准备好获取外部 Ceph 集群的 FSID (Cluster ID) 和所有 Monitor 节点的 IP 地址及端口号。
-
-
** 应用镜像 (Optional - Application Image):**
-
如果需要按照本文档中的 Tomcat 示例进行应用部署测试,请确保
harborprod.ny.shuanghui.net/tomcat/tomcat:9.0
镜像在您的 Harbor 仓库中可用,或者替换为 OCP 集群可访问的其他测试镜像。
-
环境台账 (Environment Inventory)
本文档记录了本次 ODF 与外部 Ceph 集成部署的关键环境信息,便于维护和问题排查。
-
集成日期 (Integration Date):
YYYY-MM-DD
(例如: 2025-04-11) -
OpenShift Container Platform (OCP):
-
集群 API URL:
https://api.ocp4.ny.shuanghui.net:6443
-
Web 控制台 URL:
https://console-openshift-console.apps.ocp4.ny.shuanghui.net
-
OCP 版本: Cluster version is 4.17.17
-
ODF 安装命名空间 (ODF Installation Namespace):
openshift-storage
-
-
外部 Ceph 集群 (External Ceph Cluster):
-
Ceph 版本: ceph version 18.2.4
-
集群 FSID: 60500f06-15ec-11f0-9aa8-53fa8a1db53b
-
Monitor 节点 IP 地址及端口 (v2):
192.168.100.106:3300,192.168.100.107:3300,192.168.100.108:3300
-
管理节点 IP (Admin Node IP):
例如: 192.168.100.106 (执行 ceph 命令的节点)
-
Ceph 节点 IP 范围/列表:
例如: 192.168.100.106, 107, 108
-
-
OpenShift Data Foundation (ODF):
-
ODF Operator 版本:
4.17.6-rhodf
-
StorageSystem CR 名称:
ocs-external-storagesystem
-
StorageCluster CR 名称:
ocs-storagecluster-external
-
创建的 RBD StorageClass 名称:
ocs-external-storagecluster-ceph-rbd
-
创建的 CephFS StorageClass 名称:
ocs-external-storagecluster-cephfs
-
-
为 ODF 创建的 Ceph 资源 (Ceph Resources Created for ODF):
-
RBD 池名称:
ocp-rbd
-
CephFS 数据池名称:
ocp-cephfs-data
-
CephFS 元数据池名称:
ocp-cephfs-metadata
-
CephFS 文件系统名称:
ocp-cephfs
-
RBD 用户名:
client.ocp-rbd
-
CephFS 用户名:
client.ocp-cephfs
-
-
私有镜像仓库 (Private Container Registry):
-
仓库类型:
Harbor
-
仓库 URL:
harborprod.ny.shuanghui.net
-
-
堡垒机/客户端 (Bastion/Client):
-
执行
oc
和/或ceph
命令的主机 IP/名称:例如: bastion.ny.shuanghui.net (192.168.100.100)
-
集成过程
安装 ODF Operator
操作:
-
登录 OpenShift Web 控制台。
-
导航到 "Operators" -> "OperatorHub"。
-
在右侧的 "Source" 下拉菜单中,确保选中了您添加的 CatalogSource(例如
cs-redhat-operator-index
)。 -
搜索 "OpenShift Data Foundation"。
-
点击 "Install",选择合适的更新通道(应与您镜像时选择的一致),通常安装到
openshift-storage
命名空间。
# (可选)清理旧的或不需要的 CatalogSources 和禁用默认源 # 删除 Certified Operators CatalogSource oc delete catalogsource certified-operators -n openshift-marketplace # 删除 Community Operators CatalogSource oc delete catalogsource community-operators -n openshift-marketplace # 删除 Red Hat Marketplace CatalogSource oc delete catalogsource redhat-marketplace -n openshift-marketplace # 禁用所有默认 Operator 源 (如果使用自定义 CatalogSource) oc patch operatorhub cluster --type merge -p '{"spec":{"disableAllDefaultSources": true}}' # 删除默认的 Red Hat Operators CatalogSource (如果使用镜像的 CatalogSource) # 注意:确保不要删除您自己添加的 CatalogSource (如 cs-redhat-operator-index) oc delete catalogsource redhat-operators -n openshift-marketplace # 观察 Operator 安装状态 # 观察 Operator CSV (ClusterServiceVersion) 状态,等待其 Phase 变为 Succeeded oc get csv -n openshift-storage -w # 观察 ODF Operator 相关 Pods 的状态,等待它们变为 Running 或 Completed oc get pods -n openshift-storage -w
集成OpenShift 环境
# 1.下载载脚本: 通常随 ODF Operator 或文档提供 # 参考资料 # https://docs.redhat.com/zh-cn/documentation/red_hat_openshift_data_foundation/4.17/html/deploying_openshift_data_foundation_in_external_mode/creating-an-openshift-data-foundation-cluster-service-for-external-storage_ceph-external a.打开https://console-openshift-console.apps.ocp4.ny.shuanghui.net b.点击左侧 Operators > 安装的Operators c.点击OpenShift Data Foundation > StorageSystem > 创建StorageSystem d.选择 Red Hat Ceph Storage f.下载脚本 # 2. 在 Ceph 管理节点上运行脚本,提供之前创建的池和文件系统名称 python3 ceph-external-cluster-details-exporter.py \ --rbd-data-pool-name ocp-rbd \ --cephfs-filesystem-name ocp-cephfs \ --cephfs-data-pool-name ocp-cephfs-data \ --cephfs-metadata-pool-name ocp-cephfs-metadata \ --monitoring-endpoint <monitoring-endpoint-if-different> \ --monitoring-endpoint-port <monitoring-port-if-different> \ --output external-cluster-data.json # 输出 JSON 文件 # 3.在浏览器打开浏览文件并上传external-cluster-data.json # 等待5分钟 oc get sc NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE ocs-external-storagecluster-ceph-rbd (default) openshift-storage.rbd.csi.ceph.com Delete Immediate true 3h52m ocs-external-storagecluster-cephfs openshift-storage.cephfs.csi.ceph.com Delete Immediate true 3h52m
测试 RBD
oc new-project my-test-app cat <<EOF> test-pvc.yaml # test-pvc.yaml apiVersion: v1 kind: PersistentVolumeClaim metadata: name: test-rbd-claim # 推荐: 不在 kube-system 中创建,指定一个测试或应用命名空间 # namespace: my-test-app spec: accessModes: - ReadWriteOnce resources: requests: storage: 1Gi storageClassName: ocs-external-storagecluster-ceph-rbd # !! 使用正确的名字 !! EOF # 在您选择的命名空间中应用 (例如 my-test-app) oc apply -f test-pvc.yaml -n my-test-app # 在对应的命名空间中检查 oc get pvc test-rbd-claim -n my-test-app NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS VOLUMEATTRIBUTESCLASS AGE test-rbd-claim Bound pvc-6167111f-f089-4d59-8043-825605d2c0d8 1Gi RWO ocs-external-storagecluster-ceph-rbd <unset> 8s
测试CephFS
cat <<EOF> test-cephfs-pvc.yaml apiVersion: v1 kind: PersistentVolumeClaim metadata: name: test-cephfs-claim namespace: my-test-app # 使用同一个测试命名空间 spec: accessModes: # CephFS 支持 RWO 和 RWX - ReadWriteMany resources: requests: storage: 1Gi storageClassName: ocs-external-storagecluster-cephfs # !! 使用 CephFS 的 StorageClass !! EOF oc apply -f test-cephfs-pvc.yaml -n my-test-app oc get pvc test-cephfs-claim -n my-test-app -w persistentvolumeclaim/test-cephfs-claim created NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS VOLUMEATTRIBUTESCLASS AGE test-cephfs-claim Bound pvc-9378a0fa-713f-4f73-b22b-afe7ee37b50e 1Gi RWX ocs-external-storagecluster-cephfs <unset> 3s
测试应用部署 (Tomcat 示例)
准备 Tomcat 镜像
确保 harborprod.ny.shuanghui.net/tomcat/tomcat:9.0
镜像在您的 Harbor 仓库中可用。以下是准备镜像的步骤概述:
# 第一种方式,直接在本地下载 # 在harborprod.ny.shuanghui.net下载tomcat:9.0并上传到harbor中 docker pull tomcat:9.0 docker login harborprod.ny.shuanghui.net harboradmin:SIAIcloudHA2020! # 新建项目,登陆网页https://harborprod.ny.shuanghui.net,点击新建项目,创建tomcat即可 docker tag tomcat:9.0 harborprod.ny.shuanghui.net/tomcat/tomcat:9.0 docker push harborprod.ny.shuanghui.net/tomcat/tomcat:9.0 # 第二种方式,无法访问外网,从可连接互联网的机器中下载,并导出上传到harbor汇总 # 配置镜像加速器 sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors": ["https://onkxnq50.mirror.aliyuncs.com"] } EOF sudo systemctl daemon-reload sudo systemctl restart docker # 查看架构类型 docker manifest inspect tomcat:9.0 docker pull --platform=linux/amd64 tomcat:9.0 docker save -o tomcat_9.0_amd64.tar tomcat:9.0 # 传输tomcat_9.0_amd64.tar到harborprod.ny.shuanghui.net中 docker load -i tomcat_9.0_amd64.tar docker tag tomcat:9.0 harborprod.ny.shuanghui.net/tomcat/tomcat:9.0 # 新建项目,登陆网页https://harborprod.ny.shuanghui.net,点击新建项目,创建tomcat即可 docker push harborprod.ny.shuanghui.net/tomcat/tomcat:9.0
创建项目和 PVC
目标:使用 CephFS 存储 Tomcat 日志 (允许多个 Pod 写入) 和共享数据。
# 在 bastion 上执行 oc new-project tomcat-app # 创建 PersistentVolumeClaims (PVCs) # 为日志创建 RBD PVC: 创建一个名为 tomcat-log-cephfs-pvc.yaml 的文件 cat <<EOF> tomcat-log-cephfs-pvc.yaml apiVersion: v1 kind: PersistentVolumeClaim metadata: name: tomcat-log-cephfs-pvc # 新的名字 spec: accessModes: # 注意:虽然 CephFS 支持 RWX,但如果每个 Pod 写独立日志,RWO 也可能够用 # 但为了避免跨节点问题,用 RWX 更保险 - ReadWriteMany resources: requests: storage: 10Gi storageClassName: ocs-external-storagecluster-cephfs # !! 使用 CephFS SC !! # 为共享目录创建 CephFS PVC: 创建一个名为 tomcat-shared-pvc.yaml 的文件 EOF cat <<EOF> tomcat-shared-pvc.yaml apiVersion: v1 kind: PersistentVolumeClaim metadata: name: tomcat-shared-pvc # 共享卷 PVC 名称 spec: accessModes: - ReadWriteMany # 共享目录需要 RWX resources: requests: storage: 10Gi # 请求 10GB 存储空间 (按需调整) storageClassName: ocs-external-storagecluster-cephfs # 使用 CephFS StorageClass EOF # 在 bastion 上执行 oc apply -f tomcat-log-cephfs-pvc.yaml -n tomcat-app oc apply -f tomcat-shared-pvc.yaml -n tomcat-app # 检查 PVC 状态: 确保它们都变为 Bound 状态 oc get pvc -n tomcat-app
创建 Tomcat Deployment
创建 tomcat-deployment.yaml
cat <<EOF> tomcat-deployment.yaml apiVersion: apps/v1 kind: Deployment metadata: name: tomcat-deployment labels: app: tomcat spec: replicas: 3 selector: matchLabels: app: tomcat template: metadata: labels: app: tomcat spec: containers: - name: tomcat # 容器名 image: harborprod.ny.shuanghui.net/tomcat/tomcat:9.0 #镜像仓库地址 ports: - containerPort: 8080 volumeMounts: - name: tomcat-logs # 挂载日志卷 (来自 RBD PVC) mountPath: /usr/local/tomcat/logs - name: tomcat-shared # 挂载共享卷 (来自 CephFS PVC) mountPath: /shared_data volumes: - name: tomcat-logs persistentVolumeClaim: claimName: tomcat-log-cephfs-pvc # 引用 RBD PVC - name: tomcat-shared persistentVolumeClaim: claimName: tomcat-shared-pvc # 引用 CephFS PVC EOF # 应用 Deployment 文件 # 在 bastion 上执行 oc apply -f tomcat-deployment.yaml -n tomcat-app # 查看pod日志 oc logs pod tomcat-deployment-7ff4c98f-2tp2k -n tomcat-app # 查看pod事件 oc describe pod tomcat-deployment-7ff4c98f-2tp2k -n tomcat-app # 删除全部pod(备注命令) # oc delete deployment tomcat-deployment -n tomcat-app # 检查 oc get pods -n tomcat-app -w
创建 Service 和 Route
# 创建 Service (暴露端口),用于在集群内部访问 Tomcat cat <<EOF> tomcat-service.yaml apiVersion: v1 kind: Service metadata: name: tomcat-service labels: app: tomcat spec: ports: - port: 8080 selector: app: tomcat # 选择带有 app=tomcat 标签的 Pods EOF # 应用 Service 文件 oc apply -f tomcat-service.yaml -n tomcat-app # 创建 Route (对外暴露) cat <<EOF> tomcat-route.yaml apiVersion: route.openshift.io/v1 kind: Route metadata: name: tomcat-route labels: app: tomcat spec: to: kind: Service name: tomcat-service # 指向上面创建的 Service port: targetPort: 8080 EOF # 应用 Route 文件 # 在 bastion 上执行 oc apply -f tomcat-route.yaml -n tomcat-app # 访问 Tomcat oc get route tomcat-route -n tomcat-app NAME HOST/PORT PATH SERVICES PORT TERMINATION WILDCARD tomcat-route tomcat-route-tomcat-app.apps.ocp4.ny.shuanghui.net tomcat-service 8080 None # 浏览器打开 https://tomcat-route-tomcat-app.apps.ocp4.ny.shuanghui.net/ # 在浏览器中打开上面输出的 HOST/PORT 地址 (例如 [http://tomcat-route-tomcat-app.apps.ocp4.ny.shuanghui.net](http://tomcat-route-tomcat-app.apps.ocp4.ny.shuanghui.net)) # 注意:Route 通常处理 HTTP/HTTPS,不需要在 URL 后加端口号 :8080。
更多推荐
所有评论(0)