Parámetros de configuración de nodo personalizados para Azure Kubernetes Service (AKS)

En este artículo se enumeran los parámetros de configuración de nodos personalizados admitidos para Azure Kubernetes Service (AKS) grupos de nodos. Para obtener información sobre cómo crear y aplicar archivos de configuración, consulte Personalización de la configuración del nodo para grupos de nodos de AKS.

Parámetros de configuración personalizados de Kubelet

Importante

Al habilitar sysctls no seguros, se asume la responsabilidad de la estabilidad del nodo y el comportamiento de la carga de trabajo. Los sysctls no seguros pueden provocar inestabilidad del nodo o vulnerabilidades de seguridad si están mal configurados. Asegúrese de comprender las implicaciones de habilitar sysctls no seguros específicos y supervise de cerca el estado de salud de su clúster después de realizar dichos cambios.

Note

La kubeReservedconfiguración , hardEvictionThreshold, softEvictionThreshold, softEvictionGracePeriody evictionMaxPodGracePeriodInSeconds forma parte de la versión preliminar de protección de nodos de AKS y solo se aplica a los grupos de nodos de Linux. Registre la marca de CustomNodeConfigPreview características antes de usar esta configuración. Para habilitar la protección de nodos, consulte Protección de nodos (versión preliminar) en AKS.

Para cada señal de expulsión, establezca los softEvictionThreshold valores coincidentes softEvictionGracePeriod y . Puede omitir ambos valores para usar el valor predeterminado o establecer ambos valores en cadenas vacías para rechazar la expulsión temporal de esa señal. Si especifica un umbral de expulsión temporal, debe ser mayor que el umbral de expulsión duro efectivo para la misma señal.

Configuración personalizada de Kubelet de Linux

