6.3. 使用 Node Tuning Operator
Red Hat OpenShift Service on AWS 支持 Node Tuning Operator 来提高集群中的节点的性能。在创建节点调优配置前,您必须创建一个自定义调优规格。
Node Tuning Operator 可以帮助您通过编排 TuneD 守护进程来管理节点级别的性能优化,并使用 Performance Profile 控制器获得低延迟性能。大多数高性能应用程序都需要一定程度的内核级性能优化。Node Tuning Operator 为用户提供了一个统一的、节点一级的 sysctl 管理接口,并可以根据具体用户的需要灵活地添加自定义性能优化设置。
Operator 将为 Red Hat OpenShift Service on AWS 容器化的 TuneD 守护进程作为一个 Kubernetes 守护进程集进行管理。它保证了自定义性能优化设置以可被守护进程支持的格式传递到在集群中运行的所有容器化的 TuneD 守护进程中。相应的守护进程会在集群的所有节点上运行,每个节点上运行一个。
在发生触发配置集更改的事件时,或通过接收和处理终止信号安全终止容器化 TuneD 守护进程时,容器化 TuneD 守护进程所应用的节点级设置将被回滚。
Node Tuning Operator 使用 Performance Profile 控制器来实现自动性能优化,以实现 Red Hat OpenShift Service on AWS 应用程序的低延迟性能。
集群管理员配置了性能配置集以定义节点级别的设置,例如:
- 将内核更新至 kernel-rt。
- 为内务选择 CPU。
- 为运行工作负载选择 CPU。
Node Tuning Operator 是版本 4.1 及更高版本中的标准 Red Hat OpenShift Service on AWS 安装的一部分。
在以前的 Red Hat OpenShift Service on AWS 版本中,Performance Addon Operator 用来实现自动性能优化,以便为 OpenShift 应用程序实现低延迟性能。在 Red Hat OpenShift Service on AWS 4.11 及更高版本中,此功能是 Node Tuning Operator 的一部分。
6.3.1. 自定义调整规格 复制链接链接已复制到粘贴板!
Operator 的自定义资源 (CR) 包含两个主要部分。第一部分是 profile:
,这是 TuneD 配置集及其名称的列表。第二部分是 recommend:
,用来定义配置集选择逻辑。
多个自定义调优规格可以共存,作为 Operator 命名空间中的多个 CR。Operator 会检测到是否存在新 CR 或删除了旧 CR。所有现有的自定义性能优化设置都会合并,同时更新容器化 TuneD 守护进程的适当对象。
管理状态
通过调整默认的 Tuned CR 来设置 Operator Management 状态。默认情况下,Operator 处于 Managed 状态,默认的 Tuned CR 中没有 spec.managementState
字段。Operator Management 状态的有效值如下:
- Managed: Operator 会在配置资源更新时更新其操作对象
- Unmanaged: Operator 将忽略配置资源的更改
- Removed: Operator 将移除 Operator 置备的操作对象和资源
配置集数据
profile:
部分列出了 TuneD 配置集及其名称。
建议的配置集
profile:
选择逻辑通过 CR 的 recommend:
部分来定义。recommend:
部分是根据选择标准推荐配置集的项目列表。
recommend: <recommend-item-1> # ... <recommend-item-n>
recommend:
<recommend-item-1>
# ...
<recommend-item-n>
列表中的独立项:
- 1
- 可选。
- 2
MachineConfig
标签的键/值字典。键必须是唯一的。- 3
- 如果省略,则会假设配置集匹配,除非设置了优先级更高的配置集,或设置了
machineConfigLabels
。 - 4
- 可选列表。
- 5
- 配置集排序优先级。较低数字表示优先级更高(
0
是最高优先级)。 - 6
- 在匹配项中应用的 TuneD 配置集。例如
tuned_profile_1
。 - 7
- 可选操作对象配置。
- 8
- 为 TuneD 守护进程打开或关闭调试。
true
为打开,false
为关闭。默认值为false
。 - 9
- 为 TuneD 守护进程打开或关闭
reapply_sysctl
功能。选择true
代表开启,false
代表关闭。
<match>
是一个递归定义的可选数组,如下所示:
- label: <label_name> value: <label_value> type: <label_type> <match>
- label: <label_name>
value: <label_value>
type: <label_type>
<match>
如果不省略 <match>
,则所有嵌套的 <match>
部分也必须评估为 true
。否则会假定 false
,并且不会应用或建议具有对应 <match>
部分的配置集。因此,嵌套(子级 <match>
部分)会以逻辑 AND 运算来运作。反之,如果匹配 <match>
列表中任何一项,整个 <match>
列表评估为 true
。因此,该列表以逻辑 OR 运算来运作。
如果定义 了 machineConfigLabels
,基于机器配置池的匹配会对给定的 recommend:
列表项打开。<mcLabels>
指定机器配置标签。机器配置会自动创建,以在配置集 <tuned_profile_name>
中应用主机设置,如内核引导参数。这包括使用与 <mcLabels>
匹配的机器配置选择器查找所有机器配置池,并在分配了找到的机器配置池的所有节点上设置配置集 <tuned_profile_name>
。要针对同时具有 master 和 worker 角色的节点,您必须使用 master 角色。
列表项 match
和 machineConfigLabels
由逻辑 OR 操作符连接。match
项首先以短电路方式评估。因此,如果它被评估为 true
,则不考虑 MachineConfigLabels
项。
当使用基于机器配置池的匹配时,建议将具有相同硬件配置的节点分组到同一机器配置池中。不遵循这个原则可能会导致在共享同一机器配置池的两个或者多个节点中 TuneD 操作对象导致内核参数冲突。
示例:基于节点或 pod 标签的匹配
根据配置集优先级,以上 CR 针对容器化 TuneD 守护进程转换为 recommend.conf
文件。优先级最高 (10
) 的配置集是 openshift-control-plane-es
,因此会首先考虑它。在给定节点上运行的容器化 TuneD 守护进程会查看同一节点上是否在运行设有 tuned.openshift.io/elasticsearch
标签的 pod。如果没有,则整个 <match>
部分评估为 false
。如果存在具有该标签的 pod,为了让 <match>
部分评估为 true
,节点标签也需要是 node-role.kubernetes.io/master
或 node-role.kubernetes.io/infra
。
如果这些标签对优先级为 10
的配置集而言匹配,则应用 openshift-control-plane-es
配置集,并且不考虑其他配置集。如果节点/pod 标签组合不匹配,则考虑优先级第二高的配置集 (openshift-control-plane
)。如果容器化 TuneD Pod 在具有标签 node-role.kubernetes.io/master
或 node-role.kubernetes.io/infra
的节点上运行,则应用此配置集。
最后,配置集 openshift-node
的优先级最低 (30
)。它没有 <match>
部分,因此始终匹配。如果给定节点上不匹配任何优先级更高的配置集,它会作为一个适用于所有节点的配置集来设置 openshift-node
配置集。
示例:基于机器配置池的匹配
为尽量减少节点的重新引导情况,为目标节点添加机器配置池将匹配的节点选择器标签,然后创建上述 Tuned CR,最后创建自定义机器配置池。
特定于云供应商的 TuneD 配置集
通过此功能,所有特定于云供应商的节点都可以方便地分配一个 TuneD 配置集,专门用于为 Red Hat OpenShift Service on AWS 集群上的给定云供应商量身定制。这可实现,而无需添加额外的节点标签或将节点分组到机器配置池中。
这个功能会利用 spec.providerID
节点对象值(格式为 <cloud-provider>://<cloud-provider-specific-id>
),并在 NTO operand 容器中写带有 <cloud-provider>
值的文件 /var/lib/ocp-tuned/provider
。然后,TuneD 会使用这个文件的内容来加载 provider-<cloud-provider>
配置集(如果这个配置集存在)。
openshift
配置集(openshift-control-plane
和 openshift-node
配置集都从其中继承设置)现在被更新来使用这个功能(通过使用条件配置集加载)。NTO 或 TuneD 目前不包含任何特定于云供应商的配置集。但是,您可以创建一个自定义配置集 provider-<cloud-provider>
,它将适用于所有针对于所有云供应商的集群节点。
GCE 云供应商配置集示例
由于配置集的继承,provider-<cloud-provider>
配置集中指定的任何设置都会被 openshift
配置集及其子配置集覆盖。
6.3.2. 创建节点调优配置 复制链接链接已复制到粘贴板!
您可以使用 Red Hat OpenShift Service on AWS (ROSA) CLI 创建调优配置。
先决条件
- 您已下载了 ROSA CLI 的最新版本。
- 您在最新版本中有一个集群。
- 您已为节点调整配置了规格文件。
流程
运行以下命令来创建调优配置:
rosa create tuning-config -c <cluster_id> --name <name_of_tuning> --spec-path <path_to_spec_file>
$ rosa create tuning-config -c <cluster_id> --name <name_of_tuning> --spec-path <path_to_spec_file>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 您必须提供
spec.json
文件的路径,或者命令返回错误。输出示例
I: Tuning config 'sample-tuning' has been created on cluster 'cluster-example'. I: To view all tuning configs, run 'rosa list tuning-configs -c cluster-example'
$ I: Tuning config 'sample-tuning' has been created on cluster 'cluster-example'. $ I: To view all tuning configs, run 'rosa list tuning-configs -c cluster-example'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
您可以使用以下命令验证帐户应用的现有调优配置:
rosa list tuning-configs -c <cluster_name> [-o json]
$ rosa list tuning-configs -c <cluster_name> [-o json]
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 您可以为配置列表指定输出类型。
如果没有指定输出类型,您会看到调优配置的 ID 和名称:
没有指定输出类型的输出示例
ID NAME 20468b8e-edc7-11ed-b0e4-0a580a800298 sample-tuning
ID NAME 20468b8e-edc7-11ed-b0e4-0a580a800298 sample-tuning
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果您指定了输出类型,如
json
,您可以以 JSON 文本的形式接收调优配置:注意以下 JSON 输出具有读取清晰性的硬 line-returns。此 JSON 输出无效,除非您删除 JSON 字符串中的换行符。
指定 JSON 输出的输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
6.3.3. 修改节点调优配置 复制链接链接已复制到粘贴板!
您可以使用 Red Hat OpenShift Service on AWS (ROSA) CLI 来查看和更新节点调优配置。
先决条件
- 您已下载了 ROSA CLI 的最新版本。
- 在最新版本中有一个集群
- 您的集群已将节点调优配置添加到其中
流程
您可以使用
rosa describe
命令查看调优配置:rosa describe tuning-config -c <cluster_id>
$ rosa describe tuning-config -c <cluster_id>
1 --name <name_of_tuning>
2 [-o json]
3 Copy to Clipboard Copied! Toggle word wrap Toggle overflow 此 spec 文件中的以下项是:
没有指定输出类型的输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 指定 JSON 输出的输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 验证调优配置后,您可以使用
rosa edit
命令编辑现有配置:rosa edit tuning-config -c <cluster_id> --name <name_of_tuning> --spec-path <path_to_spec_file>
$ rosa edit tuning-config -c <cluster_id> --name <name_of_tuning> --spec-path <path_to_spec_file>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在这个命令中,您可以使用
spec.json
文件编辑您的配置。
验证
再次运行
rosa describe
命令,以查看您在调优配置中更新您对spec.json
文件所做的更改:rosa describe tuning-config -c <cluster_id> --name <name_of_tuning>
$ rosa describe tuning-config -c <cluster_id> --name <name_of_tuning>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
6.3.4. 删除节点调优配置 复制链接链接已复制到粘贴板!
您可以使用 Red Hat OpenShift Service on AWS (ROSA) CLI 删除调优配置。
您无法删除机器池中引用的调优配置。您必须先从所有机器池中删除调优配置,然后才能将它删除。
先决条件
- 您已下载了 ROSA CLI 的最新版本。
- 在最新版本中有一个集群。
- 您的集群有一个要删除的节点调优配置。
流程
要删除调优配置,请运行以下命令:
rosa delete tuning-config -c <cluster_id> <name_of_tuning>
$ rosa delete tuning-config -c <cluster_id> <name_of_tuning>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 集群上的调优配置已被删除
输出示例
? Are you sure you want to delete tuning config sample-tuning on cluster sample-cluster? Yes I: Successfully deleted tuning config 'sample-tuning' from cluster 'sample-cluster'
? Are you sure you want to delete tuning config sample-tuning on cluster sample-cluster? Yes I: Successfully deleted tuning config 'sample-tuning' from cluster 'sample-cluster'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow