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 un clúster de AKS con una configuración de nodo personalizada
Creación de archivos de configuración
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, se establecerá en el valor predeterminado.
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 nuevo clúster mediante archivos de configuración personalizados
Al crear un nuevo clúster, puede usar los archivos de configuración personalizados creados en los pasos anteriores para especificar la configuración de kubelet, la configuración del sistema operativo o ambas.
Nota
Si especifica una configuración al crear un clúster, solo se aplicará esa configuración a los nodos del grupo de nodos inicial. Cualquier valor que no esté configurado en el archivo JSON conservará el valor predeterminado. CustomLinuxOsConfig
no se admite para el tipo de sistema operativo: Windows.
Cree un clúster nuevo con archivos de configuración personalizados mediante el comando az aks create
y especifique los archivos de configuración. El siguiente comando de ejemplo crea un nuevo clúster con los archivos personalizados ./linuxkubeletconfig.json
y ./linuxosconfig.json
:
az aks create --name myAKSCluster --resource-group myResourceGroup --kubelet-config ./linuxkubeletconfig.json --linux-os-config ./linuxosconfig.json
Adición de un grupo de nodos mediante archivos de configuración personalizados
Al agregar un grupo de nodos a un clúster, puede usar el archivo de configuración personalizado creado en el paso anterior para especificar la configuración de kubelet. CustomKubeletConfig
es compatible con los grupos de nodos de Linux y Windows.
Nota
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, solo se aplicará esa configuración a los nodos del grupo de nodos nuevo. Cualquier valor que no esté configurado en el archivo JSON conservará el valor predeterminado.
az aks nodepool add --name mynodepool1 --cluster-name myAKSCluster --resource-group myResourceGroup --kubelet-config ./linuxkubeletconfig.json
Otras configuraciones
La siguiente configuración se puede usar para modificar otras configuraciones del sistema operativo:
Mensaje del día
Pase la marca --message-of-the-day
con la ubicación del archivo para reemplazar el mensaje del día en los nodos Linux durante la creación del clúster o la creación del grupo de nodos.
az aks create --cluster-name myAKSCluster --resource-group myResourceGroup --message-of-the-day ./newMOTD.txt
Creación de un grupo de nodos
az aks nodepool add --name mynodepool1 --cluster-name myAKSCluster --resource-group myResourceGroup --message-of-the-day ./newMOTD.txt
Confirme que se ha aplicado la configuración
Después de aplicar la configuración del nodo personalizada, puede confirmar que la configuración se ha aplicado a los nodos mediante la conexión al host y la comprobación de sysctl
o que los cambios de configuración se han realizado en el sistema de archivos.
Parámetros admitidos para la configuración de nodos personalizados
Configuración personalizada de kubelet
La configuración personalizada de Kubelet es compatible con los grupos de nodos de Linux y Windows. Los parámetros admitidos difieren y se documentan a continuación.
Configuración personalizada de Linux Kubelet
Parámetro | Valores o intervalo permitidos | Default | Descripción |
---|---|---|---|
cpuManagerPolicy |
ninguno, estático | ninguno | 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 |
true, false | 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 de disco que desencadenará la recolección de elementos no utilizados. 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 | ninguno | Optimiza la alineación de nodos NUMA. Consulte aquí para más información. |
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 (∞) | Cantidad máxima de identificadores de proceso que se pueden ejecutar en un pod |
Configuración personalizada de kubelet de Windows
Parámetro | Valores o intervalo permitidos | Default | 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 desencadenará la recolección de elementos no utilizados. 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 deben agregarse al archivo JSON de configuración o a la API AKS mediante la convención de uso de mayúsculas camelCase.
Por ejemplo, si modifica el valor de "vm.max_map_count", debe volver a formatear en "vmMaxMapCount" en el archivo JSON de configuración.
Límites del identificador de archivo
Cuando se atiende mucho tráfico, este suele proceder 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.
Configuración | Valores o intervalo permitidos | Default | Descripción |
---|---|---|---|
fs.file-max |
8192 - 12000500 | 709620 | Número máximo de identificadores de archivo que asignará el kernel de Linux; si aumenta este valor, puede aumentar el número máximo de archivos abiertos permitidos. |
fs.inotify.max_user_watches |
781250 - 2097152 | 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 | 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 | El número máximo de identificadores de archivo que un proceso puede asignar. |
Ajuste de socket y red
En el caso de los nodos de agente, que se espera que administren un gran número de sesiones simultáneas, puede usar el subconjunto de opciones de red y TCP que se muestra a continuación, que puede modificar en cada grupo de nodos.
Configuración | Valores o intervalo permitidos | Default | Descripción |
---|---|---|---|
net.core.somaxconn |
4096 - 3240000 | 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 | 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 | 212992 | Tamaño máximo del búfer de sockets de recepción en bytes. |
net.core.wmem_max |
212992 - 134217728 | 212992 | Tamaño máximo del búfer de sockets de envío en bytes. |
net.core.optmem_max |
20480 - 4194304 | 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 | Número máximo de solicitudes de conexión en cola que todavía no han recibido una confirmación del cliente que se está conectando. Si se supera este número, el kernel comenzará a rechazar solicitudes. |
net.ipv4.tcp_max_tw_buckets |
8000 - 1440000 | 32 768 | 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 | La cantidad de tiempo que una conexión huérfana (ninguna aplicación hace referencia a ella) permanecerá en el estado FIN_WAIT_2 antes de que se anule en el extremo local. |
net.ipv4.tcp_keepalive_time |
30 - 432000 | 7200 | Frecuencia con la que TCP envía mensajes keepalive cuando keepalive está habilitado. |
net.ipv4.tcp_keepalive_probes |
1 - 15 | 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 | 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 |
0 o 1 | 0 | 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 | 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 | Número mínimo de entradas que pueden encontrarse en la caché de ARP. La recolección de elementos no utilizados no se desencadena si el número de entradas está por debajo de este valor. |
net.ipv4.neigh.default.gc_thresh2 |
512 - 90000 | 8192 | Número máximo temporal de entradas que pueden encontrarse en la caché de ARP. Esta configuración es posiblemente la más importante, ya que la recolección de elementos no utilizados ARP se desencadenará unos 5 segundos después de alcanzar este máximo. |
net.ipv4.neigh.default.gc_thresh3 |
1024 - 100000 | 16384 | Número máximo fijo de entradas en la caché de ARP. |
net.netfilter.nf_conntrack_max |
131072 - 2097152 | 131 072 | 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 nf_conntrack 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 | 65536 | 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 nf_conntrack del protocolo TCP. nf_conntrack_buckets es el tamaño de la tabla hash. |
Límites de trabajo
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.
Configuración | Valores o intervalo permitidos | Default | Descripción |
---|---|---|---|
kernel.threads-max |
20 - 513785 | 55601 | 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
La configuración siguiente se puede usar para optimizar el funcionamiento del subsistema de memoria virtual (VM) del kernel de Linux y el valor de writeout
de datos sucios en el disco.
Configuración | Valores o intervalo permitidos | Default | Descripción |
---|---|---|---|
vm.max_map_count |
65530 - 262144 | 65530 | Este archivo contiene el número máximo de áreas de asignación 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 | 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 | Este control se usa para definir la intensidad con la que el kernel cambiará las páginas de memoria. Los valores más altos aumentarán la intensidad y los valores más bajos reducirán 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 | SwapFileSizeMB especifica que se creará un tamaño en MB de un archivo de intercambio en los nodos de agente de este grupo de nodos. |
transparentHugePageEnabled |
always , madvise , never |
always |
Transparent Hugepages es una característica del 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á habilitada, el kernel intenta asignar elementos hugepages siempre que sea posible y cualquier proceso de Linux recibirá páginas de 2 MB si la región mmap tiene una alineación natural de 2 MB. En determinados casos, cuando están habilitados elementos hugepages en todo el sistema, las aplicaciones pueden acabar asignando más recursos de memoria. Una aplicación puede 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 |
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. |
Pasos siguientes
- Aprenda a configurar su clúster de AKS.
- Aprenda a actualizar las imágenes de nodo del clúster.
- Consulte Actualización de un clúster de Azure Kubernetes Service (AKS) para más información sobre cómo actualizar el clúster a la versión más reciente de Kubernetes.
- Consulte la lista de Preguntas más frecuentes sobre AKS para encontrar respuestas a algunas preguntas comunes sobre AKS.
Azure Kubernetes Service