存储配置
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 System Manager 或 CLI 为 SVM 创建专用管理界面。
-
通过 NFS 数据接口共享管理角色。
在每种情况下,接口都应在 DNS 中,并且在配置 Trident 时应使用 DNS 名称。这有助于促进某些灾难恢复场景,例如,不使用网络身份保留的 SVM-DR。
对于 SVM,没有专用或共享管理 LIF 的偏好,但是,您应该确保您的网络安全策略与您选择的方法保持一致。无论如何,管理 LIF 应可通过 DNS 访问,以实现最大的灵活性,如果 "SVM-DR"与 Trident 结合使用。
限制最大卷计数
ONTAP 存储系统具有最大卷计数,该计数因软件版本和硬件平台而异。请参阅 "NetApp Hardware Universe"以确定您的特定平台和 ONTAP 版本的确切限制。当卷计数耗尽时,不仅 Trident 的配置操作会失败,所有存储请求的配置操作都会失败。
Trident 的 `ontap-nas`和 `ontap-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 个 FlexVol 卷。将最大卷计数设置为 1250 似乎非常合理。但是,如果仅 "聚合"从一个节点分配给 SVM,或者无法对从一个节点分配的聚合进行配置(例如,由于容量),则另一个节点将成为所有 Trident 配置卷的目标。这意味着在达到 `max-volumes`值之前,可能会达到该节点的卷限制,从而影响 Trident 和使用该节点的其他卷操作。您可以通过确保将集群中每个节点的聚合以相等数量分配给 Trident 使用的 SVM 来避免这种情况。
克隆卷
NetApp Trident 在使用 ontap-nas、 ontap-san 和 solidfire-san 存储驱动程序时支持克隆卷。使用 ontap-nas-flexgroup 或 ontap-nas-economy 驱动程序时,不支持克隆。从现有卷创建新卷将导致创建新的快照。
|
|
避免克隆与不同 StorageClass 关联的 PVC。在相同的 StorageClass 内执行克隆操作,以确保兼容性并防止意外行为。 |
限制 Trident 创建的卷的最大大小
要配置 Trident 可创建的卷的最大大小,请在您的 `limitVolumeSize`定义中使用 `backend.json`参数。
除了控制存储阵列的卷大小之外,还应利用 Kubernetes 功能。
限制 Trident 创建的 FlexVols 的最大大小
要为 ontap-san-economy 和 ontap-nas-economy 驱动程序用作池的 FlexVols 配置最大大小,请在 limitVolumePoolSize 参数中,在 backend.json 定义中使用。
配置 Trident 使用双向 CHAP
您可以在后端定义中指定 CHAP 启动程序和目标用户名和密码,并让 Trident 在 SVM 上启用 CHAP。使用后端配置中的 `useCHAP`参数,Trident 使用 CHAP 对 ONTAP 后端的 iSCSI 连接进行身份验证。
创建和使用 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 与 TBs|GBs 的比例。当您在大型部署中管理数百或数千个工作负载时,这提供了显著的优势。
创建 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 命令参考"。
限制存储资源访问 Kubernetes 集群成员
限制对 Trident 创建的 NFS 卷、iSCSI LUN 和 FC LUN 的访问是 Kubernetes 部署安全态势的关键组成部分。这样做可以防止不属于 Kubernetes 集群的主机访问卷,并可能意外修改数据。
请务必了解,命名空间是 Kubernetes 中资源的逻辑边界。假设相同命名空间中的资源可以共享,但重要的是,没有跨命名空间功能。这意味着,即使 PV 是全局对象,当绑定到 PVC 时,它们只能由位于同一命名空间中的 pod 访问。确保在适当的时候使用命名空间来提供分隔至关重要。
大多数组织在 Kubernetes 环境中对数据安全性的主要关注点是,容器中的进程可以访问挂载到主机的存储,但这些存储并非为该容器准备的。 "命名空间" 旨在防止这种类型的妥协。但是,有一个例外:特权容器。
特权容器是使用比正常情况下更多的主机级权限运行的容器。默认情况下,这些功能不会被拒绝,因此请确保使用 "pod 安全策略" 禁用此功能。
对于需要从 Kubernetes 和外部主机进行访问的卷,应以传统方式管理存储,PV 由管理员引入,而不是由 Trident 管理。这确保了只有当 Kubernetes 和外部主机都断开连接并且不再使用卷时,存储卷才会被销毁。此外,还可以应用自定义导出策略,允许从 Kubernetes 集群节点和 Kubernetes 集群外部的目标服务器进行访问。
对于具有专用基础架构节点(例如 OpenShift)的部署或其他无法安排用户应用程序的节点,应使用单独的导出策略来进一步限制对存储资源的访问。这包括为部署到这些基础设施节点的服务(例如,OpenShift Metrics 和 Logging 服务)以及部署到非基础设施节点的标准应用程序创建导出策略。
使用专用导出策略
您应该确保每个后端都存在一个导出策略,该策略仅允许访问 Kubernetes 集群中存在的节点。Trident 可以自动创建和管理导出策略。通过这种方式,Trident 将其配置的卷的访问限制为 Kubernetes 集群中的节点,并简化了节点的添加/删除。
或者,您也可以手动创建导出策略,并为其填充一个或多个处理每个节点访问请求的导出规则:
-
使用
vserver export-policy createONTAP CLI 命令创建导出策略。 -
使用
vserver export-policy rule createONTAP CLI 命令将规则添加到导出策略。
运行这些命令可以限制哪些 Kubernetes 节点可以访问这些数据。
为应用程序 SVM 禁用 showmount
该 `showmount`功能使 NFS 客户端能够查询 SVM 以获取可用 NFS 导出的列表。部署到 Kubernetes 集群的 pod 可以对发出 `showmount -e`命令,并接收可用挂载的列表,包括它无权访问的挂载。虽然这本身并不是安全威胁,但它确实提供了不必要的信息,可能会帮助未经授权的用户连接到 NFS 导出。
您应该使用 SVM 级 ONTAP CLI 命令禁用 showmount:
vserver nfs modify -vserver <svm_name> -showmount disabled
SolidFire 最佳实践
了解为 Trident 配置 SolidFire 存储的最佳实践。
创建 SolidFire 账户
每个 SolidFire 帐户代表一个唯一的卷所有者,并接收其自己的一组 Challenge-Handshake Authentication Protocol (CHAP) 凭据。您可以使用帐户名和相关 CHAP 凭据或通过卷访问组访问分配给帐户的卷。一个帐户最多可以分配两千个卷,但一个卷只能属于一个帐户。
创建 QoS 策略
如果要创建和保存可应用于多个卷的标准化服务质量设置,请使用 SolidFire 服务质量 (QoS) 策略。
您可以按卷设置 QoS 参数。可以通过设置定义 QoS 的三个可配置参数来确保每个卷的性能:最小 IOPS、最大 IOPS 和突发 IOPS。
下面是 4Kb 块大小可能的最小、最大和突发 IOPS 值。
| IOPS 参数 | 定义 | 最小值 | 默认值 | 最大值 (4Kb) |
|---|---|---|---|---|
最小 IOPS |
卷的保证性能级别。 |
50 |
50 |
15000 |
最大 IOPS |
性能不会超过此限制。 |
50 |
15000 |
200,000 |
突发 IOPS |
短时间突发场景中允许的最大 IOPS。 |
50 |
15000 |
200,000 |
|
|
虽然最大 IOPS 和突发 IOPS 可以设置为高达 200,000,但卷的实际最大性能受到群集使用率和每个节点性能的限制。 |
块大小和带宽对 IOPS 数量有直接影响。随着块大小的增加,系统将带宽增加到处理较大块大小所需的级别。随着带宽的增加,系统能够实现的 IOPS 数量会减少。有关 QoS 和性能的更多信息,请参阅 "SolidFire 服务质量"。
SolidFire 身份验证
Element 支持两种身份验证方法:CHAP 和卷访问组 (VAG)。CHAP 使用 CHAP 协议向后端验证主机。卷访问组控制对其设置的卷的访问。NetApp 建议使用 CHAP 进行身份验证,因为它更简单且没有扩展限制。
|
|
具有增强 CSI 配置程序的 Trident 支持使用 CHAP 身份验证。VAG 只能在传统的非 CSI 操作模式中使用。 |
只有基于帐户的访问控制才支持 CHAP 身份验证(验证启动器是预期的卷用户)。如果使用 CHAP 进行身份验证,则有两个选项可用:单向 CHAP 和双向 CHAP。单向 CHAP 使用 SolidFire 帐户名和启动器密码对卷访问进行身份验证。双向 CHAP 选项提供了最安全的卷身份验证方式,因为卷通过帐户名和启动器密码对主机进行身份验证,然后主机通过帐户名和目标密码对卷进行身份验证。
但是,如果无法启用 CHAP 并且需要 VAG,请创建访问组并将主机启动程序和卷添加到访问组。添加到访问组中的每个 IQN 都可以使用 CHAP 身份验证或不使用 CHAP 身份验证访问组中的每个卷。如果将 iSCSI 启动程序配置为使用 CHAP 身份验证,则使用基于帐户的访问控制。如果未将 iSCSI 启动程序配置为使用 CHAP 身份验证,则使用卷访问组访问控制。
在哪里可以找到更多信息?
下面列出了一些最佳实践文档。搜索 "NetApp 库"以查找最新版本。
ONTAP
-
"SAN 管理" (用于 iSCSI)
Element 软件
NetApp HCI
应用程序最佳实践信息
并非所有应用程序都有特定的指导方针,与您的 NetApp 团队合作并使用 "NetApp 库"查找最新文档非常重要。