Parámetro Valores o intervalo permitidos Predeterminado Description
cpuManagerPolicy ninguno, estático none La directiva estática permite que los contenedores de pods garantizados con un número entero de solicitudes de CPU accedan a las CPU exclusivas del nodo.
cpuCfsQuota verdadero, falso true Habilite o deshabilite la aplicación de cuota de CFS de CPU para contenedores que especifiquen límites de CPU.
cpuCfsQuotaPeriod Intervalo en milisegundos (ms) 100ms Establece el valor del período de cuota de CFS de CPU.
imageGcHighThreshold 0-100 85 Porcentaje de uso del disco después del cual siempre se ejecuta la recolección de elementos no utilizados de la imagen. Uso mínimo del disco que desencadena la recolección de basura. Para deshabilitar la recolección de elementos no utilizados de la imagen, establezca este valor en 100.
imageGcLowThreshold 0-100, no mayor que imageGcHighThreshold. 80 Porcentaje de uso del disco antes del cual la recolección de elementos no utilizados de la imagen nunca se ejecuta. Uso mínimo de disco que puede desencadenar la recolección de elementos no utilizados.
topologyManagerPolicy ninguno, mejor esfuerzo, restringido, un solo nodo numa none Optimice la alineación del nodo NUMA. Para obtener más información, consulte Políticas de gestión de control de topología en un nodo.
allowedUnsafeSysctls kernel.shm*, kernel.msg*, kernel.sem, , fs.mqueue.*, net.* Ninguno Lista permitida de patrones no seguros sysctls o sysctl.
containerLogMaxSizeMB Tamaño en megabytes (MB) 50 Tamaño máximo (por ejemplo, 10 MB) de un archivo de registro de contenedor antes de su rotación.
containerLogMaxFiles 2 o superior 5 Número máximo de archivos de registro de contenedor que se conservarán para un contenedor.
podMaxPids -1 al límite de PID del kernel -1 (infinito) Número máximo de identificadores de proceso que se pueden ejecutar en un pod.
seccompDefault Unconfined, RuntimeDefault Unconfined Establece el perfil de seccomp predeterminado para todas las cargas de trabajo. RuntimeDefault usa el perfil de seccomp predeterminado del contenedor, lo que restringe determinadas llamadas del sistema para mejorar la seguridad. Se produce un error en llamadas al sistema restringidas. Unconfined no aplica restricciones a las llamadas al sistema, permitiendo todas las llamadas y reduciendo la seguridad. Para obtener más información, consulte el perfil predeterminado de seccomp de containerd. Este parámetro está en versión preliminar. Registre la marca de características "KubeletDefaultSeccompProfilePreview" mediante el comando az feature register con --namespace "Microsoft.ContainerService".
kubeReserved.cpuMillicores 140 a la capacidad de CPU del grupo de nodos en millicores Calculado por AKS en función del tamaño de la máquina virtual Reserva la CPU para los demonios del sistema de Kubernetes.
kubeReserved.memoryMB 750 a la capacidad de memoria del grupo de nodos en MiB AKS calculado desde la memoria del nodo y el número máximo de pods por nodo: min(20 × maxPods + 50, 25% of node memory) MiB. Con protección de nodos: min(35 × maxPods + max(250, 2% of node memory), 25% of node memory) MiB Reserva memoria para demonios del sistema de Kubernetes.
hardEvictionThreshold.memoryAvailable <number>Ki, <number>Mio <number>Gi con un mínimo de 100Mi; o 2% para 100% 100Mi. Con la protección de nodos: 250Mi para nodos con 8 GiB de memoria o menos, 375Mi para nodos con más de 8 GiB y menos de 32 GiB, y 512Mi para nodos con 32 GiB o más Establece el umbral de expulsión duro para la memoria disponible.
hardEvictionThreshold.nodeFsAvailable <number>Ki, <number>Mi, <number>Gio 10% a 100% 10% Establece el umbral de expulsión duro para el espacio disponible del sistema de archivos de nodo.
hardEvictionThreshold.nodeFsInodesFree <number> o 5% para 100% 5% Establece el umbral de expulsión duro para los inodes del sistema de archivos de nodo libre.
softEvictionThreshold.memoryAvailable Cadena vacía; <number>Ki, <number>Mio <number>Gi con un mínimo de 100Mi; o 2% para 100% None. Con la protección de nodos: 500Mi para nodos con 8 GiB de memoria o menos, 750Mi para nodos con más de 8 GiB y menos de 32 GiB, y 1Gi para nodos con 32 GiB o más Establece el umbral de expulsión temporal para la memoria disponible. El valor debe ser mayor que el valor efectivo hardEvictionThreshold.memoryAvailable .
softEvictionThreshold.nodeFsAvailable Cadena vacía; <number>Ki, <number>Mi, <number>Gio 10% a 100% 12% cuando la protección de nodos está habilitada; De lo contrario, ninguno Establece el umbral de expulsión temporal para el espacio disponible del sistema de archivos de nodo. El valor debe ser mayor que el valor efectivo hardEvictionThreshold.nodeFsAvailable .
softEvictionThreshold.nodeFsInodesFree Cadena vacía; <number> o 5% para 100% 7% cuando la protección de nodos está habilitada; De lo contrario, ninguno Establece el umbral de expulsión temporal para los inodes del sistema de archivos de nodo libre. El valor debe ser mayor que el valor efectivo hardEvictionThreshold.nodeFsInodesFree .
softEvictionGracePeriod.memoryAvailable Duración de estilo Go o cadena vacía de al menos 30s mediante ns, us, ms, s, , mo h 30s cuando la protección de nodos está habilitada; De lo contrario, ninguno Establece cuánto tiempo se debe cruzar el memoryAvailable umbral de expulsión temporal antes de expulsar pods de kubelet.
softEvictionGracePeriod.nodeFsAvailable Duración de estilo Go o cadena vacía de al menos 30s mediante ns, us, ms, s, , mo h 2m cuando la protección de nodos está habilitada; De lo contrario, ninguno Establece cuánto tiempo se debe cruzar el nodeFsAvailable umbral de expulsión temporal antes de expulsar pods de kubelet.
softEvictionGracePeriod.nodeFsInodesFree Duración de estilo Go o cadena vacía de al menos 30s mediante ns, us, ms, s, , mo h 2m cuando la protección de nodos está habilitada; De lo contrario, ninguno Establece cuánto tiempo se debe cruzar el nodeFsInodesFree umbral de expulsión temporal antes de expulsar pods de kubelet.
evictionMaxPodGracePeriodInSeconds 0 o superior 60 cuando la protección de nodos está habilitada; 0 De lo contrario, Establece el número máximo de segundos que kubelet permite que los pods finalicen durante una expulsión temporal.

Configuración personalizada de Kubelet en Windows

