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

存储配置

提供者

NetApp 产品组合中的每个存储平台都具有独特的功能,无论应用程序是容器化还是非容器化,都能从中受益。Trident 可与 ONTAP 和 Element 结合使用。没有一个平台比另一个平台更适合所有应用程序和场景,但是,在选择平台时,应考虑应用程序和设备管理团队的需求。

您应遵循使用所使用协议的主机操作系统的基线最佳实践。或者,您也可以考虑将应用程序最佳实践(如果有)与后端,存储类和 PVC 设置结合使用,以便为特定应用程序优化存储。

ONTAP 和 Cloud Volumes ONTAP 最佳实践

了解为 Trident 配置 ONTAP 和 Cloud Volumes ONTAP 的最佳实践。

以下建议是为容器化工作负载配置 ONTAP 的准则,容器化工作负载会占用 Trident 动态配置的卷。应考虑并评估每个问题在您的环境中的适用性。

使用专用于 Trident 的 SVM

Storage Virtual Machine ( SVM )可在 ONTAP 系统上的租户之间实现隔离和管理隔离。通过将 SVM 专用于应用程序,可以委派特权并应用最佳实践来限制资源消耗。

可通过多种方法管理 SVM :

  • 在后端配置中提供集群管理接口以及相应的凭据,并指定 SVM 名称。

  • 使用 ONTAP 系统管理器或命令行界面为 SVM 创建专用管理接口。

  • 与 NFS 数据接口共享管理角色。

在每种情况下,接口都应位于 DNS 中,配置 Trident 时应使用 DNS 名称。这有助于在不使用网络身份保留的情况下实施某些灾难恢复方案,例如 SVM-DR 。

在为 SVM 配置专用管理 LIF 或共享管理 LIF 之间没有任何偏好,但是,您应确保网络安全策略与您选择的方法一致。无论如何,管理 LIF 应可通过 DNS 访问,以实现最大的灵活性 "SVM-DR" 与 Trident 结合使用。

限制最大卷数

ONTAP 存储系统具有最大卷数,具体取决于软件版本和硬件平台。请参见 "NetApp Hardware Universe" 以 ONTAP 确定确切限制。当卷计数用尽时,配置操作不仅会对 Trident 失败,而且会对所有存储请求失败。

Trident 的 ontap-nasontap-san 驱动程序为创建的每个 Kubernetes 永久性卷( PV )配置一个 FlexVolume 。ontap-nas-economy 驱动程序会为每 200 个 PV 创建大约一个 FlexVolume (可在 50 到 300 之间配置)。ontap-san-economy-经济 驱动程序会为每 100 个 PV 创建大约一个 FlexVolume (可配置为 50 到 200 )。要防止 Trident 占用存储系统上的所有可用卷,您应对 SVM 设置限制。您可以从命令行执行此操作:

vserver modify -vserver <svm_name> -max-volumes <num_of_volumes>

max-volumes 的值因环境的特定条件而异:

  • ONTAP 集群中现有卷的数量

  • 希望在 Trident 之外为其他应用程序配置的卷数

  • Kubernetes 应用程序预期占用的永久性卷数

max-volumes 值是在 ONTAP 集群中的所有节点上配置的总卷数,而不是在单个 ONTAP 节点上配置的总卷数。因此,在某些情况下, ONTAP 集群节点所配置的 Trident 卷可能远远多于或少于其他节点。

例如,一个双节点 ONTAP 集群最多可以托管 2000 个 FlexVolume 。将最大卷数设置为 1250 似乎非常合理。但是,如果只是 "聚合" 从一个节点分配给 SVM ,或者从一个节点分配的聚合无法配置(例如,由于容量),则另一个节点将成为所有 Trident 配置卷的目标。这意味着,在达到 max-volumes 值之前,可能会达到该节点的卷限制,从而影响使用该节点的 Trident 和其他卷操作。* 您可以通过确保将集群中每个节点的聚合分配给 Trident 使用的 SVM 来避免这种情况。 *

限制 Trident 创建的卷的最大大小

要为 Trident 可以创建的卷配置最大大小,请在 backend.json 定义中使用 limitVolumeSize 参数。

除了控制存储阵列上的卷大小之外,您还应利用 Kubernetes 功能。

配置 Trident 以使用双向 CHAP

您可以在后端定义中指定 CHAP 启动程序以及目标用户名和密码,并在 SVM 上启用 Trident CHAP 。在后端配置中使用 useCHAP 参数, Trident 使用 CHAP 对 ONTAP 后端的 iSCSI 连接进行身份验证。Trident 20.04 及更高版本支持双向 CHAP 。

创建并使用 SVM QoS 策略

利用应用于 SVM 的 ONTAP QoS 策略,限制 Trident 配置的卷可使用的 IOPS 数量。这有助于实现 "防止抢占资源" 或控制不足的容器,以使其不会影响 Trident SVM 以外的工作负载。

