Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
本文列出了Azure Kubernetes 服务 (AKS)节点池支持的自定义节点配置参数。 若要了解如何创建和应用配置文件,请参阅 自定义 AKS 节点池的节点配置。
Kubelet 自定义配置参数
Important
启用不安全的 sysctls 时,你负责节点稳定性和工作负荷行为。 如果配置不当,不安全的 sysctls 可能会导致节点不稳定或安全漏洞。 确保了解启用特定不安全的 sysctls 的影响,并在进行更改后密切监视群集的运行状况。
Linux kubelet 自定义配置
| 参数 | 允许的值/间隔 | 违约 | 说明 |
|---|---|---|---|
cpuManagerPolicy |
无值、静态 | none | 静态策略允许具有整数 CPU 请求的 有保证 Pod 中的容器访问节点上的独占 CPU。 |
cpuCfsQuota |
真、假 | true | 为指定 CPU 限制的容器启用/禁用 CPU CFS 配额强制实施。 |
cpuCfsQuotaPeriod |
以毫秒为单位的间隔(毫秒) | 100ms |
设置 CPU CFS 配额周期值。 |
imageGcHighThreshold |
0-100 | 85 | 自此起始终运行映像垃圾回收的磁盘使用量百分比。 触发垃圾回收的最小磁盘使用阈值。 如果要禁用映像垃圾回收,则设置为 100。 |
imageGcLowThreshold |
0-100,不大于 imageGcHighThreshold |
80 | 在此之前从不运行映像垃圾回收的磁盘使用量百分比。 可触发垃圾回收的最低磁盘使用率。 |
topologyManagerPolicy |
无、最大努力、受限、单 NUMA 节点 | none | 优化 NUMA 节点对齐方式。 有关详细信息,请参阅 节点上的控制拓扑管理策略。 |
allowedUnsafeSysctls |
kernel.shm*、kernel.msg*、kernel.sem、fs.mqueue.*、net.* |
没有 | 允许的不安全 sysctl 或不安全 sysctl 模式的列表。 |
containerLogMaxSizeMB |
以兆字节 (MB) 为单位的大小 | 50 | 在轮换容器日志文件之前,容器日志文件的最大大小(例如 10 MB)。 |
containerLogMaxFiles |
2 或更大 | 5 | 要为容器保留的最大容器日志文件数。 |
podMaxPids |
-1至内核PID限制 | -1 (无限) | 可在 Pod 中运行的最大进程 ID 数。 |
seccompDefault |
Unconfined、RuntimeDefault |
Unconfined |
为所有工作负载设置默认的 seccomp 配置文件。
RuntimeDefault 使用 containerd 的默认 seccomp 配置文件,限制某些系统调用以提高安全性。 受限制的 syscalls 失败。
Unconfined 对 syscalls 没有限制,允许所有系统调用并减少安全性。 有关详细信息,请参阅 容器化的默认 seccomp 配置文件。 此参数为预览版。 使用az feature register命令注册“KubeletDefaultSeccompProfilePreview”功能标志。 |
kubeReserved.cpuMillicores |
1 到节点池 CPU 容量(以毫核为单位) | 没有 | 为 Linux 节点池上的 Kubernetes 系统守护进程预留 CPU。 此参数处于预览状态,需要 CustomNodeConfigPreview 功能标志。 |
kubeReserved.memoryMB |
1 到以 MiB 为单位的节点池内存容量 | 没有 | 为 Linux 节点池上的 Kubernetes 系统守护程序保留内存。 此参数处于预览状态,需要 CustomNodeConfigPreview 功能标志。 |
hardEvictionThreshold.memoryAvailable |
<number>Ki、<number>Mi、<number>Gi 或 <number>%,其中百分比不超过 100 |
没有 | 为 Linux 节点池上的可用内存设置 kubelet 硬逐出阈值。 此参数处于预览状态,需要 CustomNodeConfigPreview 功能标志。 |
hardEvictionThreshold.nodeFsAvailable |
<number>Ki、<number>Mi、<number>Gi 或 <number>%,其中百分比不超过 100 |
没有 | 为 Linux 节点池上的可用节点文件系统空间设置 kubelet 硬逐出阈值。 此参数处于预览状态,需要 CustomNodeConfigPreview 功能标志。 |
hardEvictionThreshold.nodeFsInodesFree |
百分比不超过 100 时,选择 <number> 或 <number>% |
没有 | 为 Linux 节点池上的免费节点文件系统 inode 设置 kubelet 硬逐出阈值。 此参数处于预览状态,需要 CustomNodeConfigPreview 功能标志。 |
Windows kubelet 自定义配置
| 参数 | 允许的值/间隔 | 违约 | 说明 |
|---|---|---|---|
imageGcHighThreshold |
0-100 | 85 | 自此起始终运行映像垃圾回收的磁盘使用量百分比。 触发垃圾回收的最小磁盘使用阈值。 如果要禁用映像垃圾回收,则设置为 100。 |
imageGcLowThreshold |
0-100,不大于 imageGcHighThreshold |
80 | 在此之前从不运行映像垃圾回收的磁盘使用量百分比。 可触发垃圾回收的最低磁盘使用率。 |
containerLogMaxSizeMB |
以兆字节 (MB) 为单位的大小 | 10 | 在轮换容器日志文件之前,容器日志文件的最大大小(例如 10 MB)。 |
containerLogMaxFiles |
2 或更大 | 5 | 要为容器保留的最大容器日志文件数。 |
Linux 自定义 OS 配置参数
Important
为了简化搜索和可读性,OS 设置按其名称显示在本文中,但应使用 camelCase 大写约定将其添加到配置 JSON 文件或 AKS API。
例如,如果修改设置 vm.max_map_count ,则应将其重新格式化为 vmMaxMapCount 配置文件 JSON 文件中。
Linux 文件句柄限制
当提供大量流量时,该流量通常来自大量本地文件。 可以调整以下内核设置和内置限制,以便以某些系统内存为代价处理更多内容。
下表列出了每个节点池可以自定义的文件句柄限制:
| 设置 | 允许的值/间隔 | Ubuntu 22.04 默认值 | Ubuntu 24.04 默认值 | Azure Linux 3.0 默认值 | 说明 |
|---|---|---|---|---|---|
fs.file-max |
8192 - 9223372036854775807 | 9223372036854775807 | 9223372036854775807 | 9223372036854775807 | Linux 内核分配的最大文件句柄数。 此值设置为最大可能值(2^63-1),以防止文件描述符耗尽,并确保系统范围内的文件句柄在容器化工作负载上的无限制使用。 |
fs.inotify.max_user_watches |
781250 - 2097152 | 1048576 | 1048576 | 1048576 | 系统允许的最大文件监视数。 每个监视器在 32 位内核上约为 90 字节,在 64 位内核上约为 160 字节。 |
fs.aio-max-nr |
65536 - 6553500 | 65536 | 65536 | 65536 | aio-nr 显示当前系统范围的异步 I/O 请求数。 使用 aio-max-nr,你可以更改 aio-nr 可以增加到的最大值。 |
fs.nr_open |
8192 - 20000500 | 1048576 | 1048576 | 1073741816 | 进程可分配的最大文件句柄数。 |
注释
参数 fs.file-max 在 Ubuntu 和 Azure Linux 上根据上游默认值设置为 9223372036854775807(带符号 64 位整数的最大值)。 此配置:
- 防止拒绝服务攻击,以防止系统范围的文件描述符耗尽。
- 确保容器工作负荷 永远不会因为系统范围的文件句柄限制而形成瓶颈。
-
维护安全性,通过每个进程限制(
fs.nr_open和ulimit),这些限制仍适用于各个进程。 - 针对可能同时运行多个容器的容器平台进行优化,每个平台可能会打开多个文件和网络连接。
Linux 套接字和网络优化
对于应处理大量并发会话的代理节点,可以使用以下 TCP 和网络选项,并按节点池调整它们:
| 设置 | 允许的值/间隔 | Ubuntu 22.04 默认值 | Ubuntu 24.04 默认值 | Azure Linux 3.0 默认值 | 说明 |
|---|---|---|---|---|---|
net.core.somaxconn |
4096 - 3240000 | 16384 | 16384 | 16384 | 可为任何给定监听套接字排队的最大连接请求数。 传递给 listen(2) 函数的积压参数的上限。 如果 backlog 参数大于 somaxconn,则会被静默截断至这个限制。 |
net.core.netdev_max_backlog |
1000 - 3240000 | 1000 | 1000 | 1000 | 当接口接收数据包的速度快于内核处理速度时,在 INPUT 侧排队的数据包的最大数量。 |
net.core.rmem_max |
212992 - 134217728 | 1048576 | 1048576 | 212992 | 接收套接字缓冲区最大大小(以字节为单位)。 |
net.core.wmem_max |
212992 - 134217728 | 212992 | 212992 | 212992 | 发送套接字缓冲区最大大小(以字节为单位)。 |
net.core.optmem_max |
20480 - 4194304 | 20480 | 131072 | 20480 | 每个套接字允许的辅助缓冲区(选项内存缓冲区)最大大小。 在少数情况下,套接字选项内存用于存储与套接字使用相关的附加结构。 |
net.ipv4.tcp_max_syn_backlog |
128 - 3240000 | 16384 | 16384 | 16384 | 未从连接客户端收到确认的最大排队连接请求数。 如果超出此数目,内核将开始删除请求。 |
net.ipv4.tcp_max_tw_buckets |
8000 - 1440000 | 262144 | 262144 | 131072 | 系统同时持有的最大套接字数 TIME-WAIT 。 如果超过此数量,则会立即销毁 time-wait 套接字并打印警告。 |
net.ipv4.tcp_fin_timeout |
5 - 120 | 60 | 60 | 60 | 孤立(不再被任何应用程序引用)连接的持续时间保持在FIN_WAIT_2状态,一直到它在本地端被中止。 |
net.ipv4.tcp_keepalive_time |
30 - 432000 | 7200 | 7200 | 7200 | 启用 keepalive 时,TCP 发出 keepalive 消息的频率。 |
net.ipv4.tcp_keepalive_probes |
1 - 15 | 9 | 9 | 9 | TCP 发送 keepalive 探测的次数,直到确定连接已中断。 |
net.ipv4.tcp_keepalive_intvl |
10 - 90 | 75 | 75 | 75 | 探测发出的频率。乘以 tcp_keepalive_probes,等于在启动探测后终止未响应连接所需的时间。 |
net.ipv4.tcp_tw_reuse |
2 | 2 | 2 | 允许在从协议角度安全的情况下为新连接重复使用 TIME-WAIT 套接字。 |
|
net.ipv4.ip_local_port_range |
第一个:1024 - 60999,最后一个:32768 - 65535] | 第一个:32768,最后一个:60999 | 第一个:32768,最后一个:60999 | 第一个:32768,最后一个:60999 | TCP 和 UDP 流量选择本地端口所用的本地端口范围。 范围由两个数字组成:代理节点上允许 TCP 和 UDP 流量的第一个本地端口,以及最后一个本地端口号。 |
net.ipv4.neigh.default.gc_thresh1 |
128 - 80000 | 4096 | 4096 | 4096 | ARP 缓存中可配置的最小条目数。 如果条目数低于此设置,则不会触发垃圾回收。 |
net.ipv4.neigh.default.gc_thresh2 |
512 - 90000 | 8192 | 8192 | 8192 | 可在 ARP 缓存中设置的软上限条目数。 此设置可以说是最重要的,因为在达到此软性最大值后大约 5 秒,ARP 垃圾回收会触发。 |
net.ipv4.neigh.default.gc_thresh3 |
1024 - 100000 | 16384 | 16384 | 16384 | ARP 缓存中项数的硬性最大值。 |
net.netfilter.nf_conntrack_max |
131072 - 2097152 | 动态计算 | 动态计算 | 动态计算 |
nf_conntrack 是在 Linux 中跟踪 NAT 连接项的模块。
nf_conntrack 模块使用哈希表来记录 TCP 协议的已建立连接记录。
nf_conntrack_max 是哈希表中的最大节点数,即 nf_conntrack 模块支持的最大连接数或连接跟踪表大小。
默认值 是根据系统内存使用公式动态计算出来的:RAM_in_bytes / 16384 (或 RAM_in_MB * 64)。 例如,具有 8 GB RAM 的虚拟机的默认连接约为 524,288 个。 实际值因虚拟机大小和可用内存而异。 |
net.netfilter.nf_conntrack_buckets |
65536 - 524288 | 动态计算 | 动态计算 | 动态计算 |
nf_conntrack 是在 Linux 中跟踪 NAT 连接项的模块。
nf_conntrack 模块使用哈希表来记录 TCP 协议的已建立连接记录。
nf_conntrack_buckets 是哈希表的大小。
使用 公式根据系统内存动态计算默认值: RAM_in_bytes / 16384至少包含 1,024 个存储桶,最大为 262,144 个存储桶。 默认值 nf_conntrack_max 通常设置为 nf_conntrack_buckets * 4。 实际值因虚拟机大小和可用内存而异。 |
Linux 工作进程限制
与文件描述符限制一样,进程可以创建的辅助角色或线程的数量受内核设置和用户限制所限制。 AKS 中的用户数不受限制。 下表列出了可以自定义每个节点池的内核设置:
| 设置 | Ubuntu 22.04 默认值 | Ubuntu 24.04 默认值 | Azure Linux 3.0 默认值 | 说明 |
|---|---|---|---|---|
kernel.threads-max |
动态计算 | 动态计算 | 动态计算 | 进程可以启动工作线程。 可创建的所有线程的最大数量均使用内核设置 kernel.threads-max 进行设置。 使用公式根据系统内存动态计算默认值: total_ram_pages / 4 (其中每页通常为 4 KB)。 实际值因虚拟机大小和可用内存而异。 |
Linux 虚拟内存
下表列出了可以自定义每个节点池的内核设置,以优化 Linux 内核的虚拟内存(VM)子系统的作,以及 writeout 磁盘上的脏数据:
| 设置 | 允许的值/间隔 | Ubuntu 22.04 默认值 | Ubuntu 24.04 默认值 | Azure Linux 3.0 默认值 | 说明 |
|---|---|---|---|---|---|
vm.max_map_count |
65530 | 1048576 | 1048576 | 此文件包含进程可以拥有的最大内存映射区域数。 内存映射区域用作调用 malloc、mmap、mprotect 和 madvise 的副作用,并且还用于加载共享库。 |
|
vm.vfs_cache_pressure |
1 - 100 | 100 | 100 | 100 | 此百分比值控制内核回收内存(用于缓存目录和 Inode 对象)的趋势。 |
vm.swappiness |
0 - 100 | 60 | 60 | 60 | 此控件用于定义内核交换内存页的频率。 较高的值会增加攻击性,较低的值会减少交换量。 值 0 指示内核不要启动交换,直到空闲和文件支持的页数小于区域中的高水位线。 |
swapFileSizeMB |
1 MB - 临时磁盘 (/dev/sdb) 的大小 | 没有 | 没有 | 没有 | SwapFileSizeMB 指定要在此节点池的代理节点上创建的交换文件的大小(以 MB 为单位)。 |
transparentHugePageEnabled |
always、madvise、never |
always |
always |
madvise |
透明巨页 是一项 Linux 内核功能,旨在通过更高效地使用处理器的内存映射硬件来提高性能。 启用时,内核会尽可能尝试分配 hugepages,如果 mmap 区域自然2MB对齐,任何 Linux 进程都会收到 2 MB 页。 在某些情况下,启用系统范围的hugepages时,应用程序可能最终会分配更多的内存资源。 应用程序可能有 mmap 一个大区域,但只触摸其中 1 个字节,在这种情况下,可能会分配 2 MB 页面,而不是 4k 页,因为没有充分的理由。 这种情况可能是在系统范围内禁用 hugepages 或者只将它们限定在 MADV_HUGEPAGE madvise 区域内的原因。 |
transparentHugePageDefrag |
always、defer、defer+madvise、madvise、never |
madvise |
madvise |
madvise |
此值可控制内核是否应充分利用内存压缩,以使更多 hugepages 可用。 |