Parámetro Valores o intervalo permitidos Predeterminado Description
imageGcHighThreshold 0-100 85 Porcentaje de uso del disco después del cual siempre se ejecuta la recolección de elementos no utilizados de la imagen. Uso mínimo del disco que desencadena la recolección de basura. Para deshabilitar la recolección de elementos no utilizados de la imagen, establezca este valor en 100.
imageGcLowThreshold 0-100, no mayor que imageGcHighThreshold. 80 Porcentaje de uso del disco antes del cual la recolección de elementos no utilizados de la imagen nunca se ejecuta. Uso mínimo de disco que puede desencadenar la recolección de elementos no utilizados.
containerLogMaxSizeMB Tamaño en megabytes (MB) 10 Tamaño máximo (por ejemplo, 10 MB) de un archivo de registro de contenedor antes de su rotación.
containerLogMaxFiles 2 o superior 5 Número máximo de archivos de registro de contenedor que se conservarán para un contenedor.

Parámetros de configuración del sistema operativo personalizado de Linux

Importante

Para simplificar la búsqueda y la legibilidad, la configuración del sistema operativo se muestra en este artículo por su nombre, pero se deben agregar al archivo JSON de configuración o a la API de AKS mediante la convención de mayúsculas camelCase.

Por ejemplo, si modifica la vm.max_map_count configuración, debe volver a vmMaxMapCount formatearla en en el archivo JSON de configuración.

Límites de identificadores de archivos de Linux

Al atender grandes cantidades de tráfico, este suele provenír de un gran número de archivos locales. Puede ajustar la siguiente configuración del kernel y los límites integrados para permitirle manejar más, a costa de algo de la memoria del sistema.

En la siguiente tabla se enumeran los límites de identificadores de archivo que puede personalizar por grupo de nodos:

Configuración Valores o intervalo permitidos Valor predeterminado de Ubuntu 22.04 Valor predeterminado de Ubuntu 24.04 Valor predeterminado de Azure Linux 3.0 Description
fs.file-max 8192 - 9223372036854775807 9223372036854775807 9223372036854775807 9223372036854775807 Número máximo de identificadores de archivo que asigna el kernel de Linux. Este valor se establece en el máximo posible (2^63-1) para evitar el agotamiento del descriptor de archivo y garantizar un número ilimitado de manejadores de archivos para cargas de trabajo en contenedores.
fs.inotify.max_user_watches 781250 - 2097152 1048576 1048576 1048576 Número máximo de inspecciones de archivos permitidos por el sistema. Cada inspección tiene aproximadamente 90 bytes en un kernel de 32 bits y unos 160 bytes en un kernel de 64 bits.
fs.aio-max-nr 65536 - 6553500 65536 65536 65536 El aio-nr muestra el número actual de solicitudes de E/S asincrónicas en todo el sistema. aio-max-nr permite cambiar el valor máximo hasta el que puede aumentar aio-nr.
fs.nr_open 8192 - 20000500 1048576 1048576 1073741816 El número máximo de identificadores de archivo que un proceso puede asignar.

Note

El fs.file-max parámetro se establece en 9223372036854775807 (el valor máximo de un entero de 64 bits con signo) en Ubuntu y Linux de Azure en función de los valores predeterminados ascendentes. Esta configuración:

  • Evita ataques por denegación de servicio en función del agotamiento del descriptor de archivos de todo el sistema.
  • Garantiza que las cargas de trabajo de contenedor nunca sufran de cuellos de botella debido a los límites de manejadores de archivos de todo el sistema.
  • Mantiene la seguridad a través de límites por proceso (fs.nr_open y ulimit) que se siguen aplicando a procesos individuales.
  • Optimiza las plataformas de contenedor en las que muchos contenedores se pueden ejecutar simultáneamente, cada uno de los cuales puede abrir muchos archivos y conexiones de red.

Ajuste de socket y red en Linux

En el caso de los nodos de agente, que se espera que controlen un gran número de sesiones simultáneas, puede usar las siguientes opciones de TCP y red y ajustarlas por grupo de nodos:

