自定义节点池OS参数

当Linux系统的OS参数默认配置无法满足业务需求,您希望对集群节点进行个性化调整时,您可以在节点池维度自定义节点的OS参数配置,以调优系统性能。自定义OS参数后,系统将按批次变更节点配置。节点池中已有节点将即时生效,新增节点也会使用新配置。

使用限制

仅1.28及以上版本的ACK集群支持自定义节点池OS参数。具体操作,请参见创建ACK托管集群创建创建ACK Edge集群。如需升级集群,请参见手动升级集群

注意事项

  • 动态修改OS节点配置有可能会造成节点上已存在的Pod发生配置变更,从而触发Pod重建。请在使用前确保应用的高可用。

  • 不恰当的OS参数调整会改变Linux内核的运作方式,可能导致节点性能恶化或不可用,从而对业务产生影响。请在修改前深入了解待修改参数的作用,并在生产环境操作前进行充分测试。

  • 请勿自行修改控制台不支持自定义的OS参数,避免因配置错误导致的节点不可用或手动修改内容被覆盖。例如,通过黑屏操作手动修改/etc/sysctl.d/99-k8s.conf中的内容,会导致集群执行运维操作(例如集群升级、自定义参数修改等)时覆盖已修改的配置。

支持通过控制台自定义的sysctl参数

字段名称

说明

默认值

推荐取值范围

fs.aio-max-nr

异步I/O操作的最大数量。

65536

[65536, 6553500]

fs.file-max

系统级别能够打开的最大文件句柄数。

2097152

[8192, 12000500]

fs.inotify.max_user_watches

单用户能够创建的inotify监视的最大数量。

524288

[524288, 2097152]

fs.nr_open

每个进程能够打开的文件描述符数的最大数量。

1048576

[1000000, 20000500]

(此值应小于fs.file-max的取值)

kernel.pid_max

系统可分配的最大PID数量。

4194303

大于1048575

kernel.threads-max

系统可创建的最大线程数量。

504581

大于500000

net.core.netdev_max_backlog

接口接收数据包的速度快于内核的处理速度时,可以在INPUT端排队的数据包的最大数量。

16384

[1000, 3240000]

net.core.optmem_max

每个网络套接字允许的最大辅助缓冲区(Ancillary Buffer)大小,以字节为单位。

20480

[20480, 4194304]

net.core.rmem_max

每个网络套接字接收缓冲区的最大大小,以字节为单位。

16777216

[212992, 134217728]

net.core.wmem_max

每个网络套接字发送缓冲区的最大大小,以字节为单位。

16777216

[212992, 134217728]

net.core.wmem_default

每个网络套接字发送缓冲区的默认大小,以字节为单位。

212992

大于等于212992

net.ipv4.tcp_mem

TCP栈可以使用的内存量,以内存页(大小通常为4KB)为单位。该参数由三个整数值组成,分别表示低水位、压力水位和最高水位,必须严格按照顺序设置。

根据系统总内存动态计算

三个参数逐渐增大,且最小值为80000以上

net.ipv4.neigh.default.gc_thresh1

控制ARP缓存的垃圾收集。

128

[128, 80000]

net.ipv4.neigh.default.gc_thresh2

1024

[512, 90000]

net.ipv4.neigh.default.gc_thresh3

8192

[1024, 100000]

支持通过控制台自定义的Transparent Hugepage参数

透明大页THP(Transparent Huge Pages)是Linux内核中的一个通用特性,可以自动将小页面(通常为4 KB)合并成大页面(通常为2 MB或更大),以减少内存访问页表项PTE(Page Table Entries)大小和访问次数,同时减轻了TLB(Translation Lookaside Buffer)缓存的压力,提高内存访问的效率。

说明
  • 目前处于灰度发布中。如需使用,请提交工单申请。

  • 下表中的默认值为在Alibaba Cloud Linux 2的4.19.91-18及之后的内核版本中系统默认值。

字段名称

说明

默认值

