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

Al personalizar la configuración del nodo, puede ajustar la configuración del sistema operativo (SO) o los parámetros de kubelet para satisfacer 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 opciones más allá de este subconjunto, utilice un DaemonSet para personalizar las configuraciones que necesite sin perder la compatibilidad de AKS para sus nodos.

Prerequisites

A medida que el servicio incorpora compatibilidad con nuevas opciones de configuración y parámetros de kubelet, es posible que sea necesario registrar indicadores de características en versión preliminar. Si se requiere un indicador de versión preliminar, la referencia de parámetros de configuración del nodo personalizado lo indica.

Requisitos de versión preliminar para kubeReserved la configuración de kubelet y hardEvictionThreshold

Importante

Las características en versión preliminar de AKS están disponibles en modalidad de autoservicio y previa suscripción. Las versiones preliminares se proporcionan "tal cual" y "como están disponibles", y están excluidas de los Acuerdos de nivel de servicio y la garantía limitada. Las versiones preliminares de AKS cuentan con soporte parcial por parte del servicio al cliente en la medida de lo posible. Por lo tanto, estas características no están diseñadas para su uso en producción. Para más información, consulte los siguientes artículos de soporte:

Instalación de la extensión aks-preview CLI de Azure

  1. Ejecute el siguiente comando para instalar la extensión de versión preliminar de AKS:

    az extension add --name aks-preview
    
  2. Ejecute el siguiente comando para actualizar a la versión más reciente de la extensión:

    az extension update --name aks-preview
    

Registre la marca de característica CustomNodeConfigPreview en su suscripción de Azure antes de usar la configuración de kubelet kubeReserved y hardEvictionThreshold en versión preliminar.

Registro de la marca de característica CustomNodeConfigPreview

  1. Registre el indicador de función CustomNodeConfigPreview con el comando az feature register.

    az feature register --namespace "Microsoft.ContainerService" --name "CustomNodeConfigPreview"
    

    Tarda unos minutos en que el estado muestre Registrado.

  2. Compruebe el estado del registro mediante el az feature show comando .

    az feature show --namespace "Microsoft.ContainerService" --name "CustomNodeConfigPreview"
    
  3. Cuando el estado muestre Registrado, actualice la inscripción del proveedor de recursos Microsoft.ContainerService mediante el comando az provider register.

    az provider register --namespace "Microsoft.ContainerService"
    

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

Para cambiar la configuración del sistema operativo y kubelet, cree un nuevo archivo de configuración con los parámetros y la configuración que desee. Si no especifica un valor para un parámetro, se usa el valor predeterminado.

Nota

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

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
}

Para usar la configuración de kubelet de la versión preliminar de personalización de nodos de Node en grupos de nodos de Linux, agregue kubeReserved y hardEvictionThreshold al archivo de configuración de kubelet. El ejemplo siguiente reserva CPU y memoria para los daemons del sistema de Kubernetes y configura los umbrales de expulsión estrictos del kubelet:

{
  "cpuManagerPolicy": "static",
  "kubeReserved": {
    "cpuMillicores": 200,
    "memoryMB": 1024
  },
  "hardEvictionThreshold": {
    "memoryAvailable": "20%",
    "nodeFsAvailable": "10%",
    "nodeFsInodesFree": "5%"
  }
}

Use kubeReserved y hardEvictionThreshold solo en grupos de nodos de Linux. Ambas configuraciones requieren el indicador de función CustomNodeConfigPreview.

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. El clúster conserva los valores predeterminados de las opciones que no están configuradas en el archivo JSON.
  • CustomLinuxOsConfig no es compatible con el tipo de sistema operativo Windows.
  • La configuración preliminar de kubelet kubeReserved y hardEvictionThreshold solo es compatible con los grupos de nodos Linux y requiere la marca de característica CustomNodeConfigPreview. Complete los pasos de registro en Requisitos de versión preliminar para kubeReserved y hardEvictionThreshold la configuración de kubelet antes de crear el clúster o el grupo de nodos.

Crear un clúster nuevo con archivos de configuración personalizados ejecutando el comando az aks create y especificando los 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 para 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. El grupo de nodos conserva los valores predeterminados de las opciones que no están configuradas en el archivo JSON.
  • CustomKubeletConfig es compatible con los grupos de nodos de Linux y Windows.
  • La configuración preliminar de kubelet kubeReserved y hardEvictionThreshold solo es compatible con los grupos de nodos Linux y requiere la marca de característica CustomNodeConfigPreview. Complete los pasos de registro en Requisitos de versión preliminar para kubeReserved y hardEvictionThreshold la configuración de kubelet antes de crear el clúster o el grupo de nodos.

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.

Revisión de los parámetros de configuración personalizados admitidos

Para obtener la lista completa de parámetros de configuración de kubelet y Linux compatibles, valores permitidos, valores predeterminados y descripciones, consulte Parámetros de configuración de nodo personalizados para AKS.

Consideraciones sobre las configuraciones de nodo personalizadas

Tenga en cuenta las siguientes consideraciones al personalizar la configuración del nodo:

  • Las actualizaciones de imágenes de nodo vuelven a aplicar configuraciones de nodo personalizadas.
  • Las operaciones de escalado horizontal conservan las configuraciones de nodos personalizadas.
  • AKS no realiza la validación previa al vuelo para cada parámetro o valor de configuración de nodo personalizado. Asegúrese de que los valores y parámetros de configuración de nodo personalizados que especifique son compatibles y válidos para evitar posibles problemas con los nodos del clúster.
  • Las configuraciones en versión preliminar kubeReserved y hardEvictionThreshold solo están disponibles en grupos de nodos Linux.
  • Si configura kubeReserved, los valores deben ser positivos y no pueden superar la capacidad de CPU o memoria disponible en el grupo de nodos de destino.
  • Si configura hardEvictionThreshold, use solo las unidades admitidas: Ki, Mi, Gio % para memoryAvailable y nodeFsAvailable, y un número sin formato o % para nodeFsInodesFree.
  • Los valores predeterminados para los parámetros de configuración de nodos personalizados suelen cambiar con las nuevas versiones del sistema operativo. Al aplicar configuraciones de nodo personalizadas, revise los valores predeterminados de los parámetros que está configurando para asegurarse de que las opciones personalizadas son adecuadas para la versión del sistema operativo de los nodos del clúster.
  • Limite el número de personas que tienen permisos para modificar la configuración del nodo personalizado para evitar consecuencias imprevistas en la estabilidad y el rendimiento del clúster. Considere usar Microsoft Entra ID para la autorización de la API de Kubernetes para restringir el acceso a la configuración del clúster.
  • Separe los grupos de nodos con configuraciones personalizadas de aquellas sin configuraciones personalizadas para evitar consecuencias imprevistas en las cargas de trabajo que podrían ser sensibles a determinados cambios de configuración. Por ejemplo, si tiene una carga de trabajo crítica que requiere una configuración específica de kubelet, considere la posibilidad de aislar esa carga de trabajo en un grupo de nodos dedicado con la configuración de kubelet personalizada necesaria.