7.7. 延迟应用程序的调优更改
作为管理员,使用 Node Tuning Operator (NTO)更新正在运行的系统上的自定义资源(CR)并进行更改。例如,他们可以更新 sysctl 参数,或添加调优对象的 [sysctl] 部分。当管理员应用调优更改时,NTO 会提示 TuneD 重新处理所有配置,从而导致 tuned 进程回滚所有调整,然后重新应用它。
对延迟敏感的应用程序可能无法容忍 tuned 配置集的删除和重新应用,因为它可能会降低性能。对于分区 CPU 和管理使用性能配置集的进程或中断关联性的配置,这尤其重要。为了避免这个问题,OpenShift Container Platform 引入了应用调整更改的新方法。在 OpenShift Container Platform 4.17 之前,唯一可用的方法(即时)应用更改,通常会立即触发 tuned 重启。
支持以下附加方法:
-
always: 每个更改都会在下次节点重启时应用。 -
update:当调优更改修改 tuned 配置集时,它会被默认立即应用,并尽快生效。当调优更改不会导致 tuned 配置集更改,并且修改其值时,它将被视为 always。
通过添加 tuned.openshift.io/deferred 注解来启用此功能。下表总结了注解的可能值:
| 注解值 | 描述 |
|---|---|
| missing | 更改会立即应用。 |
| always | 更改在下次节点重启时应用。 |
| update | 如果造成配置集更改,则立即应用更改,否则在下次节点重启时。 |
以下示例演示了如何使用 always 方法将更改应用到 kernel.shmmni sysctl 参数:
Example
apiVersion: tuned.openshift.io/v1
kind: Tuned
metadata:
name: performance-patch
namespace: openshift-cluster-node-tuning-operator
annotations:
tuned.openshift.io/deferred: "always"
spec:
profile:
- name: performance-patch
data: |
[main]
summary=Configuration changes profile inherited from performance created tuned
include=openshift-node-performance-performance
[sysctl]
kernel.shmmni=8192
recommend:
- machineConfigLabels:
machineconfiguration.openshift.io/role: worker-cnf
priority: 19
profile: performance-patch
7.7.1. 延迟调优更改的应用程序:一个示例 复制链接链接已复制到粘贴板!
以下工作示例描述了如何使用 Node Tuning Operator 延迟调整应用程序的调整更改。
先决条件
-
有
cluster-admin角色访问权限。 - 您已将性能配置集应用到集群。
-
一个
MachineConfigPool资源,如worker-cnf,以确保配置集只应用到指定的节点。
流程
运行以下命令,检查当前应用到集群的配置集:
$ oc -n openshift-cluster-node-tuning-operator get tuned输出示例
NAME AGE default 63m openshift-node-performance-performance 21m运行以下命令,检查集群中的机器配置池:
$ oc get mcp输出示例
NAME CONFIG UPDATED UPDATING DEGRADED MACHINECOUNT READYMACHINECOUNT UPDATEDMACHINECOUNT DEGRADEDMACHINECOUNT AGE master rendered-master-79a26af9f78ced61fa8ccd309d3c859c True False False 3 3 3 0 157m worker rendered-worker-d9352e91a1b14de7ef453fa54480ce0e True False False 2 2 2 0 157m worker-cnf rendered-worker-cnf-f398fc4fcb2b20104a51e744b8247272 True False False 1 1 1 0 92m运行以下命令来描述当前应用的性能配置集:
$ oc describe performanceprofile performance | grep Tuned输出示例
Tuned: openshift-cluster-node-tuning-operator/openshift-node-performance-performance验证
kernel.shmmnisysctl 参数的现有值:运行以下命令以显示节点名称:
$ oc get nodes输出示例
NAME STATUS ROLES AGE VERSION ip-10-0-26-151.ec2.internal Ready worker,worker-cnf 116m v1.30.6 ip-10-0-46-60.ec2.internal Ready worker 115m v1.30.6 ip-10-0-52-141.ec2.internal Ready control-plane,master 123m v1.30.6 ip-10-0-6-97.ec2.internal Ready control-plane,master 121m v1.30.6 ip-10-0-86-145.ec2.internal Ready worker 117m v1.30.6 ip-10-0-92-228.ec2.internal Ready control-plane,master 123m v1.30.6运行以下命令,在节点
ip-10-0-32-74.ec2.internal中显示kernel.shmmnisysctl 参数的当前值:$ oc debug node/ip-10-0-26-151.ec2.internal -q -- chroot host sysctl kernel.shmmni输出示例
kernel.shmmni = 4096
创建一个配置集补丁,如
perf-patch.yaml,它将kernel.shmmnisysctl 参数改为8192。通过应用以下配置,使用always方法将更改延迟到新的手动重启:apiVersion: tuned.openshift.io/v1 kind: Tuned metadata: name: performance-patch namespace: openshift-cluster-node-tuning-operator annotations: tuned.openshift.io/deferred: "always" spec: profile: - name: performance-patch data: | [main] summary=Configuration changes profile inherited from performance created tuned include=openshift-node-performance-performance1 [sysctl] kernel.shmmni=81922 recommend: - machineConfigLabels: machineconfiguration.openshift.io/role: worker-cnf3 priority: 19 profile: performance-patch运行以下命令来应用配置集补丁:
$ oc apply -f perf-patch.yaml运行以下命令,以验证配置集补丁正在等待下一个节点重启:
$ oc -n openshift-cluster-node-tuning-operator get profile输出示例
NAME TUNED APPLIED DEGRADED MESSAGE AGE ip-10-0-26-151.ec2.internal performance-patch False True The TuneD daemon profile is waiting for the next node restart: performance-patch 126m ip-10-0-46-60.ec2.internal openshift-node True False TuneD profile applied. 125m ip-10-0-52-141.ec2.internal openshift-control-plane True False TuneD profile applied. 130m ip-10-0-6-97.ec2.internal openshift-control-plane True False TuneD profile applied. 130m ip-10-0-86-145.ec2.internal openshift-node True False TuneD profile applied. 126m ip-10-0-92-228.ec2.internal openshift-control-plane True False TuneD profile applied. 130m在重启前确认
kernel.shmmnisysctl 参数的值保持不变:运行以下命令以确认,不会应用对节点
ip-10-0-26-151.ec2.internal上的kernel.shmmnisysctl 参数的应用程序更改:$ oc debug node/ip-10-0-26-151.ec2.internal -q -- chroot host sysctl kernel.shmmni输出示例
kernel.shmmni = 4096
运行以下命令重启节点
ip-10-0-26-151.ec2.internal以应用所需的更改:$ oc debug node/ip-10-0-26-151.ec2.internal -q -- chroot host reboot&在另一个终端窗口中,运行以下命令验证节点是否已重启:
$ watch oc get nodes等待节点
ip-10-0-26-151.ec2.internal过渡到Ready状态。运行以下命令,以验证配置集补丁正在等待下一个节点重启:
$ oc -n openshift-cluster-node-tuning-operator get profile输出示例
NAME TUNED APPLIED DEGRADED MESSAGE AGE ip-10-0-20-251.ec2.internal performance-patch True False TuneD profile applied. 3h3m ip-10-0-30-148.ec2.internal openshift-control-plane True False TuneD profile applied. 3h8m ip-10-0-32-74.ec2.internal openshift-node True True TuneD profile applied. 179m ip-10-0-33-49.ec2.internal openshift-control-plane True False TuneD profile applied. 3h8m ip-10-0-84-72.ec2.internal openshift-control-plane True False TuneD profile applied. 3h8m ip-10-0-93-89.ec2.internal openshift-node True False TuneD profile applied. 179m重启后,检查
kernel.shmmnisysctl 参数的值是否已改变:运行以下命令,以验证
kernel.shmmnisysctl 参数更改已在节点ip-10-0-32-74.ec2.internal上应用:$ oc debug node/ip-10-0-32-74.ec2.internal -q -- chroot host sysctl kernel.shmmni输出示例
kernel.shmmni = 8192
额外的重启会导致恢复 kernel.shmmni sysctl 参数的原始值。