可取值

transparent_enabled

是否在系统全局开启 THP功能。

always

  • always:系统全局开启THP功能。

  • never:系统全局关闭THP功能。

  • madvise:仅在通过madvise()进行系统调用,并且设置了MADV_HUGEPAGE标记的内存区域中开启THP功能。

transparent_defrag

是否开启透明大页THP相关的碎片整理配置。启用后,如果内存中的小页能够被合并成一个大页,可以减少页表的大小并提高系统的性能。

madvise

  • always:当系统分配不出透明大页时,暂停内存分配行为,总是等待系统进行内存的直接回收和内存的直接整理。内存回收和整理结束后,如果存在足够的连续空闲内存,则继续分配透明大页。

  • defer:当系统分配不出透明大页时,转为分配普通的4 KB页。同时,系统会唤醒kswapd守护进程进行内存的后台回收,唤醒kcompactd守护进程进行内存的后台整理。一段时间后,如果存在足够的连续空闲内存,khugepaged守护进程可将此前分配的4 KB页合并为2 MB的透明大页。

  • madvise:仅在通过madvise()进行系统调用,并且设置了MADV_HUGEPAGE标记的内存区域中,内存分配行为等同于always。

    其余部分的内存分配行为仍然为:发生缺页异常时,转为分配普通的4 KB页。

  • defer+madvise:仅在通过madvise()进行系统调用,并且设置了MADV_HUGEPAGE标记的内存区域中,内存分配行为等同于always。其余部分的内存分配行为仍然为defer。

  • never:禁止碎片整理。

khugepaged_defrag

khugepaged是一个内核线程,主要负责管理和整理大页,以减少内存碎片化并提高性能。它会监视系统中的大页面,当发现分散的大页时,尝试将它们合并成更大的页,以提高内存利用率和性能。

由于该操作会在内存路径中执行锁定操作,且khugepaged守护进程可能会在错误的时间启动扫描和转换大页的操作,因此存在影响应用性能的可能性。

1

  • 0:关闭khugepaged碎片整理功能。

  • 1:khugepaged守护进程会在系统空闲时周期性唤醒,尝试将连续的4 KB页合并成2 MB的透明大页。

khugepaged_alloc_sleep_millisecs

当透明大页THP分配失败时,khugepaged守护进程进行下一次大页分配前需要等待的时间,以避免短时间内连续发生大页分配失败。单位为毫秒。

60000,即默认等待60秒

khugepaged_scan_sleep_millisecs

khugepaged守护进程每次唤醒的时间间隔。单位为毫秒。

10000,即默认每10秒唤醒一次

khugepaged_pages_to_scan

khugepaged守护进程每次唤醒后扫描的内存页数量。单位为页。

4096

通过控制台自定义节点池OS参数

自定义OS参数后,系统将按批次变更节点配置。节点池中已有节点将即时生效,新增节点也会使用新配置。自定义OS参数生效时会改变已有节点的OS参数配置,可能会对业务产生一定影响。请在业务低峰期操作。

  1. 登录容器服务管理控制台,在左侧导航栏选择集群

  2. 集群列表页面,单击目标集群名称,然后在左侧导航栏,选择节点管理 > 节点池

  3. 在节点池列表的操作列,单击目标节点池对应的更多>OS 配置

  4. 仔细阅读当前页面上的注意事项,单击+ 自定义参数选择需要配置的参数,设置每批次的最大并行数(最大为10),然后单击提交,按照页面指引完成操作。

    配置每批次的最大并行数后,OS配置将按批次对节点生效。执行过程中,您可以在事件列表区域查看进度,并控制执行过程(暂停、继续、取消等)。您可以使用暂停功能对已升级的节点进行验证。暂停时,正在配置的节点会继续完成执行;未执行的节点在任务继续前不会被执行自定义配置。

    重要

    请尽快完成自定义配置任务。处于暂停状态的任务将在7天后自动取消,相关的事件和日志信息也会被清理。