Configuración Valores o intervalo permitidos Valor predeterminado de Ubuntu 22.04 Valor predeterminado de Ubuntu 24.04 Valor predeterminado de Azure Linux 3.0 Description
net.core.somaxconn 4096 - 3240000 16384 16384 16384 Número máximo de solicitudes de conexión que se pueden poner en cola para cualquier socket de escucha determinado. Un límite superior para el valor del parámetro de trabajo pendiente que se pasa a la función listen(2). Si el argumento de trabajo pendiente es mayor que somaxconn, se trunca de forma silenciosa hasta este límite.
net.core.netdev_max_backlog 1000 - 3240000 1000 1000 1000 Número máximo de paquetes, en cola en el lado INPUT, cuando la interfaz recibe paquetes a una velocidad mayor de la que el kernel puede procesarlos.
net.core.rmem_max 212992 - 134217728 1048576 1048576 212992 Tamaño máximo del búfer de sockets de recepción en bytes.
net.core.wmem_max 212992 - 134217728 212992 212992 212992 Tamaño máximo del búfer de sockets de envío en bytes.
net.core.optmem_max 20480 - 4194304 20480 131 072 20480 Tamaño máximo del búfer auxiliar (búfer de memoria de opción) permitido por socket. La memoria de opción de socket se utiliza en algunos casos para almacenar estructuras adicionales relacionadas con el uso del socket.
net.ipv4.tcp_max_syn_backlog 128 - 3240000 16384 16384 16384 Número máximo de solicitudes de conexión en cola que no han recibido una confirmación del cliente de conexión. Si se supera este número, el kernel comienza a quitar solicitudes.
net.ipv4.tcp_max_tw_buckets 8000 - 1440000 262144 262144 131 072 Número máximo de TIME-WAIT sockets mantenidos por el sistema simultáneamente. Si se supera este número, el socket time-wait se destruye inmediatamente y se imprime la advertencia.
net.ipv4.tcp_fin_timeout 5 - 120 60 60 60 La cantidad de tiempo que una conexión huérfana (ninguna aplicación hace referencia a ella) permanece en el estado FIN_WAIT_2 antes de que se anule en el extremo local.
net.ipv4.tcp_keepalive_time 30 - 432000 7200 7200 7200 Frecuencia con la que TCP envía mensajes keepalive cuando keepalive está habilitado.
net.ipv4.tcp_keepalive_probes 1 - 15 9 9 9 Número de sondeos keepalive que envía TCP, hasta que decide que la conexión se ha interrumpido.
net.ipv4.tcp_keepalive_intvl 10 - 90 75 75 75 Frecuencia con la que se envían los sondeos. Multiplicado por tcp_keepalive_probes constituye el tiempo para terminar una conexión que no responde, después de que se inicien los sondeos.
net.ipv4.tcp_tw_reuse 2 2 2 Permite reutilizar TIME-WAIT sockets para nuevas conexiones cuando es seguro desde un punto de vista de protocolo.
net.ipv4.ip_local_port_range Primera: 1024 - 60999 y Última: 32768 - 65535] Primero: 32768 y Último: 60999 Primero: 32768 y Último: 60999 Primero: 32768 y Último: 60999 El intervalo de puertos local que utiliza el tráfico TCP y UDP para elegir el puerto local. El intervalo se compone de dos números: el primer puerto local permitido para el tráfico TCP y UDP en el nodo del agente y el último número de puerto local.
net.ipv4.neigh.default.gc_thresh1 128 - 80000 4096 4096 4096 Número mínimo de entradas que pueden estar en la memoria caché de ARP. La recolección de basura no se desencadena si el número de entradas es inferior a esta configuración.
net.ipv4.neigh.default.gc_thresh2 512 - 90000 8192 8192 8192 Número máximo flexible de entradas que pueden estar en la memoria caché de ARP. Esta configuración es posiblemente la más importante, ya que la recolección de elementos no utilizados ARP se desencadena unos 5 segundos después de alcanzar este máximo.
net.ipv4.neigh.default.gc_thresh3 1024 - 100000 16384 16384 16384 Número máximo fijo de entradas en la caché de ARP.
net.netfilter.nf_conntrack_max 131072 - 2097152 Calculado dinámicamente Calculado dinámicamente Calculado dinámicamente nf_conntrack es un módulo que realiza un seguimiento de las entradas de conexión de NAT en Linux. El módulo nf_conntrack usa una tabla hash para anotar el registro de la conexión establecida del protocolo TCP. nf_conntrack_max es el número máximo de nodos de la tabla hash, es decir, el número máximo de conexiones admitidas por el módulo nf_conntrack o el tamaño de la tabla de seguimiento de la conexión. El valor predeterminado se calcula dinámicamente en función de la memoria del sistema mediante la fórmula: RAM_in_bytes / 16384 (o RAM_in_MB * 64). Por ejemplo, una máquina virtual con 8 GB de RAM tiene un valor predeterminado de aproximadamente 524 288 conexiones. Los valores reales varían en función del tamaño de la máquina virtual y de la memoria disponible.
net.netfilter.nf_conntrack_buckets 65536 - 524288 Calculado dinámicamente Calculado dinámicamente Calculado dinámicamente nf_conntrack es un módulo que realiza un seguimiento de las entradas de conexión de NAT en Linux. El módulo nf_conntrack usa una tabla hash para anotar el registro de la conexión establecida del protocolo TCP. nf_conntrack_buckets es el tamaño de la tabla hash. El valor predeterminado se calcula dinámicamente en función de la memoria del sistema mediante la fórmula: RAM_in_bytes / 16384, con un mínimo de 1024 cubos y un máximo de 262 144 cubos. El valor predeterminado nf_conntrack_max suele establecerse en nf_conntrack_buckets * 4. Los valores reales varían en función del tamaño de la máquina virtual y de la memoria disponible.