您可以通过几个步骤为 SVM 创建 QoS 策略。有关最准确的信息,请参见适用于您的 ONTAP 版本的文档。以下示例将创建一个 QoS 策略,将 SVM 可用的总 IOPS 限制为 5000 。

# create the policy group for the SVM
qos policy-group create -policy-group <policy_name> -vserver <svm_name> -max-throughput 5000iops

# assign the policy group to the SVM, note this will not work
# if volumes or files in the SVM have existing QoS policies
vserver modify -vserver <svm_name> -qos-policy-group <policy_name>

此外,如果您的 ONTAP 版本支持此功能,则可以考虑使用最低 QoS 来保证容器化工作负载的吞吐量。自适应 QoS 与 SVM 级别策略不兼容。

专用于容器化工作负载的 IOPS 数量取决于许多方面。其中包括:

  • 使用存储阵列的其他工作负载。如果存在与 Kubernetes 部署无关的其他工作负载,则应注意利用存储资源,以确保这些工作负载不会意外受到不利影响。

  • 容器中运行的预期工作负载。如果 IOPS 要求较高的工作负载将在容器中运行,则 QoS 策略较低会导致出现不良体验。

请务必记住,在 SVM 级别分配的 QoS 策略会导致配置到 SVM 的所有卷共享同一个 IOPS 池。如果一个或少量容器化应用程序的 IOPS 要求较高,则可能会成为其他容器化工作负载的抢占资源的应用程序。如果是这种情况,您可能需要考虑使用外部自动化来分配每个卷的 QoS 策略。

重要 如果 ONTAP 版本早于 9.8 ,则应将此 QoS 策略组分配给 SVM * 仅 * 。

为 Trident 创建 QoS 策略组

服务质量( QoS )可确保关键工作负载的性能不会因争用工作负载而降级。ONTAP QoS 策略组为卷提供 QoS 选项,并使用户能够为一个或多个工作负载定义吞吐量上限。有关 QoS 的详细信息,请参见 "通过 QoS 保证吞吐量"。您可以在后端或存储池中指定 QoS 策略组,这些策略组将应用于该池或后端创建的每个卷。

ONTAP 有两种类型的 QoS 策略组:传统和自适应。传统策略组以 IOPS 为单位提供固定的最大(或最小)吞吐量。自适应 QoS 会根据工作负载大小自动扩展吞吐量,并在工作负载大小发生变化时保持 IOPS 与 TBSGB 的比率。如果您要在大型部署中管理数百或数千个工作负载,则这将带来显著优势。

创建 QoS 策略组时,请考虑以下事项:

  • 您应在后端配置的 defaults 块中设置 qosPolicy 密钥。请参见以下后端配置示例:

  {
    "version": 1,
    "storageDriverName": "ontap-nas",
    "managementLIF": "0.0.0.0",
    "dataLIF": "0.0.0.0",
    "svm": "svm0",
    "username": "user",
    "password": "pass",
    "defaults": {
      "qosPolicy": "standard-pg"
    },
    "storage": [
      {
        "labels": {"performance": "extreme"},
        "defaults": {
          "adaptiveQosPolicy": "extremely-adaptive-pg"
        }
      },
      {
        "labels": {"performance": "premium"},
        "defaults": {
          "qosPolicy": "premium-pg"
        }
      }
    ]
  }
  • 您应该对每个卷应用策略组,以便每个卷都获得策略组指定的整个吞吐量。不支持共享策略组。

有关 QoS 策略组的详细信息,请参见 "ONTAP 9.8 QoS 命令"

将存储资源访问限制为 Kubernetes 集群成员

限制对 Trident 创建的 NFS 卷和 iSCSI LUN 的访问是 Kubernetes 部署安全状况的重要组成部分。这样可以防止不属于 Kubernetes 集群的主机访问卷并可能意外修改数据。

请务必了解命名空间是 Kubernetes 中资源的逻辑边界。假设同一命名空间中的资源可以共享,但重要的是,没有跨命名空间功能。这意味着,即使 PV 是全局对象,但在绑定到 PVC 时,它们只能由同一命名空间中的 Pod 访问。* 请务必确保使用命名空间在适当时提供分隔。 *

大多数组织在 Kubernetes 环境中的数据安全方面的主要顾虑是,容器中的进程可以访问挂载到主机但不适用于容器的存储。 "命名空间" 旨在防止这种类型的损害。但是,存在一个例外:特权容器。

有权限的容器是指运行时拥有比正常情况更多主机级别权限的容器。默认情况下,这些选项不会被拒绝,因此请确保使用禁用此功能 "POD 安全策略"

对于需要从 Kubernetes 和外部主机访问的卷,应采用传统方式管理存储,并由管理员引入 PV ,而不是由 Trident 管理。这样可以确保只有在 Kubernetes 和外部主机断开连接且不再使用此卷时,才会销毁此存储卷。此外,还可以应用自定义导出策略,以便从 Kubernetes 集群节点和 Kubernetes 集群以外的目标服务器进行访问。

