Skip to main content
NetApp container solutions
简体中文版经机器翻译而成,仅供参考。如与英语版出现任何冲突,应以英语版为准。

架构

贡献者 banum-netapp kevin-hoke

尽管NetApp ONTAP支持的 Red Hat OpenShift 和Trident默认不提供工作负载之间的隔离,但它们提供了可用于配置多租户的广泛功能。为了更好地理解在由NetApp ONTAP支持的Trident的 Red Hat OpenShift 集群上设计多租户解决方案,让我们考虑一个具有一组要求的示例并概述围绕它的配置。

假设一个组织在 Red Hat OpenShift 集群上运行两个工作负载,这是两个不同团队正在开展的两个项目的一部分。这些工作负载的数据驻留在由Trident在NetApp ONTAP NAS 后端动态配置的 PVC 上。该组织需要为这两个工作负载设计一个多租户解决方案,并隔离用于这些项目的资源,以确保维护安全性和性能,主要关注为这些应用程序提供服务的数据。

下图描述了由NetApp ONTAP支持的带有Trident的 Red Hat OpenShift 集群上的多租户解决方案。

Red Hat OpenShift 集群上的多租户功能,采用由NetApp ONTAP支持的Trident

技术要求

  1. NetApp ONTAP存储集群

  2. Red Hat OpenShift 集群

  3. Trident

Red Hat OpenShift – 集群资源

从 Red Hat OpenShift 集群的角度来看,首先要启动的顶级资源是项目。 OpenShift 项目可以看作是一个集群资源,它将整个 OpenShift 集群划分为多个虚拟集群。因此,项目级别的隔离为配置多租户提供了基础。

下一步是在集群中配置 RBAC。最佳做法是将处理单个项目或工作负载的所有开发人员配置为身份提供程序 (IdP) 中的单个用户组。Red Hat OpenShift 允许 IdP 集成和用户组同步,从而允许将 IdP 中的用户和组导入到集群中。这有助于集群管理员将专用于项目的集群资源的访问权限隔离给在该项目上工作的一个或多个用户组,从而限制对任何集群资源的未授权访问。要了解有关 IdP 与 Red Hat OpenShift 集成的更多信息,请参阅 "了解身份提供程序"

NetApp ONTAP

隔离作为 Red Hat OpenShift 集群的持久存储提供程序的共享存储非常重要,以确保在每个项目的存储上创建的卷对于主机来说就像是在单独的存储上创建的一样。为此,请在NetApp ONTAP上创建与项目或工作负载数量相同的 SVM(存储虚拟机),并将每个 SVM 专用于一个工作负载。

Trident

在 NetApp ONTAP 上为不同项目创建不同的 SVM 后,必须将每个 SVM 映射到不同的 Trident 后端。Trident 上的后端配置驱动将持久存储分配给 OpenShift 集群资源,并且需要映射到 SVM 的详细信息。这至少应该是后端的协议驱动程序。可选地,它允许您定义如何在存储上配置卷,并设置卷大小或聚合使用率的限制等。有关 Trident 后端定义的详细信息,请参阅 "配置后端"

Red Hat OpenShift – 存储资源

在配置 Trident 后端之后,下一步是配置 StorageClasses。配置与后端数量相同的存储类,使每个存储类只能在一个后端上启动卷。我们可以在定义存储类时,通过使用 storagePools 参数将 StorageClass 映射到特定的 Trident 后端。有关定义存储类的详细信息,请参见 "创建存储类"。因此,从 StorageClass 到 Trident 后端存在一对一的映射,而该后端又指向一个 SVM。这可以确保通过分配给该项目的 StorageClass 发起的所有存储声明都仅由专用于该项目的 SVM 提供服务。

由于存储类不是命名空间资源,我们如何确保另一个命名空间或项目中的 pod 对一个项目的存储类的声明被拒绝?答案是使用 ResourceQuotas。ResourceQuotas 是控制每个项目资源总使用量的对象。它可以限制项目中对象可以消耗的资源数量和总量。几乎所有项目资源都可以使用 ResourceQuotas 加以限制,有效利用这些资源可以帮助组织降低因过度配置或过度消耗资源而导致的成本和停机风险。有关详细信息,请参阅 "为每个项目设置资源配额"

对于这种用例,我们需要限制特定项目中的 pod 从非专用于其项目的存储类中声明存储。为此,我们需要通过设置来限制其他存储类的持久卷声明 `<storage-class-name>.storageclass.storage.k8s.io/persistentvolumeclaims`为 0。此外,集群管理员必须确保项目中的开发人员无权修改资源配额。