Límites de trabajo de Linux

Al igual que los límites del descriptor de archivos, el número de trabajos o subprocesos que un proceso puede crear está limitado por la configuración del kernel y los límites de usuarios. El límite de usuarios en AKS es ilimitado. En la tabla siguiente se muestra la configuración del kernel que puede personalizar por grupo de nodos:

Configuración Valor predeterminado de Ubuntu 22.04 Valor predeterminado de Ubuntu 24.04 Valor predeterminado de Azure Linux 3.0 Description
kernel.threads-max Calculado dinámicamente Calculado dinámicamente Calculado dinámicamente Los procesos pueden iniciar los subprocesos de trabajo. El número máximo de subprocesos que se pueden crear se establece con la configuración del kernel kernel.threads-max. El valor predeterminado se calcula dinámicamente en función de la memoria del sistema mediante la fórmula: total_ram_pages / 4 (donde cada página suele ser de 4 KB). Los valores reales varían en función del tamaño de la máquina virtual y de la memoria disponible.

Memoria virtual Linux

En la tabla siguiente se enumeran las opciones de configuración del kernel que puede personalizar por grupo de nodos para optimizar el funcionamiento del subsistema de memoria virtual (VM) del kernel de Linux y de datos sucios en el writeout disco:

Configuración Valores o intervalo permitidos Valor predeterminado de Ubuntu 22.04 Valor predeterminado de Ubuntu 24.04 Valor predeterminado de Azure Linux 3.0 Description
vm.max_map_count 65530 1048576 1048576 Este archivo contiene el número máximo de áreas de mapa de memoria que puede tener un proceso. Las áreas de asignación de memoria se usan como efectos secundarios de la llamada a malloc, directamente mediante mmap, mprotect y madvise, y también cuando se cargan bibliotecas compartidas.
vm.vfs_cache_pressure 1 - 100 100 100 100 Este valor de porcentaje controla la tendencia del kernel a reclamar la memoria, que se usa para el almacenamiento en caché de objetos de directorio e inode.
vm.swappiness 0 - 100 60 60 60 Este control se usa para definir la forma agresiva en que el kernel intercambia páginas de memoria. Los valores más altos aumentan la agresividad, los valores inferiores reducen la cantidad de intercambio. Un valor de 0 indica al kernel que no inicie el intercambio hasta que la cantidad de páginas libres y de copia de seguridad de archivos sea menor que la marca de límite superior de una zona.
swapFileSizeMB 1 MB: tamaño del disco temporal (/dev/sdb) Ninguno Ninguno Ninguno SwapFileSizeMB especifica el tamaño en MB de un archivo de intercambio que se va a crear en los nodos del agente desde este grupo de nodos.
transparentHugePageEnabled always, , madvise, never always always madvise Transparent Hugepages es una característica de kernel de Linux diseñada para mejorar el rendimiento al hacer un uso más eficaz del hardware de asignación de memoria del procesador. Cuando está habilitado, el kernel intenta asignar hugepages siempre que sea posible, y cualquier proceso en Linux recibe páginas de 2 MB si la región mmap está alineada naturalmente a 2 MB. En determinados casos, cuando hugepages están habilitados en todo el sistema, las aplicaciones podrían acabar asignando más recursos de memoria. Una aplicación podría usar mmap con una región grande, pero solo tocar 1 byte de ella, en cuyo caso, es posible que se asigne una página de 2 MB en lugar de una página de 4k por falta de una buena razón para hacerlo. Este caso es el motivo por el que es posible deshabilitar elementos hugepages en todo el sistema o solo tenerlos dentro de regiones MADV_HUGEPAGE madvise.
transparentHugePageDefrag always, defer, defer+madvise, , madvise, never madvise madvise madvise Este valor controla si el kernel debe hacer un uso intensivo de la compactación de memoria para que haya más elementos hugepages disponibles.