配置节点组 OS 参数
概述
Linux 服务器在高并发、低延迟、连接数突增、内存页表压力较大等场景下,默认的 OS 内核参数可能无法充分利用硬件资源,进而造成应用卡顿、连接失败、性能瓶颈或节点稳定性风险。
CCE 提供节点组维度的 OS 参数配置能力,支持您在控制台批量修改节点组内存量节点的 Sysctl 参数和透明大页(THP)参数,无需逐台登录节点执行 sysctl 命令。配置任务按批次下发、变更后即时生效,并在下发前提供前置检查,降低批量变更内核参数的风险。
提交配置变更任务会同步更新节点组的配置基线,此后通过该节点组新建或弹性扩容的节点将使用修改后的 OS 参数配置。
适用场景
- 高并发网络服务需要放开套接字缓冲区、监听队列、本地端口范围等限制。
- 大量文件句柄或内存映射场景(如 Elasticsearch、大数据组件)需要调整
fs.file-max、vm.max_map_count。 - 内存密集型业务需要按需开启或关闭透明大页,规避 THP 带来的延迟抖动。
- 存量节点因内核参数不当出现性能恶化或稳定性问题,需要统一治理。
使用限制
- 仅支持 Linux 节点,不支持 Windows 节点。不符合条件的节点在前置检查阶段会被拦截并返回具体原因。
- 仅支持节点组维度配置,不支持游离节点(未加入任何节点组的节点)。
- 本功能不涉及 ulimit 类参数。
- 本功能当前仅支持通过控制台操作,暂不支持 OpenAPI 和 SDK。
- 同一节点组同一时刻仅允许运行一个节点变更任务。节点组存在进行中的升级、更换操作系统、Kubelet 配置变更、扩缩容等任务时,无法发起 OS 参数配置任务,反之亦然。
- 节点组实际节点数为 0 时,无法发起 OS 参数配置任务。
- 任务产生的相关事件和日志信息在集群中保留 7 天,超过 7 天后系统将自动关闭该任务并清理相关变更信息。请尽快完成 OS 参数配置任务。
- 不承诺所有 Linux 发行版和内核版本均支持全部参数。节点内核不支持某个参数时,该节点的配置任务会失败并在事件中返回原因。
注意事项
风险提示:调整 OS 参数会改变 Linux 内核的运作方式,可能导致节点上已有的 Pod 发生配置变更从而触发 Pod 重建,也可能造成节点性能恶化甚至不可用而影响业务。请在批量变更前充分测试,并确保应用具备高可用能力。
- 变更即时生效:配置分批次下发到选中的存量节点,下发完成后即时生效,无需重启节点。
- 影响新建节点:提交任务会同步更新节点组配置基线,此后新建节点和弹性扩容节点将使用修改后的 OS 参数。如果您只希望影响存量节点,请评估该行为是否符合预期。
- 批次语义:点击暂停或取消后,已经下发配置变更任务的批次会继续执行直至完成,未下发的批次会停止下发。暂停和取消均不会回滚已完成节点的配置。
- 不提供自动回滚:任务失败或配置效果不符合预期时,需要您重新发起一次配置任务,将参数改回原值。建议在变更前记录当前参数值。
- 建议先小批量验证:建议将「每次批次执行」设为 1,并配合「首批次暂停」策略,在第一批节点上验证业务表现后再继续后续批次。
前提条件
- 已创建 CCE 集群,且集群中存在至少一个包含可用 Linux 节点的节点组。创建节点组请参见创建和管理节点组。
- 当前账号具备节点组配置变更权限。权限配置请参见配置 IAM 自定义权限策略。
- 节点组内目标节点均处于可用状态。
支持的 OS 参数
OS 参数分为 Sysctl 配置 和 透明大页 THP 配置 两类。两类参数均支持从预置列表中选择,也支持添加自定义参数。
Sysctl 参数
控制台预置 20 个 Sysctl 参数。
| 参数 | 说明 | 初始默认值 |
|---|---|---|
| fs.aio-max-nr | 异步 I/O 操作的最大数量 | 65536 |
| fs.file-max | 系统级别能够打开的最大文件句柄数 | 1048576 |
| fs.nr_open | 每个进程能够打开的文件描述符数最大数量,需小于 fs.file-max | 1048576 |
| net.core.netdev_max_backlog | 内核处理速度跟不上收包速度时,INPUT 端可排队的最大包数 | 1000 |
| net.core.rmem_max | 每个网络套接字接收缓冲区的最大值,单位字节 | 212992 |
| net.core.wmem_max | 每个网络套接字发送缓冲区的最大值,单位字节 | 212992 |
| net.core.rmem_default | 每个网络套接字接收缓冲区的默认值,单位字节 | 212992 |
| net.core.wmem_default | 每个网络套接字发送缓冲区的默认值,单位字节 | 212992 |
| net.core.somaxconn | Socket 监听队列的最大连接数 | 4096 |
| net.ipv4.tcp_max_syn_backlog | 处于 SYN_RECV 状态的半连接队列最大长度 | 1024 |
| net.ipv4.tcp_rmem | TCP 接收缓冲区的最小值、默认值、最大值,单位字节 | 4096 131072 6291456 |
| net.ipv4.tcp_wmem | TCP 发送缓冲区的最小值、默认值、最大值,单位字节 | 4096 16384 4194304 |
| net.ipv4.ip_local_port_range | 本地自动分配端口的范围,格式为「低位 高位」 | 32768 60999 |
| vm.max_map_count | 单个进程可拥有的最大内存映射区域数量 | 65530 |
| vm.swappiness | 内核使用 swap 的积极程度,取值 0~100,值越大越倾向于换出匿名页 | 60 |
| net.ipv4.tcp_tw_reuse | 是否允许复用处于 TIME-WAIT 状态的连接端口 | 1 |
| net.ipv4.tcp_window_scaling | 是否开启 TCP 窗口缩放 | 1 |
| net.ipv4.udp_mem | UDP 套接字内存总量的低水位、压力水位、最高水位,单位内存页 | 4096 16384 65536 |
| kernel.msgmnb | System V 消息队列的最大字节数 | 16384 |
| kernel.msgmax | 单条 System V 消息的最大字节数 | 8192 |
参数取值的格式要求:
- 单值整数参数:填写非负整数,且需在该参数对应的内核合法范围内。
vm.swappiness的合法范围为 0~100。 - 开关类参数(
net.ipv4.tcp_tw_reuse、net.ipv4.tcp_window_scaling):填写 0 表示关闭、1 表示开启。net.ipv4.tcp_tw_reuse在较新内核上还支持取值 2(仅对 loopback 生效),低版本内核仅支持 0 和 1。 - 三段值参数(
net.ipv4.tcp_rmem、net.ipv4.tcp_wmem、net.ipv4.udp_mem):填写三个以空格分隔的整数,且需满足第一个值 ≤ 第二个值 ≤ 第三个值。 - 端口范围参数(
net.ipv4.ip_local_port_range):填写两个以空格分隔的整数,且低位小于高位。低位还需不小于net.ipv4.ip_unprivileged_port_start。
各参数的内核语义和取值范围请参见 Linux Kernel sysctl 文档。调优建议请参见Linux 系统配置常用参数说明。
透明大页 THP 参数
透明大页(Transparent Huge Pages,THP)是 Linux 内核的通用特性,可自动将小页面(通常为 4 KB)合并成大页面(通常为 2 MB 或更大),减少页表项数量和 TLB 压力,提高内存访问效率。
控制台预置 8 个 THP 参数。
| 参数 | 说明 | 可取值 | 初始默认值 |
|---|---|---|---|
| enabled | 是否在系统全局开启 THP | always:全局开启madvise:仅对通过 madvise() 并设置 MADV_HUGEPAGE 标记的内存区域开启never:全局关闭 |
madvise |
| defrag | 是否开启 THP 相关的碎片整理 | always:分配不出大页时暂停分配,等待内存直接回收和直接整理defer:转为分配 4 KB 页,同时唤醒 kswapd 后台回收、kcompactd 后台整理,之后由 khugepaged 合并为大页madvise:仅 MADV_HUGEPAGE 区域行为等同 always,其余区域缺页时分配 4 KB 页defer+madvise:MADV_HUGEPAGE 区域等同 always,其余区域等同 defernever:禁止碎片整理 |
madvise |
| shmem_enabled | 共享内存(shmem / tmpfs)的 THP 策略 | always:总是分配大页within_size:仅在不超出文件大小时分配大页advise:仅对设置了 MADV_HUGEPAGE 的区域分配never:关闭deny / force:仅用于测试场景 |
within_size |
| use_zero_page | 是否使用大页零页(huge zero page)响应只读缺页 | 0:关闭1:开启 |
1 |
| khugepaged/defrag | 是否开启 khugepaged 碎片整理 | 0:关闭1:系统空闲时周期性唤醒 khugepaged,将连续的 4 KB 页合并为大页 |
1 |
| khugepaged/alloc_sleep_millisecs | 大页分配失败后,下一次尝试分配前的等待时间,单位毫秒 | 0 及以上整数 | 1 |
| khugepaged/scan_sleep_millisecs | khugepaged 每次唤醒的时间间隔,单位毫秒 | 0 及以上整数 | 10 |
| khugepaged/pages_to_scan | khugepaged 每次唤醒后扫描的内存页数量,单位页 | 大于 0 的整数 | 4096 |
不同操作系统镜像和内核版本下,部分枚举值可能不被支持(例如较低版本内核的
defrag可能不支持defer和defer+madvise,shmem_enabled的枚举在不同版本间差异较大)。节点不支持所选枚举值时,该节点的配置任务会失败并在事件中返回原因。参数语义请参见 Linux Kernel THP 文档。
操作步骤
- 登录百度智能云控制台,在左侧导航栏选择容器引擎 CCE,进入集群列表。
- 单击目标集群名称,在左侧导航栏选择节点管理 > 节点组。
- 在节点组列表的操作列,单击目标节点组的更多,在批量运维分组下选择配置 OS 参数。
- 也可以进入节点组详情页,通过右上角的更多 > 配置 OS 参数进入。
- 以下情况入口不可点击:
| 场景 | 提示 |
|---|---|
| 节点组实际节点数为 0 | 节点组中无可变更节点,暂不支持配置 OS 参数 |
| 节点组存在进行中的升级、更换操作系统、配置变更、扩缩容任务 | 节点组正在执行其他变更任务,暂不支持配置 OS 参数 |
| 节点组正在变更 OS 参数 | 节点组正在变更 OS 参数,不支持重复操作 |
| 当前账号无节点组变更权限 | 当前账号暂无节点组配置变更权限,请联系管理员授权 |
- 在打开的抽屉中按三个步骤完成配置。
步骤一:OS 参数配置
- 阅读抽屉顶部的配置 OS 说明和风险提示。
-
在 Sysctl 配置 区域选择参数并填写参数值。
- 默认预置一条参数,可通过下拉框更换参数名。
- 每个参数仅支持添加一次。已添加的参数在下拉列表中标记为「已选」并置灰。
- 鼠标悬停在参数名上可查看参数说明。
- 参数值被清空时,系统会自动回填该参数的默认值,避免提交空值。
- 参数行数量大于 1 时支持删除单条参数,删除后该参数重新可选。
- 在 透明大页 THP(Transparent Huge Pages)配置 区域按需添加参数,交互方式与 Sysctl 配置一致。枚举类参数通过下拉框选择,不支持手动输入。
- Sysctl 配置和 THP 配置均为非必填。未添加参数的类别不会提交,也不会对节点产生变更。
-
设置变更范围。
- 全部节点(默认):对节点组中全部符合条件的可用 Linux 节点执行变更。
- 指定节点:展开节点选择表格,勾选需要变更的节点。表格支持按节点名称和内网 IP 搜索、按状态筛选。仅状态为可用且操作系统为 Linux 的节点可勾选,不可选节点置灰,悬停可查看具体原因。
- 设置批次策略。批次策略的语义与升级节点组保持一致。
| 配置项 | 说明 | 默认值 |
|---|---|---|
| 每次批次执行 | 每批次最大并行变更的节点数 | 1 |
| 自动暂停策略 | 不暂停:每批次完成后自动执行下一批次首批次暂停:第一批次完成后暂停,便于验证每批次暂停:每批次完成后均暂停 |
与节点组升级页面一致 |
| 每批次间隔时间 | 仅「自动暂停策略」为不暂停时展示。不设置:上一批次完成后直接执行下一批次;设置间隔时间:按设置的分钟数等待后执行下一批次 |
不设置;选择设置时默认 5 分钟 |
- 数值输入超出合法范围时,失去焦点后会自动修正到最近的合法值。
- 单击前置检查。表单校验未通过时,字段下方会展示错误提示,需修正后才能进入下一步。
步骤二:前置检查
进入该步骤后系统自动发起检查,检查项如下:
| 检查项 | 通过条件 | 不通过时的处理 |
|---|---|---|
| 节点状态检查 | 目标节点均为可用状态 | 调整变更范围后重新检查 |
| OS 类型检查 | 目标节点均为 Linux 节点 | 本功能仅支持 Linux 节点,需调整变更范围 |
| 节点组任务互斥检查 | 节点组无进行中的升级、扩缩容、更换操作系统、Kubelet / Containerd 配置变更、OS 参数配置任务 | 等待在执行的任务完成后重试 |
| 参数合法性检查 | 参数名有效,参数值符合对应的格式和范围要求 | 返回上一步调整参数 |
| 节点连通性检查 | 节点可接收配置任务 | 检查节点状态后重新检查 |
| 权限检查 | 当前账号具备节点组变更权限 | 联系管理员授权 |
检查状态与可用操作:
- 检查中:「上一步」和「开始变更」不可点击。
- 检查通过:「开始变更」可点击。
- 检查失败:展示未通过的检查项及原因。可返回上一步调整配置,或直接单击重新检查。
全部检查项通过后单击开始变更,在二次确认弹窗中确认风险后,任务创建并进入步骤三。
步骤三:节点组变更 OS 参数
该步骤展示任务的执行进度和事件信息。
进度信息
- 总节点数、已完成节点数、失败节点数
- 当前批次 / 总批次
- 自动暂停策略、每批次间隔时间(回显步骤一的配置)
事件列表
按时间顺序展示事件概要和事件描述,例如「开始第 1 批 OS 参数配置」「节点 xxx 配置成功」。节点配置失败时,事件描述中会给出失败原因。
事件和日志信息在集群中保留 7 天。
任务操作
| 任务状态 | 可用操作 |
|---|---|
| 变更中 | 暂停、刷新 |
| 暂停中 | 仅可刷新,暂停和取消不可点击 |
| 已暂停 | 继续、取消、刷新 |
| 取消中 | 仅可刷新 |
| 完成 | 刷新、发起新的变更、完成 |
| 失败 | 继续(从失败点继续)、取消(取消未下发批次)、刷新 |
- 单击暂停或取消后,已下发的批次会继续执行至完成,未下发的批次停止下发。
- 任务执行过程中关闭抽屉不会取消任务。可再次进入配置 OS 参数查看任务进度。
- 任务完成后,可单击发起新的变更直接开始下一次配置。
变更期间的操作限制
节点组正在变更 OS 参数时,以下操作不可用,提示「节点组正在变更 OS 参数,不支持操作」:
- 编辑节点组
- 节点组升级
- 更换操作系统
- 更新 Kubelet 配置
- 更新 Containerd 配置
- 扩缩容、调整期望节点数
- 添加已有节点
- 删除节点组
以下操作不受影响:查看节点组列表、查看节点组详情、查看伸缩任务列表、查看节点组任务列表和详情、复制节点组(复制时会继承源节点组当前的 OS 参数配置基线)。
常见问题
Q:弹性扩容或新建的节点会使用我配置的 OS 参数吗?
会。提交配置变更任务时会同步更新节点组的配置基线,此后通过该节点组新建和弹性扩容的节点都会使用修改后的 OS 参数配置。
Q:复制节点组会带上已配置的 OS 参数吗?
会。OS 参数配置已写入节点组的配置基线,复制节点组时会一并继承源节点组当前的 OS 参数配置,复制出的新节点组所创建的节点也会使用这些参数。
Q:配置后发现业务异常,如何恢复?
本功能不提供自动回滚。需要重新发起一次 OS 参数配置任务,将参数改回原值。建议在变更前记录节点上的原始参数值(sysctl -a 或读取对应的 THP sysfs 文件)。
Q:为什么部分节点配置失败?
常见原因包括节点内核未暴露该参数、内核版本不支持所选的枚举值、节点在任务执行期间变为不可用、参数值超出该内核的合法范围。具体原因请查看任务的事件列表。节点组层面允许部分节点成功、部分节点失败,失败节点不影响其他节点。
Q:游离节点可以配置 OS 参数吗?
不可以。本功能仅支持节点组维度。游离节点需要先添加到节点组,或登录节点手动修改。
Q:和登录节点直接执行 sysctl -w 有什么区别?
手动执行 sysctl -w 仅在当前运行期生效,节点重启后丢失,且需要逐台操作。通过本功能配置的参数会持久化到节点,并写入节点组配置基线对后续新建节点生效。
Q:支持配置 ulimit 参数吗?
当前不支持。
相关文档
评价此篇文章
