控制器可扩展性
Trident 通过提高多个存储驱动程序之间的并发性来提升控制器可扩展性。当您启用控制器可扩展性时,Trident 控制器会并行处理存储操作,而不是对其进行序列化,从而在具有大量并发操作的 Kubernetes 环境中提高吞吐量。
在部署之前,请确定哪些 Trident 驱动程序在正式发布时支持控制器可扩展性,以及哪些驱动程序在 Trident 26.06 中作为技术预览版提供。这有助于您做出明智的部署决策并管理风险。控制器可扩展性默认处于禁用状态。
关键概念和定义
控制器可扩展性
控制器可扩展性是指 Trident 控制器并行处理多个存储操作的能力,而不是在单个锁后对其进行序列化。这些操作包括卷创建、删除和调整大小;快照创建和删除;卷发布和取消发布;以及后端管理。
启用控制器可扩展性时,不同卷和后端上的操作会同时进行。这增加了吞吐量,并减少了具有大量并发 PersistentVolumeClaim 和 VolumeSnapshot 操作的环境中的端到端操作时间。
默认行为(串行模式)
默认情况下,Trident 控制器一次处理一个操作。每个创建、删除、调整大小或快照请求在 Trident 启动下一个之前完成。串行模式是所有安装支持的默认值,无需配置。
串行模式足以满足大多数工作负载的要求。仅当操作量在串行处理下产生积压时,才启用控制器可扩展性。
控制器可扩展性支持
Trident 支持针对不同存储驱动程序的不同成熟度级别的控制器可扩展性。
正式发布
以下驱动程序在 Trident 26.06 正式上市时支持控制器可扩展性:
-
ontap-san -
ontap-NAS -
ontap-nas-economy. -
ontap-san-economy. -
google-cloud-netapp-volumes -
azure-netapp-files -
solidfire-san
|
|
The |
技术预览
以下驱动程序支持将控制器可扩展性作为 Trident 26.06 的技术预览功能:
-
asa-r2(SAN 和 NVMe)
此驱动程序具有以下限制:
-
控制器并发性仅可用于评估和测试。
-
行为可能因版本不同而有所变化。
-
NetApp 不建议在生产环境中使用。
enableConcurrency 的工作原理
当您将 `enableConcurrency`设置为 `true`时,Trident 会对控制器管理的所有后端应用并发处理。该设置同时应用于每个后端。您不能为单个后端或单个驱动程序启用它。
每个配置的后端都必须使用正式发布或技术预览列表中的驱动程序。如果任何后端使用不受支持的驱动程序,则 Trident 不会启动,并且 Trident 不会添加使用不受支持的驱动程序的后端。
要恢复启动,请删除或重新配置使用不受支持的驱动程序的任何后端,或禁用控制器可扩展性。
启用之前
|
|
在启用控制器可扩展性之前,请确认每个已配置的后端均使用正式发布或技术预览列表中的驱动程序。如果任何后端使用不受支持的驱动程序,则在启用该功能后,Trident 将无法启动。 |
使用下表来决定是否启用控制器可扩展性。
| 如果您的环境 | 操作 |
|---|---|
仅使用受支持的驱动程序,并遇到控制器操作积压 |
启用控制器可扩展性。 |
使用任何不受支持的驱动程序 |
保留默认串行模式。不要启用控制器可扩展性。 |
处理低操作量且无积压 |
保留默认串行模式。 |
启用控制器可扩展性
`enableConcurrency` 配置选项控制控制器的可扩展性。在 Trident 安装期间或更新现有部署时,必须显式启用此选项。
Trident 操作员部署
要使用 Trident 运算符启用控制器可扩展性,请在 TridentOrchestrator`自定义资源 (CR) 中将 `enableConcurrency`设置为 `true。
新安装
创建或编辑 TridentOrchestrator CR 并将 enableConcurrency`设置为 `true:
apiVersion: trident.netapp.io/v1
kind: TridentOrchestrator
metadata:
name: trident
spec:
namespace: trident
enableConcurrency: true
应用CR:
kubectl apply -f tridentorchestrator_cr.yaml
现有安装
修补现有 TridentOrchestrator CR 以启用控制器可扩展性:
kubectl patch torc trident --type=merge -p '{"spec":{"enableConcurrency":true}}'
验证 Trident 是否应用了设置:
kubectl get torc trident -o jsonpath='{.status.currentInstallationParams.enableConcurrency}'
Helm 部署
要使用 Helm 启用控制器可扩展性,请将 enableConcurrency`值设置为 `true。
新安装
helm install trident netapp-trident/trident-operator --namespace trident --create-namespace --set enableConcurrency=true
现有安装
helm upgrade trident netapp-trident/trident-operator --namespace trident --set enableConcurrency=true
或者,在自定义 values.yaml 文件中将 enableConcurrency 设置为 true:
# values.yaml
enableConcurrency: true
然后使用 values 文件安装或升级:
helm install trident netapp-trident/trident-operator --namespace trident --create-namespace -f values.yaml
tridentctl 部署
要使用 tridentctl 启用控制器可扩展性,请在安装过程中传递 --enable-concurrency 标志。
新安装
tridentctl install -n trident --enable-concurrency
现有安装
要在现有 `tridentctl`部署上启用控制器可扩展性,请卸载 Trident 并使用以下标志重新安装:
tridentctl uninstall -n trident
tridentctl install -n trident --enable-concurrency
验证是否已启用控制器可扩展性
启用控制器可扩展性后,验证 Trident 控制器是否在启用并发的情况下运行。检查控制器 Pod 日志:
kubectl logs -n trident deploy/trident-controller | grep -i concurrency
输出包含一个确认启用并发的日志条目。
并发行为
启用控制器可扩展性后,Trident 控制器将应用以下行为:
-
Trident 将单个全局锁替换为细粒度的按资源锁定。
-
Trident 对修改同一资源的操作进行序列化,以保持数据一致性。
-
仅从资源读取的操作与该资源上的其他读取操作同时进行。
-
Trident 将并发 ONTAP API 请求限制为每个管理 LIF 20 个,以防止后端存储系统过载。
-
如果多个后端共享相同的管理 LIF,则它们共享此 20 个请求的限制。
注意事项和限制
以下注意事项适用于 Trident 26.06 中的控制器可扩展性:
-
控制器可扩展性仅支持一般可用性和技术预览列表中的驱动程序。有关详细信息,请参见 启用之前。
-
Trident 控制器在内部管理并发。此版本不提供用户可配置的并发限制。
-
整体吞吐量取决于正在使用的存储驱动程序、后端响应能力和 Kubernetes API 服务器性能。
-
高并发可能会增加后端存储系统的负载。
-
控制器的可扩展性行为在所有驱动程序中并不相同。
-
技术预览驱动程序在高负载下可能表现出不一致的性能,并且可能在不同版本之间改变行为。
-
由于并行执行,调试并发操作可能会更加复杂。指标和日志可以显示交错操作输出。
建议
在启用控制器可扩展性之前,请完成以下步骤:
-
确认每个配置的后端都使用一般可用性或技术预览列表中的驱动程序。
-
在将更改应用于生产之前,请先在非生产集群中测试更改。
-
应用更改后,验证是否已启用控制器可扩展性。
使用控制器可扩展性操作时,请应用以下一般建议:
-
对于需要高可扩展性的生产环境,请使用正式发布版驱动程序。
-
仅在非生产环境中评估技术预览驱动程序。
-
大规模运行时监控后端和控制器性能。
-
请勿在自动化脚本中假设操作顺序。