对于具有专用基础架构节点(例如 OpenShift )或其他不能为用户应用程序计划的节点的部署,应使用单独的导出策略进一步限制对存储资源的访问。其中包括为部署到这些基础架构节点的服务(例如 OpenShift 指标和日志记录服务)以及部署到非基础架构节点的标准应用程序创建导出策略。

使用专用导出策略

您应确保每个后端都有一个导出策略,该策略仅允许访问 Kubernetes 集群中的节点。从 20.04 版开始, Trident 可以自动创建和管理导出策略。通过这种方式, Trident 会限制对其配置给 Kubernetes 集群中节点的卷的访问,并简化节点的添加 / 删除。

或者,您也可以手动创建导出策略,并使用一个或多个导出规则来填充此策略,这些导出规则用于处理每个节点访问请求:

  • 使用 vserver export-policy create ONTAP 命令行界面命令创建导出策略。

  • 使用 vserver export-policy rule create ONTAP 命令行界面命令向导出策略添加规则。

通过运行这些命令,您可以限制哪些 Kubernetes 节点可以访问数据。

为应用程序 SVM 禁用 showmount

通过 showmount 功能, NFS 客户端可以向 SVM 查询可用 NFS 导出列表。部署到 Kubernetes 集群的 Pod 可以对数据 LIF 执行问题描述 showmount -e 命令,并接收可用挂载列表,包括其无权访问的挂载。虽然这本身并不会影响安全,但它确实会提供不必要的信息,可能有助于未经授权的用户连接到 NFS 导出。

您应使用 SVM 级别的 ONTAP 命令行界面命令禁用 showmount

vserver nfs modify -vserver <svm_name> -showmount disabled

SolidFire 最佳实践

了解为 Trident 配置 SolidFire 存储的最佳实践。

创建 SolidFire 帐户

每个 SolidFire 帐户都代表一个唯一的卷所有者,并接收自己的一组质询握手身份验证协议( Challenge-Handshake Authentication Protocol , CHAP )凭据。您可以使用帐户名称和相对 CHAP 凭据或通过卷访问组访问分配给帐户的卷。一个帐户最多可以分配 2 , 000 个卷,但一个卷只能属于一个帐户。

创建 QoS 策略

如果要创建并保存可应用于多个卷的标准化服务质量设置,请使用 SolidFire 服务质量( QoS )策略。

您可以按卷设置 QoS 参数。通过设置三个可配置的参数来定义 QoS ,可以确保每个卷的性能:最小 IOPS ,最大 IOPS 和突发 IOPS 。

以下是 4 KB 块大小的可能最小,最大和突发 IOPS 值。

IOPS 参数 定义 最小value 默认值 最大值( 4 KB )

最小 IOPS

卷的性能保障级别。

50

50

15000

最大 IOPS

性能不会超过此限制。

50

15000

200,000

突发 IOPS

在短时突发情形下允许的最大 IOPS 。

50

15000

200,000

注 虽然最大 IOPS 和突发 IOPS 可设置为高达 200 , 000 ,但卷的实际最大性能受集群使用情况和每节点性能的限制。

块大小和带宽会直接影响 IOPS 数量。随着块大小的增加,系统会将带宽增加到处理较大块大小所需的级别。随着带宽的增加,系统能够达到的 IOPS 数量也会减少。请参见 "SolidFire 服务质量" 有关 QoS 和性能的详细信息。

SolidFire 身份验证

Element 支持两种身份验证方法: CHAP 和卷访问组( VAG )。CHAP 使用 CHAP 协议向后端对主机进行身份验证。卷访问组控制对其配置的卷的访问。NetApp 建议使用 CHAP 进行身份验证,因为它更简单,并且没有扩展限制。

注 具有增强型 CSI 配置程序的 Trident 支持使用 CHAP 身份验证。VAG 只能在传统的非 CSI 操作模式下使用。

只有基于帐户的访问控制才支持 CHAP 身份验证(验证启动程序是否为目标卷用户)。如果使用 CHAP 进行身份验证,则可以使用两个选项:单向 CHAP 和双向 CHAP 。单向 CHAP 使用 SolidFire 帐户名称和启动程序密钥对卷访问进行身份验证。双向 CHAP 选项可提供最安全的卷身份验证方法,因为卷会通过帐户名称和启动程序密钥对主机进行身份验证,然后主机通过帐户名称和目标密钥对卷进行身份验证。

但是,如果无法启用 CHAP 且需要使用 VAG ,请创建访问组并将主机启动程序和卷添加到此访问组。添加到访问组的每个 IQN 都可以使用或不使用 CHAP 身份验证访问组中的每个卷。如果将 iSCSI 启动程序配置为使用 CHAP 身份验证,则会使用基于帐户的访问控制。如果 iSCSI 启动程序未配置为使用 CHAP 身份验证,则会使用卷访问组访问控制。

如何查找更多信息

下面列出了一些最佳实践文档。搜索 "NetApp 库" 对于最新版本。

并非所有应用程序都有特定的准则,与您的 NetApp 团队合作并使用非常重要 "NetApp 库" 以查找最新文档。