Compartir a través de


Personalización de la configuración de nodos en los grupos de nodos de Azure Kubernetes Service (AKS)

La personalización de la configuración de los nodos permite ajustar los valores del sistema operativo (SO) o los parámetros de kubelet para que se adapten a las necesidades de las cargas de trabajo. Al crear un clúster de AKS o agregar un grupo de nodos al clúster, puede personalizar un subconjunto de los valores de configuración de kubelet y del sistema operativo más usados. Para configurar otros valores aparte de los de este subconjunto, puede usar un demonio establecido para personalizar las configuraciones necesarias sin perder la compatibilidad de AKS con los nodos.

Creación de archivos de configuración de nodos personalizados para grupos de nodos de AKS

Los cambios de configuración del sistema operativo y de kubelet requieren que cree un nuevo archivo de configuración con los parámetros y la configuración deseada. Si no se especifica un valor para un parámetro, el valor se establece en el valor predeterminado.

Nota

En los ejemplos siguientes se muestran las opciones de configuración comunes. Puede modificar la configuración para cumplir los requisitos de carga de trabajo. Para obtener una lista completa de los parámetros de configuración personalizados admitidos, consulte la sección Parámetros de configuración personalizados admitidos .

Configuración de kubelet

Cree un archivo linuxkubeletconfig.json con el siguiente contenido:

{
 "cpuManagerPolicy": "static",
 "cpuCfsQuota": true,
 "cpuCfsQuotaPeriod": "200ms",
 "imageGcHighThreshold": 90,
 "imageGcLowThreshold": 70,
 "topologyManagerPolicy": "best-effort",
 "allowedUnsafeSysctls": [
  "kernel.msg*",
  "net.*"
],
 "failSwapOn": false
}

Configuración del sistema operativo

Cree un archivo linuxosconfig.json con el siguiente contenido:

{
 "transparentHugePageEnabled": "madvise",
 "transparentHugePageDefrag": "defer+madvise",
 "swapFileSizeMB": 1500,
 "sysctls": {
  "netCoreSomaxconn": 163849,
  "netIpv4TcpTwReuse": true,
  "netIpv4IpLocalPortRange": "32000 60000"
 }
}

Creación de un clúster de AKS mediante archivos de configuración personalizados

Nota

Tenga en cuenta la siguiente información al usar archivos de configuración personalizados al crear un nuevo clúster de AKS:

  • Si especifica una configuración al crear un clúster, la configuración solo se aplica a los nodos del grupo de nodos inicial. Las opciones que no están configuradas en el archivo JSON conservan sus valores predeterminados.
  • CustomLinuxOsConfig no es compatible con el tipo de sistema operativo Windows.

Crear un nuevo clúster usando archivos de configuración personalizados mediante el comando az aks create, especificando sus archivos de configuración para los parámetros --kubelet-config y --linux-os-config. El siguiente comando de ejemplo crea un nuevo clúster con los archivos personalizados ./linuxkubeletconfig.json y ./linuxosconfig.json:

az aks create --name <cluster-name> --resource-group <resource-group-name> --kubelet-config ./linuxkubeletconfig.json --linux-os-config ./linuxosconfig.json

Adición de un grupo de nodos mediante archivos de configuración personalizados

Nota

Tenga en cuenta la siguiente información al usar archivos de configuración personalizados al agregar un nuevo grupo de nodos a un clúster de AKS existente:

  • Al agregar un grupo de nodos de Linux a un clúster existente, puede especificar la configuración de kubelet, la configuración del sistema operativo, o ambas. Cuando se agrega un grupo de nodos Windows a un clúster existente, sólo se puede especificar la configuración de kubelet. Si especifica una configuración al agregar un grupo de nodos, la configuración solo se aplica a los nodos del nuevo grupo de nodos. Las opciones que no están configuradas en el archivo JSON conservan sus valores predeterminados.
  • CustomKubeletConfig es compatible con los grupos de nodos de Linux y Windows.

Cree un nuevo grupo de nodos de Linux mediante el az aks nodepool add comando y especifique los archivos de configuración para los --kubelet-config parámetros y --linux-os-config . El siguiente comando de ejemplo crea un nuevo grupo de nodos de Linux con el archivo personalizado ./linuxkubeletconfig.json :

az aks nodepool add --name <node-pool-name> --cluster-name <cluster-name> --resource-group <resource-group-name> --kubelet-config ./linuxkubeletconfig.json

Confirmación de que se aplicó la configuración

Después de aplicar la configuración de nodo personalizada, puede confirmar que la configuración se aplicó a los nodos conectándose al host y comprobandosysctl o realizando cambios de configuración en el sistema de archivos.

Parámetros de configuración personalizados admitidos

Configuración personalizada de Kubelet de Linux

Parámetro Valores o intervalo permitidos Valor predeterminado Descripción
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 Habilita o deshabilita la aplicación de cuotas de CFS de CPU para contenedores que especifican 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.* None 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 5 El número máximo de archivos de registro de contenedor que pueden estar presentes para un contenedor.
podMaxPids -1 al límite de PID del kernel -1 (∞) 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 todavía está en versión preliminar. Registre la marca de características "KubeletDefaultSeccompProfilePreview" mediante el comando az feature register con --namespace "Microsoft.ContainerService".

Configuración personalizada de Kubelet en Windows

Parámetro Valores o intervalo permitidos Valor predeterminado Descripción
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 de 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 5 El número máximo de archivos de registro de contenedor que pueden estar presentes para un contenedor.

Opciones 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 vm.max_map_count setting, debería volver a formatear a vmMaxMapCount 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 modificar los siguientes valores del kernel y los límites integrados para que pueda administrar una mayor cantidad, a cambio de usar algo más de 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 Descripción
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 valor máximo posible (2^63-1) para evitar el agotamiento de descriptores de archivo y garantizar un número ilimitado de descriptores de archivo a nivel del sistema para las cargas de trabajo en contenedores.
fs.inotify.max_user_watches 781250 - 2097152 1 048 576 1 048 576 1 048 576 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 elemento aio-nr muestra el número actual de solicitudes io 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 1 048 576 1 048 576 1073741816 El número máximo de identificadores de archivo que un proceso puede asignar.

Nota

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 identificadores 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 Descripción
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 1 048 576 1 048 576 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 sockets timewait retenidos 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 sockets TIME-WAIT con nuevas conexiones cuando sea seguro desde el punto de vista del 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. Formado por dos números: el primer número es el primer puerto local que permite tráfico TCP y UDP en el nodo de agente, el segundo es 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 524288 524288 262144 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.
net.netfilter.nf_conntrack_buckets 65536 - 524288 262144 262144 262144 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.

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 Descripción
kernel.threads-max 1030425 1030462 256596 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.

Memoria virtual Linux

La siguiente tabla enumera la configuración del kernel que puede personalizar por grupo de nodos para ajustar el funcionamiento del subsistema de memoria virtual (VM) del kernel de Linux y la writeout de los datos sucios en el 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 Descripción
vm.max_map_count 65530 1 048 576 1 048 576 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) None None None 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.