Red Hat OpenShift Data Foundation 架构
OpenShift Data Foundation 架构概述,以及组件和服务所执行的角色。
摘要
前言 复制链接链接已复制到粘贴板!
本文档概述 OpenShift Data Foundation 架构。
对红帽文档提供反馈 复制链接链接已复制到粘贴板!
我们感谢您对文档提供反馈信息。请告诉我们如何让它更好。
要提供反馈,请创建一个 JIRA ticket:
- 登录到 JIRA。
- 在顶部导航栏中点 Create
- 在 Summary 字段中输入描述性标题。
- 在 Description 字段中输入您对改进的建议。包括文档相关部分的链接。
- 在 Components 字段中选择 Documentation。
- 点对话框底部的 Create。
第 1 章 OpenShift Data Foundation 介绍 复制链接链接已复制到粘贴板!
Red Hat OpenShift Data Foundation 是 Red Hat OpenShift Container Platform 的云存储和数据服务的高度集成集合。它作为 Red Hat OpenShift Container Platform Service Catalog 的一部分提供,它作为一个 operator 提供,以便于简单部署和管理。
Red Hat OpenShift Data Foundation 服务主要通过代表以下组件的存储类提供给应用程序:
- 块存储设备,主要服务于数据库工作负载。示例包括 Red Hat OpenShift Container Platform 日志记录和监控,以及 PostgreSQL。
只有在不需要在多个容器间共享数据时,才会将块存储用于任何工作。
- 共享和分布式文件系统,主要服务于软件开发、消息传递和数据聚合工作负载。示例包括 Jenkins 构建源和工件、Wordpress 上传的内容、Red Hat OpenShift Container Platform registry,以及使用 JBoss AMQ 的消息传递。
- 多云对象存储,具有一个轻量级 S3 API 端点,可以从多个云对象存储中提取存储和检索数据。
- 在内部对象存储中,具有一个稳定的 S3 API 端点,可扩展到数十拍字节(PB)和数十亿个对象的环境,主要面向数据密集型应用。例如,使用 Spark、Pacesto、Red Hat AMQ Streams (Kafka) 等应用程序,以及 TensorFlow 和 Pytorch 等机器学习框架。
不支持在 CephFS 持久性卷上运行 PostgresSQL 工作负载,建议使用 RADOS 块设备 (RBD) 卷。如需更多信息,请参阅 知识库解决方案 ODF 数据库工作负载不能使用 CephFS PV/PVC。
Red Hat OpenShift Data Foundation 版本 4.x 由一组软件项目组成,包括:
- Ceph,提供块存储、共享分布式文件系统以及内部对象存储
- Ceph CSI,用于管理持久性卷和声明的调配和生命周期
- NooBaa 提供多云对象网关
- OpenShift Data Foundation、Rook-Ceph 和 NooBaa 操作器,用于初始化和管理 OpenShift Data Foundation 服务。
第 2 章 OpenShift Data Foundation 架构概述 复制链接链接已复制到粘贴板!
Red Hat OpenShift Data Foundation 为 Red Hat OpenShift Container Platform 提供服务,也可以从Red Hat OpenShift Container Platform 内部运行。
图 2.1. Red Hat OpenShift Data Foundation 架构
Red Hat OpenShift Data Foundation 支持部署到在 Installer Provisioned Infrastructure 或 User Provisioned Infrastructure 上部署的 Red Hat OpenShift Container Platform 集群。有关这两种方法的详情,请参阅 OpenShift Container Platform - 安装过程。要了解更多有关 Red Hat OpenShift Data Foundation 和 Red Hat OpenShift Container Platform 组件互操作性的信息,请参阅互操作性列表。
OpenShift Data Foundation 使用故障域配置来确定如何在集群中分发数据副本。故障域代表一个物理边界,如主机、机架或可用性区域,在其中分散数据副本以确保高可用性。OpenShift Data Foundation 根据分配给存储节点的标签自动识别这些故障域。如需更多信息,请参阅知识库文章 OpenShift Data Foundation 内部拓扑感知故障域配置。
如需有关 OpenShift Container Platform 架构和生命周期的信息,请参阅 OpenShift Container Platform 架构。
第 3 章 OpenShift Data Foundation 操作器(operator) 复制链接链接已复制到粘贴板!
Red Hat OpenShift Data Foundation 由以下三个 Operator Liftcycle Manager(OLM) Operator 捆绑包组成,部署四个操作器来整合管理任务和自定义资源,以便轻松自动执行任务和资源特性:
OpenShift Data Foundation
-
odf-operator
-
OpenShift Container Storage
-
ocs-operator -
rook-ceph-operator
-
多云对象网关
-
mcg-operator
-
管理员定义集群的所需最终状态,OpenShift Data Foundation 通过最少的管理员干预来确保集群处于该状态,或接近该状态。
3.1. OpenShift Data Foundation operator(操作器) 复制链接链接已复制到粘贴板!
odf-operator 可以被理解为 OpenShift Data Foundation 的 "meta" 操作器,它是一个旨在影响其他操作器的操作器。
odf-operator 有以下主要功能:
强制组成 OpenShift Data Foundation 的其他操作器的配置和版本控制。它通过使用两种主要机制来实现此目的:操作器依赖项和订阅管理。
-
odf-operator捆绑包指定其他 OLM Operator 的依赖关系,以确保它们始终安装在特定版本中。 - operator 本身为所有其他操作器管理订阅,以确保所需的 Operator 版本可供 OLM 安装。
-
- 为 OpenShift 控制台提供 OpenShift Data Foundation 外部插件。
- 提供一个 API,将存储解决方案与 OpenShift 控制台集成。
3.1.1. 组件 复制链接链接已复制到粘贴板!
odf-operator 依赖于 ocs-operator 软件包。它还管理 stc g-operator 的订阅。此外,odf-operator 捆绑包为 OpenShift 控制台的 OpenShift Data Foundation 外部插件定义第二个部署。这会定义基于 nginx 的 Pod,它提供必要的文件来注册 OpenShift Data Foundation 仪表板并将其集成到 OpenShift Container Platform 控制台中。
3.1.2. 设计图 复制链接链接已复制到粘贴板!
本图演示了 odf-operator 如何与 OpenShift Container Platform 集成。
图 3.1. OpenShift Data Foundation Operator
3.1.3. Resources 复制链接链接已复制到粘贴板!
odf-operator 创建 Operator Lifecycle Manager Resources CR,它为 Operator 创建一个 订阅。
3.1.4. 限制 复制链接链接已复制到粘贴板!
odf-operator 本身不提供任何数据存储或服务。它作为其他存储系统的集成和管理层存在。
3.1.5. 高可用性 复制链接链接已复制到粘贴板!
高可用性并不是 odf-operator Pod 的主要要求,与其他多数操作器类似。总体而言,并没有操作需要或受益于流程分布。在当前 Pod 不可用或被删除时,OpenShift Container Platform 会快速启动一个替换的 Pod。
3.1.6. 相关配置文件 复制链接链接已复制到粘贴板!
odf-operator 附带一个变量 ConfigMap,可用于修改 Operator 的行为。
3.1.7. 相关日志文件 复制链接链接已复制到粘贴板!
要了解 OpenShift Data Foundation 并排除问题,您可以查看以下内容:
- Operator Pod 日志
- Storagecluster 状态
Operator Pod 日志
每个操作器都提供标准的 Pod 日志,其中包括有关协调的信息以及遇到的错误的信息。这些日志通常具有有关成功协调的信息,可以过滤掉并忽略它们。
Storagecluster 状态和事件
storageCluster CR 将协调详情存储在 CR 的状态中。存储集群的 spec 包含实际存储集群 CRD 的名称、命名空间和 Kind,管理员可用于查找存储集群状态的更多信息。
3.1.8. 生命周期 复制链接链接已复制到粘贴板!
需要存在 odf-operator,只要 OpenShift Data Foundation 捆绑包仍然被安装。这是作为 OLM 对 OpenShift Data Foundation CSV 协调的一部分进行管理。至少一个 pod 实例应该处于 Ready 状态。
CRD 等 operator 操作对象不应影响 Operator 的生命周期。创建和删除 StorageClusters 是 Operator 控制之外的操作,必须由管理员发起,或者通过适当的应用程序编程接口(API)调用自动执行。
3.2. OpenShift Container Storage operator 复制链接链接已复制到粘贴板!
ocs-operator 可以被理解为 OpenShift Data Foundation 的"meta"操作器,即操作器旨在影响其他操作器,并充当其他操作器提供的功能的配置网关。它不直接管理其他操作器。
ocs-operator 有以下主要功能:
- 创建自定义资源(CR),以触发其他操作器进行协调。
- 将 Ceph 和多云对象网关配置抽象,并将其限制为由红帽验证和支持的已知最佳实践。
- 根据支持策略创建并协调部署容器化 Ceph 和 NooBaa 所需的资源。
3.2.1. 组件 复制链接链接已复制到粘贴板!
ocs-operator 没有任何依赖组件。但是,Operator 依赖于是否存在来自其他 Operator 的所有自定义资源定义(CRD),这些定义在 ClusterServiceVersion (CSV)中定义。
3.2.2. 设计图 复制链接链接已复制到粘贴板!
本图演示了 OpenShift Container Storage 如何与 OpenShift Container Platform 集成。
图 3.2. OpenShift Container Storage Operator
3.2.3. 职责 复制链接链接已复制到粘贴板!
这两个 ocs-operator CRD 是:
-
OCSInitialization -
StorageCluster
OCSInitialization 是一个单例 CRD,用于封装应用到 operator 级别的操作。操作器负责确保一个实例始终存在。CR 会触发以下内容:
执行 OpenShift Container Storage 所需的初始化任务。如果需要,可以通过删除
OCSInitializationCRD 来触发这些任务来再次运行。- 确保存在 OpenShift Container Storage 所需的安全性上下文约束(SCC)。
- 管理 Ceph toolbox Pod 的部署,用于执行高级故障排除和恢复操作。
StorageCluster CRD 代表提供 OpenShift Container Storage 完整功能的系统。它触发操作器,以确保 Rook-Ceph 和 NooBaa CRD 的生成与协调。ocs-operator 算法根据 StorageCluster spec 中的配置生成 CephCluster 和 NooBaa CRD。Operator 还会创建额外的 CR,如 CephBlockPools 和Routes 等。启用 OpenShift Container Storage 的不同功能需要这些资源。目前,每个 OpenShift Container Platform 集群只支持一个 StorageCluster CR。
3.2.4. Resources 复制链接链接已复制到粘贴板!
ocs-operator 会根据定义的 CRD 的 spec 创建以下 CR。可以覆盖其中部分资源的配置,允许更改生成的 spec 或不能完全创建这些资源。
- 常规资源
- 事件
- 在需要时创建各种事件以响应协调。
- 持久性卷(PV)
- PV 不会被 Operator 直接创建。但是,Operator 会跟踪 Ceph CSI 驱动程序创建的所有 PV,并确保 PV 具有支持功能的适当注解。
- Quickstarts
- 为 OpenShift Container Platform 控制台部署各种 Quickstart CR。
- Rook-Ceph 资源
CephBlockPool-
定义默认的 Ceph 块池。Ceph 对象存储的
CephFilesysPrometheusRulesoute。 StorageClass-
定义默认存储类。例如,Ceph
BlockPool和CephFilesystem。 VolumeSnapshotClass- 为对应存储类定义默认卷快照类。
- 多云对象网关资源
NooBaa- 定义默认的 Multicloud 对象网关系统。
- 监控资源
- 指标导出器服务
- 指标导出器服务监控器
- PrometheusRules
3.2.5. 限制 复制链接链接已复制到粘贴板!
ocs-operator 都部署或协调 OpenShift Data Foundation 的其他 Pod。ocs-operator CSV 定义顶层组件,如 operator Deployments,Operator Lifecycle Manager(OLM)协调指定的组件。
3.2.6. 高可用性 复制链接链接已复制到粘贴板!
高可用性并不是 ocs-operator Pod 的主要要求,与其他多数操作器类似。总体而言,并没有操作需要或受益于流程分布。在当前 Pod 不可用或被删除时,OpenShift Container Platform 会快速启动一个替换的 Pod。
3.2.7. 相关配置文件 复制链接链接已复制到粘贴板!
ocs-operator 配置完全由 CSV 指定,在没有 CSV 自定义构建的情况下不可修改。
3.2.8. 相关日志文件 复制链接链接已复制到粘贴板!
要了解 OpenShift Container Storage 并排除问题,您可以参阅以下内容:
- Operator Pod 日志
- Storagecluster 状态和事件
- OCSInitialization 状态
Operator Pod 日志
每个操作器都提供标准的 Pod 日志,其中包括有关协调的信息以及遇到的错误的信息。这些日志通常具有有关成功协调的信息,可以过滤掉并忽略它们。
Storagecluster 状态和事件
StorageCluster CR 将协调详情存储在 CR 的状态中,并关联事件。status 包含预期容器镜像的一个部分。它显示了应当存在于其他操作器的容器集中的容器镜像,以及它当前检测到的镜像。这有助于确定 OpenShift Container Storage 升级是否完成。
OCSInitialization 状态
此状态显示初始化任务是否已成功完成。
3.2.9. 生命周期 复制链接链接已复制到粘贴板!
只要仍然安装了 OpenShift Container Storage 捆绑包,就需要 ocs-operator。这是作为 OLM 对 OpenShift Container Storage CSV 协调的一部分进行管理。至少一个 pod 实例应该处于 Ready 状态。
CRD 等 operator 操作对象不应影响 Operator 的生命周期。OCSInitialization CR 应始终存在。如果不存在,Operator 会创建一个。创建和删除 StorageClusters 是在 Operator 控制之外的操作,必须由管理员发起,或者使用适当的 API 调用自动执行。
3.3. Rook-Ceph operator 复制链接链接已复制到粘贴板!
Rook-Ceph 操作器是 OpenShift Data Foundation中 Ceph 的 Rook 操作器。Rook 使 Ceph 存储系统能够在 OpenShift Container Platform 上运行。
Rook-Ceph 操作器是一个简单的容器,它会自动引导存储集群并监控存储守护进程,以确保存储集群正常运行。
3.3.1. 组件 复制链接链接已复制到粘贴板!
Rook-Ceph 操作器管理许多组件,作为 OpenShift Data Foundation 部署的一部分。
- Ceph 守护进程
- Mons
- 监视器(mons)为 Ceph 提供核心元数据存储。
- OSD
- 对象存储守护进程(OSD)将数据存储在底层设备上。
- Mgr
- 管理器(mgr)收集指标并为 Ceph 提供其他内部功能。
- RGW
- RADOS 网关(RGW)为对象存储提供 S3 端点。
- MDS
- 元数据服务器(MDS)提供 CephFS 共享卷。
3.3.2. 设计图 复制链接链接已复制到粘贴板!
下图说明了 Ceph Rook 如何与 OpenShift Container Platform 集成。
图 3.3. Rook-Ceph Operator
当 Ceph 在 OpenShift Container Platform 集群中运行时,OpenShift Container Platform 应用程序可以挂载由 Rook-Ceph 管理的块设备和文件系统,或者使用 S3/Swift API 进行对象存储。
3.3.3. 职责 复制链接链接已复制到粘贴板!
Rook-Ceph 操作器是一个引导和监控存储集群的容器。它执行以下功能:
- 自动配置存储组件
- 启动、监控和管理 Ceph 监控容器集和 Ceph OSD 守护进程,以提供 RADOS 存储集群
初始化 pod 和其他工件以运行要管理的服务:
- 池的 CRD
- 对象存储(S3/Swift)
- 文件系统
- 监控 Ceph mons 和 OSD,以确保存储仍然可用且正常运行
- 在根据集群大小调整 mon 配置时部署和管理 Cephmonmon 放置
- 监视 API 服务请求的状态更改,并应用更改
- 初始化使用存储所需的 Ceph-CSI 驱动程序
- 自动配置 Ceph-CSI 驱动程序,将存储挂载到 pod
rook-Ceph Operator 架构
Rook-Ceph 操作器镜像包含管理集群所需的所有工具。数据路径没有改变。但是,操作器不会公开所有 Ceph 配置。PG 和 crush map 等许多 Ceph 功能都隐藏给用户,在物理资源、池、卷、文件系统和存储桶方面提供更好的用户体验。
3.3.4. Resources 复制链接链接已复制到粘贴板!
rook-Ceph operator 添加了对在 openshift-storage 命名空间中创建的所有资源的所有者引用。卸载集群时,所有者会引用确保资源都已清理。这包括 OpenShift Container Platform 资源,如 configmaps, secrets, services, deployments, daemonsets 等。
Rook-Ceph 操作器监视 CR,以配置由 OpenShift Data Foundation 决定的设置,其中包括 CephCluster、CephObjectStore、CephFilesystem 和 CephBlockPool。
3.3.5. 生命周期 复制链接链接已复制到粘贴板!
rook-Ceph 操作器管理 Ceph 集群中以下 pod 的生命周期:
- rook operator
- 拥有集群协调的单一 pod。
- RBD CSI 驱动程序
- 两个调配器容器集,由一个部署进行管理。
-
每个节点有一个插件 pod,由
daemonset管理。
- CephFS CSI 驱动程序
- 两个调配器容器集,由一个部署进行管理。
-
每个节点有一个插件 pod,由
daemonset管理。
- Monitors (mons)
三个 mon pod,各自具有自己的部署。
- 扩展集群
- 包含五个 mon pod,一个位于仲裁区域中,另一个位于另外两个数据区域中。
- Manager (mgr)
集群有一个 mgr pod。
- 扩展集群
- 有两个 mgr 容器集(从 OpenShift Data Foundation 4.8 开始),各自位于两个非仲裁区域中。
- 对象存储守护进程 (OSD)
- 集群中最初创建至少三个 OSD。扩展集群时,会添加更多 OSD。
- 元数据服务器(MDS)
- CephFS 元数据服务器只有一个 pod。
- RADOS 网关(RGW)
- Ceph RGW 守护进程只有一个 pod。
3.4. MCG operator 复制链接链接已复制到粘贴板!
Multicloud 对象网关(MCG)操作器是 OpenShift Data Foundation 的操作器,以及 OpenShift Data Foundation 操作器和 Rook-Ceph 操作器。MCG operator 上游作为独立操作器提供。
MCG 操作器执行以下主要功能:
- 控制并协调 OpenShift Data Foundation 中的多云对象网关(MCG)组件。
- 管理新的用户资源,如对象 bucket 声明、存储桶类和后备存储。
- 创建默认的"开箱即用"资源。
些配置和信息通过 OpenShift Data Foundation 操作器传递给 MCG 操作器。
3.4.1. 组件 复制链接链接已复制到粘贴板!
MCG 操作器没有子组件。但是,它由一个协调循环组成,用于由它控制的不同资源。
MCG 操作器具有命令行界面(CLI),并作为 OpenShift Data Foundation 的一部分提供。它支持创建、删除和查询各种资源。此 CLI 在应用配置前添加了一个输入和状态验证层,这与直接应用 YAML 文件不同。
3.4.2. 职责和资源 复制链接链接已复制到粘贴板!
MCG Operator 协调并负责自定义资源定义(CRD)和 OpenShift Container Platform 实体。
- 后备存储
- 命名空间存储
- bucket 类
- 对象存储桶声明(OBC)
- NooBaa, pod 有状态设置 CRD
- Prometheus 规则和服务监控
- Pod 横向自动扩展(HPA)
后备存储
客户连接到 MCG 组件的资源。此资源为 MCG 提供在其上保存置备存储桶数据的功能。
根据 OpenShift Container Platform 运行的平台,作为部署的一部分创建默认后备存储。例如,当 OpenShift Container Platform 或 OpenShift Data Foundation 部署在 Amazon Web Services(AWS)上时,它会生成一个默认的后备存储,即 AWS::S3 存储桶。同样,对于 Microsoft Azure,默认后备存储是一个 blob 容器,以此类推。
默认后备存储使用云凭证操作器的 CRD 创建,该 CRD 附带了 OpenShift Container Platform。可添加到 MCG 的后备存储的数量没有限制。bucket 类 CRD 中使用后备存储来定义存储桶的不同策略。参考特定 OpenShift Data Foundation 版本的文档,以确定作为后备存储支持的服务或资源的类型。
命名空间存储
命名空间存储桶中使用的资源。部署期间不会创建默认值。
BucketClass
新调配存储桶的默认或初始策略。在存储桶类中设置以下策略:
- 放置策略(Placement policy)
指示要附加到存储桶的后备存储并用于写入存储桶的数据。此策略用于数据存储桶和缓存策略,以指示本地缓存放置。放置策略有两种模式:
- 分散。在定义的后备存储间条状数据
- 镜像。在每个后备存储上创建完整的副本
- 命名空间策略
- 命名空间存储桶的策略,用于定义用于聚合的资源以及用于写入目标的资源。
- 缓存策略
- 这是存储桶的策略,并设置缓存项目的 hub(数据源)和生存时间(TTL)。
部署期间会创建一个默认的 bucket 类,它使用使用默认后备存储的放置策略进行设置。对可添加的 bucket 类数量没有限制。
请参阅特定 OpenShift Data Foundation 版本的文档,以确定受支持的策略类型。
对象存储桶声明(OBC)
启用置备 S3 存储桶的 CRD。使用 MCG 时,OBC 接收一个可选存储桶类来记录存储桶的初始配置。如果没有提供 bucket 类,则使用默认的 bucket 类。
NooBaa, pod 有状态设置 CRD
控制 NooBaa 部署的不同 pod 的内部 CRD,如 DB pod、核心 pod 和端点。此 CRD 不可更改,因为它是内部的。此操作器协调以下实体:
- DB Pod SCC
- Role Binding 和 Service Account,允许 OpenShift Container Platform 和 NooBaa 用户界面间的 SSO 单点登录
- S3 访问的路由
- 由 OpenShift Container Platform 获取并签名的证书,它们是在 S3 路由上设置的
Prometheus 规则和服务监控
这些 CRD 为 Prometheus 和 MCG 支持的警报规则设置提取点。
Pod 横向自动扩展(HPA)
它与 MCG 端点集成。端点容器集根据 CPU 压力(S3 流量的数量)扩展和缩减。
3.4.3. 高可用性 复制链接链接已复制到粘贴板!
作为操作器,唯一提供的高可用性是 OpenShift Container Platform 重新调度失败的 pod。
3.4.4. 相关日志文件 复制链接链接已复制到粘贴板!
要排除 NooBaa Operator 的问题,您可以查看以下内容:
- Operator pod 日志,它们也可通过 must-gather 获得。
- 可以通过 must-gather 获得的不同 CRD 或实体及其状态。
3.4.5. 生命周期 复制链接链接已复制到粘贴板!
在部署 OpenShift Data Foundation 并卸载前,MCG 操作器会运行和协调。
第 4 章 OpenShift Data Foundation 安装概述 复制链接链接已复制到粘贴板!
OpenShift Data Foundation 由多个操作器管理的多个组件组成。
4.1. 已安装的 Operator 复制链接链接已复制到粘贴板!
从软件目录安装 OpenShift Data Foundation 时,会创建以下四个单独的 Deployment:
-
odf-operator:定义odf-operatorPod -
ocs-operator:定义ocs-operatorPod,该 Pod 为ocs-operator及其metrics-exporter运行进程。 -
rook-ceph-operator: 定义rook-ceph-operatorPod。 -
mcg-operator: 定义mcg-operatorPod。
这些操作器通过创建由其他操作器监视的客户资源(CR)来独立运行并相互交互。ocs-operator 主要负责创建 CR 来配置 Ceph 存储和多云对象网关。mcg-operator 有时会创建供其组件使用的 Ceph 卷。
4.2. OpenShift Container Storage 初始化 复制链接链接已复制到粘贴板!
OpenShift Data Foundation 捆绑包还定义了 OpenShift Container Platform 控制台的外部插件,添加新的屏幕和功能,即控制台中无法提供的新屏幕和功能。此插件在 odf-console-plugin Pod 中作为 Web 服务器运行,该插件由安装时由 OLM 创建的 Deployment 管理。
ocs-operator 在创建后会自动创建 OCSInitialization CR。在任何时间点上只有一个 OCSInitialization CR。它控制的 ocs-operator 行为不仅限于单个 StorageCluster 的范围,而是只执行一次。当您删除 OCSInitialization CR 时,ocs-operator 会再次创建它,这可让您重新触发其初始化操作。
OCSInitialization CR 控制以下行为:
SecurityContextConstraints(SCCs)-
创建
OCSInitializationCR 后,ocs-operator会创建各种 SCC 供组件 Pod 使用。 - Ceph Toolbox 部署
-
您可以使用
OCSInitialization部署用于高级 Ceph 操作的 Ceph 工具箱 Pod。 - rook-Ceph Operator 配置
-
此配置会创建
rook-ceph-operator-configConfigMap,用于监管rook-ceph-operator行为的整体配置。
4.3. 存储集群创建 复制链接链接已复制到粘贴板!
OpenShift Data Foundation 操作器本身不提供存储功能,而且必须定义所需的存储配置。
安装 Operator 后,可使用 OpenShift Container Platform 控制台向导或 CLI 创建新的 StorageCluster,并使用 ocs-operator 协调这个 StorageCluster。OpenShift Data Foundation 在每次安装中支持单个 StorageCluster。ocs-operator 协调会忽略在第一个 CR 后创建的任何 StorageCluster CR。
OpenShift Data Foundation 允许以下 StorageCluster 配置:
- 内部
-
在 Internal 模式中,所有组件都在 OpenShift Container Platform 集群中容器化,并使用在安装向导中根据管理员指定的
StorageClass创建的动态置备持久性卷(PV)。 - 内部附加
-
此模式与内部模式类似,但管理员需要定义直接附加到 Ceph 用于其后备存储的群集节点的本地存储设备。另外,管理员需要创建与本地存储 operator 协调的 CR,以提供
StorageClass。ocs-operator使用这个StorageClass作为 Ceph 的后备存储。 - 外部
- 在这个模式中,Ceph 组件不会在 OpenShift Container Platform 集群内运行,而是向应用程序可为其创建 PV 的外部 OpenShift Container Storage 安装提供连接。其他组件根据需要在集群中运行。
- MCG 独立
- 此模式有助于在没有附带的 CephCluster 的情况下安装多云对象网关系统。
找到 StorageCluster CR 后,ocs-operator 会对其进行验证,并开始创建后续资源来定义存储组件。
4.3.1. 内部模式存储集群 复制链接链接已复制到粘贴板!
内部和外部附加存储集群的设置过程相同,如下所示:
|
| 创建集群应用用于创建 Ceph 卷的存储类。 |
|
| 创建集群应用用于创建 Ceph 卷快照的卷快照类。 |
| Ceph RGW 配置 | 创建各种 Ceph 对象 CR,以启用和提供对 Ceph RGW 对象存储端点的访问。 |
| Ceph RBD 配置 |
创建 |
| CephFS 配置 |
创建 |
| Rook-Ceph 配置 |
创建 |
|
|
创建 |
|
|
创建 |
| 作业模板 |
创建 |
| Quickstarts |
创建 |
RGW (RADOS 网关)组件仅部署在内部环境中。它不是为基于云的部署创建。
4.3.1.1. 集群创建 复制链接链接已复制到粘贴板!
在 ocs-operator 创建 CephCluster CR 后,rook-operator 根据所需的配置创建 Ceph 集群。rook-operator 配置以下组件:
|
Ceph |
在集群中的不同节点上启动三个 Ceph |
|
Ceph | 此守护进程已启动,它会为集群收集指标并将其报告到 Prometheus。 |
| Ceph OSD |
这些 OSD 根据 |
| CSI 置备程序 |
为 RBD 和 |
|
CSI 卷插件和 |
RBD 和 |
配置 CephCluster CR 后,Rook 会协调剩余的 Ceph CR 以完成设置:
|
|
|
|
|
|
|
|
|
|
|
|
操作器监控 Ceph 健康状况,以确保存储平台健康。如果某个 mon 守护进程长时间停机(10 分钟),Rook 会在其位置启动一个新的 mon,以便能够完全恢复仲裁。
当 ocs-operator 更新 CephCluster CR 时,Rook 会立即响应请求的更改,以更新集群配置。
4.3.1.2. NooBaa 系统创建 复制链接链接已复制到粘贴板!
当创建 NooBaa 系统时,mcg-operator 会协调以下内容:
默认 BackingStore
根据部署 OpenShift Container Platform 和 OpenShift Data Foundation 的平台,会创建一个默认的后备存储资源,以便存储桶可以将其用于放置策略。不同的选项如下:
| Amazon Web Services(AWS)部署 |
|
| Microsoft Azure 部署 |
|
| Google Cloud Platform(GCP)部署 |
|
| On-prem 部署 |
如果 RGW 存在, |
| 以上所述部署都不适用 |
|
默认 BucketClass
创建带有放置策略到默认 BackingStore 的 BucketClass。
NooBaa pod
以下 NooBaa pod 已创建并启动:
| 数据库(DB) | 一个 Postgres DB 用来保存元数据、统计信息和事件等。然而,它不会保存存储的实际数据。 |
| Core | 这是处理配置、后台进程、元数据管理、统计信息等的 pod。 |
| Endpoints |
这些 pod 执行与 I/O 相关的实际工作,如重复数据删除和压缩、与不同服务通信以写入和读取数据等。端点与 |
Route
为使用 S3 的应用创建 NooBaa S3 接口的路由。
服务
为 NooBaa S3 接口创建一个使用 S3 的服务。
4.3.2. 外部模式存储集群 复制链接链接已复制到粘贴板!
对于外部存储集群,ocs-operator 的设置过程略有不同。ocs-operator 会查找是否存在 rook-ceph-external-cluster-details ConfigMap,该 ConfigMap 必须由其他人(管理员或控制台)创建。有关如何创建 ConfigMap 的详情,请参考为外部模式创建 OpenShift Data Foundation。然后,ocs-operator 会创建部分或全部以下资源,如 ConfigMap 中指定的:
| 外部 Ceph 配置 |
指定外部 |
| 外部 Ceph 凭据 Secret | 包含用于连接外部 Ceph 实例的凭据的 Secret。 |
| 外部 Ceph StorageClasses | 一个或多个 StorageClasses,用于为 RBD、CephFS 和/或 RGW 创建卷。 |
| 启用 CephFS CSI 驱动程序 |
如果指定了 |
| Ceph RGW 配置 | 如果指定了 RGW StorageClass,请创建各种 Ceph 对象 CR 来启用和提供对 Ceph RGW 对象存储端点的访问。 |
创建 ConfigMap 中指定的资源后,StorageCluster 创建过程会进行如下:
|
|
创建 |
|
|
创建应用程序用于创建 Ceph 卷快照的 |
|
|
创建 |
|
|
创建 |
4.3.2.1. 集群创建 复制链接链接已复制到粘贴板!
当以外部模式创建 CephCluster CR 时,Rook operator 会执行以下操作:
-
操作器验证连接可供远程 Ceph 集群使用。连接需要将
mon端点和 secret 导入到本地集群中。 -
CSI 驱动程序通过与 Ceph 的远程连接进行配置。在内部模式中配置时,RBD 和
CephFS调配器和卷插件的启动方式与 CSI 驱动程序相似,与 Ceph 的连接正好与 OpenShift 集群外部。 - 定期监控地址更改,并相应地更新 Ceph-CSI 配置。
4.3.2.2. NooBaa 系统创建 复制链接链接已复制到粘贴板!
当创建 NooBaa 系统时,mcg-operator 会协调以下内容:
默认 BackingStore
根据部署 OpenShift Container Platform 和 OpenShift Data Foundation 的平台,会创建一个默认的后备存储资源,以便存储桶可以将其用于放置策略。不同的选项如下:
| Amazon Web Services(AWS)部署 |
|
| Microsoft Azure 部署 |
|
| Google Cloud Platform(GCP)部署 |
|
| On-prem 部署 |
如果 RGW 存在, |
| 以上所述部署都不适用 |
|
默认 BucketClass
创建带有放置策略到默认 BackingStore 的 BucketClass。
NooBaa pod
以下 NooBaa pod 已创建并启动:
| 数据库(DB) | 一个 Postgres DB 用来保存元数据、统计信息和事件等。然而,它不会保存存储的实际数据。 |
| Core | 这是处理配置、后台进程、元数据管理、统计信息等的 pod。 |
| Endpoints |
这些 pod 执行与 I/O 相关的实际工作,如重复数据删除和压缩、与不同服务通信以写入和读取数据等。端点与 |
Route
为使用 S3 的应用创建 NooBaa S3 接口的路由。
服务
为 NooBaa S3 接口创建一个使用 S3 的服务。
4.3.3. MCG 独立存储集群 复制链接链接已复制到粘贴板!
在这种模式中,不会创建 CephCluster。相反,会使用默认值创建一个 NooBaa 系统 CR,以利用 OpenShift Container Platform 中的预先存在的 StorageClasses。
4.3.3.1. NooBaa 系统创建 复制链接链接已复制到粘贴板!
当创建 NooBaa 系统时,mcg-operator 会协调以下内容:
默认 BackingStore
根据部署 OpenShift Container Platform 和 OpenShift Data Foundation 的平台,会创建一个默认的后备存储资源,以便存储桶可以将其用于放置策略。不同的选项如下:
| Amazon Web Services(AWS)部署 |
|
| Microsoft Azure 部署 |
|
| Google Cloud Platform(GCP)部署 |
|
| On-prem 部署 |
如果 RGW 存在, |
| 以上所述部署都不适用 |
|
默认 BucketClass
创建带有放置策略到默认 BackingStore 的 BucketClass。
NooBaa pod
以下 NooBaa pod 已创建并启动:
| 数据库(DB) | 一个 Postgres DB 用来保存元数据、统计信息和事件等。然而,它不会保存存储的实际数据。 |
| Core | 这是处理配置、后台进程、元数据管理、统计信息等的 pod。 |
| Endpoints |
这些 pod 执行与 I/O 相关的实际工作,如重复数据删除和压缩、与不同服务通信以写入和读取数据等。端点与 |
Route
为使用 S3 的应用创建 NooBaa S3 接口的路由。
服务
为 NooBaa S3 接口创建一个使用 S3 的服务。
第 5 章 OpenShift Data Foundation 升级概述 复制链接链接已复制到粘贴板!
作为由 Operator Lifecycle Manager(OLM)管理的操作器捆绑包,OpenShift Data Foundation 会利用其操作器来执行通过 ClusterServiceVersion (CSV)CR 安装和升级产品的高级任务。
5.1. 升级工作流 复制链接链接已复制到粘贴板!
OpenShift Data Foundation 可识别两种类型的升级:Z-stream 发行升级和次版本升级。虽然这两个升级路径的用户界面工作流并不完全相同,但生成的行为相当相似。其区别如下:
对于 Z-stream 发行版本,OCS 将在 redhat-operators CatalogSource 中发布一个新捆绑包。OLM 将检测到这一点,并为新 CSV 创建 InstallPlan 来替换现有 CSV。订阅批准策略(无论是 Automatic 或 Manual)将决定 OLM 是否继续协调,或等待管理员批准。
对于次版本发行版本,OpenShift Container Storage 也会在 redhat-operators CatalogSource 中发布一个新的捆绑包。不同之处在于,这个捆绑包将成为新频道的一部分,频道升级不是自动的。管理员必须显式选择新发行频道。完成后,OLM 将检测到这一点,并为新 CSV 创建 InstallPlan 来替换现有的 CSV。由于频道切换是一个手动操作,因此 OLM 将自动启动协调。
从现在起,升级过程是相同的。
5.2. ClusterServiceVersion 协调 复制链接链接已复制到粘贴板!
当 OLM 检测到批准的 InstallPlan 时,它开始协调 CSV 的过程。一般来说,它根据新 spec 更新 operator 资源,验证新 CSV 安装正确,然后删除旧的 CSV。升级过程将把更新推送到 Operator Deployments,这将触发 Operator Pod 重启使用新 CSV 中指定的镜像。
虽然可以对给定 CSV 进行更改并将这些更改传播到相关资源,但在升级到新 CSV 时,所有自定义更改都将丢失,因为新 CSV 将根据其未更改的 spec 创建。
5.3. Operator 协调 复制链接链接已复制到粘贴板!
此时,OpenShift 数据基础操作对象的协调继续进行,如 OpenShift 数据基础安装概述中所述。Operator 将确保其预期配置中存在所有相关资源,如面向用户的资源(如 StorageCluster)中指定的。
第 6 章 OpenShift Data Foundation 的 Multus 架构 复制链接链接已复制到粘贴板!
本节介绍在将 OpenShift Data Foundation 配置为使用 OpenShift 多网络插件(Multus)时支持的流程和配置。此架构提供有关与 Multus 相关的 OpenShift Data Foundation 要求、流程和功能的信息。
对于偏离此参考架构的配置,请使用 JIRA ticket 链接打开支持例外: https://issues.redhat.com/projects/SUPPORTEX。
6.1. 假设 复制链接链接已复制到粘贴板!
这个 Multus 参考架构部分假定以下内容:
- OpenShift Data Foundation 安装有专用存储节点。
OpenShift control plane 节点不运行需要 OpenShift Data Foundation 存储的应用程序。
这不是可支持性所必需的,但可能需要根据其他集群布局的要求修改一些节点选择器和/或容限。
- 存在 VLAN。VLAN 是可选的,也不推荐。但是,在很多实例中,根据用户环境,需要 VLAN。
6.2. 使用的示例 复制链接链接已复制到粘贴板!
这个 Multus 参考架构使用以下示例:
- 四个专用的 OpenShift Data Foundation 存储节点
- 两个 OpenShift worker 节点
- 三个 Openshift control plane 节点
下图显示了没有 Multus 的传统 OpenShift Data Foundation 部署中的集群网络架构示例:
图 6.1. 没有 Multus 的集群网络架构示例
6.3. 为 OpenShift Data Foundation 部署选择 Multus 架构 复制链接链接已复制到粘贴板!
为 OpenShift Data Foundation 部署选择 Multus 网络,原因如下:
- 通过避免 OpenShift Pod (软件)网络来减少存储系统的延迟
- 为存储系统指定带宽,以避免存储和应用程序间的邻居问题
- 将存储网络与应用程序隔离以隔离
Multus 为以下两种 OpenShift Data Foundation 存储网络启用:
- 公共网络
- 集群网络
但是,建议仅将 Multus 公共网络配置为起点。
6.3.1. Multus 公共网络 复制链接链接已复制到粘贴板!
下图显示了使用 Multus 公共网络的 OpenShift Data Foundation 部署的集群网络架构:
图 6.2. 使用 Multus 公共网络部署 OpenShift Data Foundation
此架构实现 Multus 网络的所有三个优点:
- 通过避免软件定义的 pod 网络来减少存储延迟
- 存储系统获得专用的带宽,从而避免了立刻-neighbor 干扰
- 存储网络与阻止 pod 侦听存储网络的应用程序隔离
但是,如果公共网络的吞吐量低于 Pod 网络,存储流量可能比传统部署要快。
公共网络是大多数 OpenShift Data Foundation 集群部署的推荐架构。在这个架构中,所有存储流量都使用专用的公共网络,其中包括来自应用程序的 I/O 流量、存储系统中的数据复制流量以及存储系统中的数据恢复流量。
6.3.2. Multus 公共网络和集群网络 复制链接链接已复制到粘贴板!
下图显示了使用 Multus 公共网络和 Multus 集群网络网络的 OpenShift Data Foundation 部署的集群网络架构:
图 6.3. 使用 Multus 公共网络和 Multus 集群网络的集群网络架构
当同时使用公共和集群网络时,Multus 的所有三个优势都会实现。在这种情况下,每个存储网络在 OpenShift Data Foundation 集群中执行特定的角色。公共网络仅处理来自应用程序和集群网络的 I/O 流量,用于处理存储复制和恢复流量。
集群网络定期处理数据复制流量。假设 OpenShift Data Foundation 的默认 3x 复制,集群网络会处理每个数据写入的应用程序 I/O 流量,以将存储数据总数复制到 3x。在存储节点或区故障事件中,集群网络也会处理集群中的恢复数据。
在这个构架中,集群网络的大小建议 2-3x 大于公共网络。较大的大小可以缩短故障转移时间,但也会在正常的集群操作过程中造成大量带宽。存储故障事件期间的总存储带宽可能会受到公共或集群网络的限制,具体取决于网络的大小。
这个架构比推荐的仅公共架构复杂,且有多个可能会影响用户 SLO 的因素。因此,作为替代方案,OpenShift Data Foundation 建议将所有存储网络接口绑定到一起,以创建单个、更大的公共网络。
6.3.3. Multus 集群网络 复制链接链接已复制到粘贴板!
下图显示了使用 Multus 集群网络的 OpenShift Data Foundation 部署的集群网络架构:
图 6.4. 集群网络架构
在集群网络架构中,部分实现 Multus 的好处。集群网络获取复制和恢复角色。OpenShift Pod 网络从应用中获取处理存储 I/O 的角色。这样可保证减少非邻居干扰,但应用程序 I/O 仍然会受到其他应用程序网络的影响,反之亦然。
由于软件定义的 Pod 网络,应用程序 I/O 到存储系统应该比其他 Multus 架构有更高的延迟。同样,存储网络不会与应用程序隔离。例如,特权 Pod 仍然可以 snoop 存储流量。
6.4. Multus 网络要求 复制链接链接已复制到粘贴板!
本节介绍在 OpenShift Data Foundation 部署中使用 Multus 网络的要求。
- 常规要求
- 路由要求
- 地址空间大小要求
6.4.1. 常规要求 复制链接链接已复制到粘贴板!
Multus 网络的一般要求如下:
- 用于存储网络的接口必须在每个 OpenShift 存储和工作节点上具有相同的接口名称。
- 接口必须全部连接到同一底层网络。
- 当同时使用公共和集群网络时,它们不应相互连接。
- 至少需要一个额外网络用于存储。
- 存储网络必须至少为 10 Gbps。支持绑定链接并推荐使用。
带有 Multus 的 OpenShift Data Foundation 在每个存储网络接口上创建多个虚拟 MAC 地址。这需要网卡和切换硬件来支持混杂模式。有些智能交换机具有检查每个数据包的安全进程,这些交换机可能会因为 OpenShift Data Foundation 的大量 MAC 地址而出现大量。最好禁用需要高级处理的智能交换机安全功能。
同样,虚拟或软件交换机可能会难以处理大量 MAC 地址。有些无法禁用此功能。因此,不要在没有支持例外的情况下使用虚拟交换机。
6.4.2. 路由要求 复制链接链接已复制到粘贴板!
要使 OpenShift Data Foundation 持久性卷声明(PVC)正常工作,部署到每个 OpenShift 节点(worker 和存储)的 Ceph-CSI 驱动程序 pod 必须使用主机网络。Ceph-CSI 驱动程序还必须能够通过 Multus 公共网络访问 OpenShift Data Foundation Ceph 集群。这意味着每个 OpenShift 节点都必须与公共网络连接,反之亦然。
要使它尽可能简单,且无 IP 重叠问题的风险,请为连接到公共网络的节点连接选择不同的子网(IP 范围)。在节点公共子网和 Pod 公共子网上设置路由,以便它们相互路由。最后结果是,节点公共子网和 Pod 公共子网将作为一个连续的公共网络一起充当一个连续的公共网络。
如果使用集群网络,请不要将 Pod 公共网络或节点公共网络路由到集群网络。集群网络应独立且隔离。下图演示了子网路由要求:
图 6.5. 子网路由要求
6.4.3. 地址空间大小 复制链接链接已复制到粘贴板!
带有 Multus 的 OpenShift Data Foundation 需要每个 OpenShift Data Foundation Ceph 存储守护进程的 IP 地址。网络必须具有足够的 IP 地址才能考虑附加到网络的存储 pod 数量,以及一些额外的空间才能考虑故障转移事件。以后扩展网络可能需要停机,因此建议为可预见的集群大小分配空间。
对于 Multus 公共网络,必须规划以下范围:
- Pod 公共网络地址空间必须包含足够的 IP 地址,用于 openshift-storage 命名空间中运行的 ODF pod 总数
- 节点公共网络地址空间必须包含足够的 IP 用于 OpenShift 节点总数(worker + 存储)
对于 Multus 集群网络,必须计划以下范围:
- Pod 集群网络地址空间必须包含足够的 IP 地址,用于 openshift-storage 命名空间中运行的 OSD pod 总数
6.5. Multus 网络的建议 复制链接链接已复制到粘贴板!
本节论述了 OpenShift Data Foundation 部署中 Multus 网络的通用和地址范围建议。
6.5.1. Multus 网络的一般建议 复制链接链接已复制到粘贴板!
Red Hat Ceph underpins OpenShift Data Foundation。Red Hat Ceph 网络建议对于了解 OpenShift Data Foundation Multus 网络以及查找特定建议很有用。如需更多信息,请参阅链接: 适用于 OpenShift Data Foundation 网络的 Red Hat Ceph Storage 的网络注意事项。
6.5.2. 地址范围 复制链接链接已复制到粘贴板!
下表建议每个 Multus 网络或子网的 IP 范围:
| 网络 | 网络范围 CIDR | 大约最大值 | 公共或集群网络 |
|---|---|---|---|
| Pod 公共网络 | 192.168.240.0/21 | 1600 OpenShift Data Foundation pod 总数 | 公共网络 |
| Pod 集群网络 | 192.168.248.0/22 | 800 OSDs | 集群网络 |
| 公共节点网络 | 192.168.252.0/23 | 400 OpenShift worker+storage 节点 | 公共网络 |
这应该足以满足大多数机构的需要。建议使用保留专用地址空间(192.168.0.0/16)的最后 6.25%(1/16th)。记录大约的最大 ODF 和 OpenShift 大小,以便有 25% 开销安全处理失败事件。
6.6. 规划主机接口连接 复制链接链接已复制到粘贴板!
OpenShift 节点可以分为以下三种类型:
- OpenShift control plane 节点
- OpenShift worker 节点
- OpenShift Data Foundation 存储节点.
每种类型都需要不同的连接到存储集群,如下所示:
- 所有 OpenShift 节点都需要访问 OpenShift 机器网络
control plane 节点不需要任何与存储网络的连接
- 如果在 control plane 节点上需要 OpenShift Data Foundation PVC (不推荐),请将它们视为 worker 节点
- 如果 control plane 节点用作 OpenShift Data Foundation 存储节点,请将它们视为存储节点
- Worker 节点运行 Ceph-CSI 驱动程序守护进程,将 PVC 存储挂载到 Pod,因此需要连接到 OpenShift Data Foundation 公共网络(如果使用)
- 存储节点需要访问所有使用的存储网络
6.6.1. 接口和连接示例 复制链接链接已复制到粘贴板!
下图显示了为每个节点类型计划的接口和连接示例:
图 6.6. 接口和连接示例
本例包括集群网络以实现完整性。
在本例中,vlan220 (public)和 vlan221 (cluster)是要用于 OpenShift Data Foundation 配置的接口。如果部署的环境中 VLAN 未使用,则将改为使用 bond1 和 bond2。如果没有使用绑定或 VLAN,则使用主机接口(如 eth 2、eth4)。OpenShift Data Foundation
OpenShift Data Foundation Pod 公共网络和 OpenShift Data Foundation 节点公共网络图帐户中"ODF 公共网络"。OpenShift 机器网络用作 OpenShift Pod 网络的后端,仅用于参考。不要为 ODF 节点公共网络出现错误此网络。不要计划或执行涉及机器网络的路由。
6.6.2. 推荐的主机接口连接 复制链接链接已复制到粘贴板!
对于仅使用公共网络的 OpenShift Data Foundation Multus 架构(大多数用户推荐),可以使用上例中的相同节点。eth0、eth1、eth2 和 eth4 将绑定为 bond1,并标记为 vlan220。此架构确保存储节点具有额外的可用带宽,用于 OpenShift Data Foundation Ceph OSD 所需的复制和恢复。vlan220 用于 OpenShift Data Foundation 配置。但是,存在许多有效环境的变体。
图 6.7. 推荐的主机接口连接
不需要将额外的公共网络带宽专用于存储节点,但这很有用。eth4 和 eth5 可以从存储节点完全省略,将相同的带宽专用于 worker 和存储节点。客户环境中经常看到这种设计。
或者,eth2 和 eth3 可以在存储节点上具有较高的吞吐量接口(例如,worker 节点上的 10Gbps 和 25Gbps 存储节点为 25Gbps)。这允许更多存储节点带宽,同时仍然仅在存储节点上使用两个接口。
6.7. Multus 网络配置 复制链接链接已复制到粘贴板!
Multus 网络配置有 NetworkAttachmentDefinition 对象。这些对象配置 Pod 网络连接。OpenShift Network Attachment Definitions 支持许多选项,但 OpenShift Data Foundation 仅支持几个概述,如下所示:
-
macvlan是唯一支持的 CNI 插件,其中abouts 是唯一支持的 IP 地址管理(IPAM)插件
从这些选择中分离需要支持例外
地址范围值也必须与为集群选择的匹配。此处使用示例集群、主机接口和推荐的网络范围。在部署的环境中根据需要修改它们。
6.7.1. 公共 NetworkAttachmentDefinition 复制链接链接已复制到粘贴板!
示例的建议 Pod 公共网络配置如下。如果没有使用 Multus 公共网络,则省略此项。确保包含 routes 部分,以允许公共网络上的 Pod 通过公共网络访问节点。
apiVersion: "k8s.cni.cncf.io/v1"
kind: NetworkAttachmentDefinition
metadata:
name: public-net
namespace: openshift-storage
spec:
config: |
{
"cniVersion": "0.3.1",
"type": "macvlan",
"master": "vlan220", # host public network interface
"mode": "bridge",
"ipam": {
"type": "whereabouts",
"range": "192.168.240.0/21", # pod public network range
"routes": [
{"dst": "192.168.252.0/23"} # node public network range
]
}
}
6.7.2. 集群 NetworkAttachmentDefinition 复制链接链接已复制到粘贴板!
示例的建议 Pod 集群网络配置如下。如果没有使用 Multus 集群网络,则省略此项(大多数用户推荐)。此配置不应具有 routes 部分。
apiVersion: "k8s.cni.cncf.io/v1"
kind: NetworkAttachmentDefinition
metadata:
name: cluster-net
namespace: openshift-storage
spec:
config: |
{
"cniVersion": "0.3.1",
"type": "macvlan",
"master": "vlan221", # host cluster network interface
"mode": "bridge",
"ipam": {
"type": "whereabouts",
"range": "192.168.248.0/22" # pod cluster network range
}
}
6.7.3. Multus 公共网络的节点配置 复制链接链接已复制到粘贴板!
OpenShift worker 和存储节点必须配置为通过主机公共网络接口将主机流量路由到公共网络上的 Pod。
配置节点的建议方法是使用 OpenShift NodeNetworkConfigurationPolicy 对象。无论部署策略是什么,所有 OpenShift 用户都可支持此方法。此方法需要安装并启用 NMState Operator。如需更多信息,请参阅链接: Kubernetes NMState Operator。
每个节点都必须获取节点公共网络地址范围内的 ODF 公共网络上的 IP 地址。静态 IP 地址管理是唯一可以支持任何 OpenShift 集群的 IPAM 方法。因此,静态管理是 OpenShift Data Foundation 只支持静态管理方法。这每个主机都需要一个 NodeNetworkConfigurationPolicy 对象。可用于配置主机的模板如下所示。
以下此模板在每个主机上都创建一个名为"shim"接口的接口。shim 接口使用主机公共网络接口(如 vlan220)作为父级。然后会为 shim 接口提供静态 IP,而不是提供给父 IP。同样,路由使用 shim。这是关键的详情。macvlan 不允许任何给定主机上连接的 Pod 的虚拟网络直接到达主机或通过切换 hairpin。如果没有 shim 接口,OpenShift Data Foundation 将无法正常工作。不要在不配置 shim 接口的情况下尝试设置 OpenShift Data Foundation Multus 公共网络。
apiVersion: nmstate.io/v1
kind: NodeNetworkConfigurationPolicy
metadata:
name: ceph-public-net-shim-{{NODE_NAME}}
spec:
nodeSelector:
node-role.kubernetes.io/worker: ""
kubernetes.io/hostname: {{NODE_NAME}}
desiredState:
interfaces:
- name: odf-pub-shim
description: Shim interface to connect to ODF public network
type: mac-vlan
state: up
mac-vlan:
base-iface: vlan220 # host public network interface
mode: bridge
promiscuous: true
ipv4:
enabled: true
dhcp: false
address:
- ip: 192.168.252.1 # static IP in node public network range
prefix-length: 23 # node public network range mask
routes:
config:
- destination: 192.168.240.0/21 # pod public network range
next-hop-interface: odf-pub-shim
首先,请按照模板中的注释为要部署的环境更新基本模板。然后,对于每个节点,复制模板,然后填写 {{NODE_NAME}} 和每个节点的唯一静态 IP。
6.8. Multus 配置的预安装清单 复制链接链接已复制到粘贴板!
在计划或执行上述所有部分后,OpenShift Data Foundation 预安装可以开始。在继续操作前,应完成以下预安装项目清单:
- 完整阅读 Multus 架构文档。
- 选择要使用的 OpenShift Data Foundation Multus 网络。
- 规划主机接口连接。
- 部署 OpenShift。
- 选择要使用的网络地址范围。
-
为 Pod 编写
NetworkAttachmentDefinition清单。 -
为节点写入
NodeNetworkConfigurationPolicy清单。 - 将清单部署到 OpenShift 集群
- 安装 OpenShift Data Foundation,但还没有部署 StorageCluster
- 运行 Multus 验证工具来检查预安装部署(在下一节中介绍)
6.9. 验证和调试 Multus 配置 复制链接链接已复制到粘贴板!
OpenShift Data Foundation 具有在 OpenShift Data Foundation StorageCluster 部署前执行基本连接测试的工具。这个 Multus 验证工具旨在是一个自助服务工具,它根据通过或失败的验证步骤返回可能不正确的详情列表。
此工具执行基本连接和 IP 可用性检查。它无法检测到每个可能的错误配置,并且无法检测到网络性能问题。确保每个集群部署的尽职。
如需更多信息,请参阅链接: 附录 A. Multus 先决条件验证工具。
使用工具遇到问题时,检查工具输出是否有建议。使用与工具运行的 Pod 关联的事件(例如,使用 oc -n openshift-storage describe pods)进一步调试。尽管调试仍存在问题,收集 OpenShift Data Foundation must-gather,并创建一个包括完整工具输出和 must-gather tarball 的 OpenShift Data Foundation 帮助票据。如需更多信息,请参阅链接: 使用 must-gather 下载日志文件和诊断信息。
为获得最佳结果,请使用带 Multus 验证工具的配置文件。建议进行以下配置,可以根据需要按照注释进行更新。
publicNetwork: "public-net" # comment out if public network is unused
# clusterNetwork: "cluster-net" # uncomment if used
# for airgapped environments, mirror this image, then update this config to reference the mirror
nginxImage: "quay.io/nginx/nginx-unprivileged:stable-alpine"
namespace: "openshift-storage"
serviceAccountName: "rook-ceph-system"
nodeTypes:
storage-nodes:
osdsPerNode: 12 # set to the max number of OSDs per storage node
otherDaemonsPerNode: 16
placement:
nodeSelector:
cluster.ocs.openshift.io/openshift-storage: ""
tolerations:
- {"key":"node.ocs.openshift.io/storage","value":"true"}
worker-nodes:
osdsPerNode: 0
otherDaemonsPerNode: 6
placement:
nodeSelector:
tolerations:
如果此建议被证明为不足或过期,请使用 工具使用 ./rook multus 验证配置 dedicated-storage-nodes 生成新配置。
6.10. 验证 Multus 配置和安装后检查后安装 OpenShift Data Foundation 复制链接链接已复制到粘贴板!
使用 Multus 验证工具验证连接后,可以部署 OpenShift Data Foundation 存储集群。请参阅 OpenShift Data Foundation 文档,并确保在部署过程中选择适当的 Multus 网络。
6.10.1. 安装后检查 复制链接链接已复制到粘贴板!
除了 OpenShift Data Foundation 健康检查外,请通过执行以下操作确保 Multus 配置为预期:
使用 ODF toolbox 或
odf-cli工具,运行ceph osd dump来验证 OSD 在集群网络中有一个 IP。在输出中,确保 OSD 守护进程在公共网络中有一个 IP (如果使用)。如果使用 Multus 集群网络,OSD 应该在集群网络中有一个 IP。如果它留空,OSD 应该仅列出公共网络 IP。如果部署了文件系统,请确保 MDS 守护进程在公共网络中有一个 IP (如果使用)。
在使用 ODF PVC 的新命名空间中创建测试应用程序 Deployment。
确保测试应用程序 Pod 可以写入挂载的 PVC 卷。删除 Deployment 的 Pod,然后等待它重新调度到新节点。确保前面的数据可以重新读取,并确保可以写入新数据。
-
在集群中运行一些测试负载生成器,以写入 OpenShift Data Foundation PVC。在 OpenShift Data Foundation 集群填充到 20% 后,降低节点或故障区的硬故障。将 node 或 zone 保留为失败状态,然后观察 OpenShift Data Foundation 集群状态和 OpenShift Data Foundation Pod 状态。集群健康状态可能会显示
HEALTH_WARN,但它不应显示HEALTH_ERR。一个或两个 OpenShift Data Foundationd Pod 失败可能正常,但几个故障可能会表示问题。
附录 A. Multus 先决条件验证工具 复制链接链接已复制到粘贴板!
这是一个交互式工具,可帮助支持 in-field 调试和解决影响 Multus 集群的通用配置问题。它运行一个验证测试,它决定当前的 NetworkAttachmentDefinition 和系统配置是否支持带有 Multus 的 OpenShift Data Foundation。
它是一个长时间运行的测试。它启动 web 服务器和许多客户端来验证 Multus 网络通信是否正常工作。
它不会执行任何负载测试。不支持大量 Ceph 流量的网络可能仍然遇到运行时问题。这可能会看到高 I/O 负载或在 OSD 重新平衡期间(例如,在节点/磁盘故障或 OpenShift Data Foundation 升级过程中)。因此,建议执行网络负载测试,以确保基本网络配置满足用户要求。如需了解更多有关 OSD 重新平衡的信息,请参阅文档。
A.1. 如何使用 Multus 先决条件验证工具 复制链接链接已复制到粘贴板!
在配置了 Multus NetworkAttachmentDefinition 和安装 OpenShift Data Foundation operator 后,从 OpenShift 管理员 shell 运行验证工具,但安装了 OpenShift Data Foundation StorageCluster 之前。
流程
要运行验证工具,首先使用
oc rsh命令访问rook-ceph-operatorpod:$ oc rsh <rook-ceph-operator-pod-name>工具提供广泛的帮助文本。
运行 工具。
$ ./rook multus validation run -h运行该工具时,您将获得该工具的最新版本。
验证工具配置文件
该工具支持配置文件,允许在不同类型的节点上配置测试守护进程的数量。配置文件可用于在非存储节点上同时测试 CSI+Ceph+OSD 放置时,可以在存储节点上测试 CSI+Ceph+OSD 放置。工具提供了带有注释文档的内置配置文件示例,以帮助更快地开始。
$ ./rook multus validation config -h
A.2. 验证工具故障排除 复制链接链接已复制到粘贴板!
如果在运行验证工具时测试失败,它会建议根据失败条件检查一些问题。这有助于快速解决常见配置问题。
- 要诊断工具本身的问题,请使用 --log-level DEBUG 获取更多详细信息。
如果 pod 没有启动,您可以预期以下问题:
- NAD 配置问题。
-
oc pod describe命令包含错误作为事件。 - 有些 NIC 不支持用于额外 MAC 地址的足够的虚拟端口或 VLAN。
如果 pod 启动但没有通信,您可以预期以下问题:
- 网络设计或配置可能包含错误。
- 网络交换机可能会阻塞子接口 MAC 地址或 IP (检查 promiscuous 模式设置)
- 切换防火墙
- 系统或 NAD Linux 网络配置可能会阻止流量
SOS 报告将具有查看下一个信息的好信息
-
ip_netns_exec swig_address JavaDoc和ip_netns_exec pcscd_routeJavaDoc 来自容器命名空间
-
A.3. 如何获得帮助 复制链接链接已复制到粘贴板!
如果您根据上一节所述的故障排除步骤解决问题,则应收集大量信息以获得帮助。
在这种情况下,该工具将列出应收集到存档文件中的资源。对于 OpenShift 和 OpenShift Data Foundation,以下 OpenShift 工具包含进一步调试所需的信息:
- 网络图
- odf must-gather
- OCP must-gather
- OCP must-gather 网络日志
- SOS 从运行测试 pod 的所有节点上报告(https://access.redhat.com/solutions/3530881)
Multus 在各种产品层中高度集成,问题很可能与配置或物理硬件环境相关,而不是产品错误。在工程层进行初始调查将涉及 ODF、OpenShift 以及 RHEL 网络专家,以排除配置或环境。
- General Multus bug/help: OCP Jira: https://issues.redhat.com/projects/OCPBUGSM
- ODF Multus 错误: ODF jira: https://issues.redhat.com/projects/DFBUGS
- 请 联系红帽客户支持。