调整节点内核参数(sysctl)
某些内核参数是按节点设置的,而不是按工作负载设置的,例如 ARP/邻居表垃圾回收阈值。这些是节点级(非命名空间)设置,因此无法通过 Pod 的 securityContext.sysctls 或安全上下文约束进行设置;必须在主机上应用。
可以通过使用 MachineConfig 对象写入 sysctl drop-in 文件来设置这些参数。该设置会作为单独的文件写入 /etc/sysctl.d/,因此不会更改节点的其他内核设置。将 MachineConfig 与节点中断策略配合使用,以便在不重启节点的情况下应用该值。
适用场景
一种常见情况是,大型集群中的节点记录了 neighbour table overflow 错误:ARP/邻居表无法容纳如此多的对等节点,需要提高其垃圾回收阈值。以下示例提高了这些阈值;同样的操作步骤也适用于任何节点级 sysctl 键。
设置内核参数
以下示例提高了工作节点上的 ARP/邻居表垃圾回收阈值。
-
创建
sysctldrop-in 文件。每一行都是一个key = value键值对: -
对内容进行 Base64 编码:
-
创建一个
MachineConfig对象,将文件写入/etc/sysctl.d/:role标签用于选择应用该文件的节点。若要仅针对部分节点,请创建自定义MachineConfigPool,并将标签设置为该池的角色。 -
配置节点中断策略,以便在文件更改时重新应用
sysctl设置。由于文件更改的默认操作是None,否则该文件只会写入磁盘,而不会生效。将以下内容添加到集群范围的MachineConfiguration单例cluster中,并在应用MachineConfig之前确认其已反映在status.nodeDisruptionPolicyStatus中:
重启 systemd-sysctl.service 会重新应用 /etc/sysctl.d/ 下的每个文件。新值会生效,且节点不会重启。
先为该文件路径设置节点中断策略,并等待其显示在 status.nodeDisruptionPolicyStatus 中。如果在策略生效前应用 MachineConfig,文件会写入磁盘,但不会应用该值。如需查看完整的中断操作列表,请参阅节点中断策略。
验证更改
在目标节点上读取参数:
输出应显示你设置的值:
还原更改
删除 MachineConfig 对象以移除 drop-in 文件。已应用的值会继续对运行中的内核生效,直到节点下次重启;重启后,节点将应用默认值。