Personaliza la configuración del sistema de nodos


En este documento, se muestra cómo personalizar la configuración de tu nodo de Google Kubernetes Engine (GKE) mediante un archivo de configuración denominado configuración del sistema de nodos.

Descripción general

Puedes personalizar la configuración de tu nodo mediante varios métodos. Por ejemplo, puedes especificar parámetros como el tipo de máquina y la plataforma de CPU mínima cuando creas un grupo de nodos.

La configuración del sistema de nodos es un archivo de configuración que proporciona una manera de ajustar un conjunto limitado de opciones de configuración del sistema. Puedes usar una configuración del sistema de nodos a fin de especificar opciones de configuración personalizadas para el agente del nodo de Kubernetes (kubelet) y opciones de configuración del kernel de Linux de nivel bajo ( sysctl) en tus grupos de nodos.

También puedes personalizar el entorno de ejecución de tu contenedor de containerd en tus nodos de GKE mediante un archivo diferente llamado archivo de configuración del entorno de ejecución. Para obtener instrucciones, consulta Personaliza la configuración de containerd en nodos de GKE.

También puedes usar DaemonSets para personalizar nodos, como en Inicia automáticamente los nodos de GKE con DaemonSets.

Usa una configuración de sistema de nodos

Para usar una configuración de sistema de nodos, sigue estos pasos:

  1. Crea un archivo de configuración. Este archivo contiene tus configuraciones de kubelet y sysctl.
  2. Agrega la configuración cuando crees un clúster o cuando crees o actualices un grupo de nodos.

Crea un archivo de configuración

Escribe el archivo de configuración de tu sistema de nodos en YAML. En el siguiente ejemplo, se muestra cómo agregar configuraciones para las opciones de kubelet y sysctl:

kubeletConfig:
  cpuManagerPolicy: static
linuxConfig:
 sysctl:
   net.core.somaxconn: '2048'
   net.ipv4.tcp_rmem: '4096 87380 6291456'

En este ejemplo:

  • cpuManagerPolicy: static configura kubelet para usar la política de administración de CPU estáticas.
  • net.core.somaxconn: '2048' limita las tareas pendientes socket listen() a 2,048 bytes.
  • net.ipv4.tcp_rmem: '4096 87380 6291456' establece el valor mínimo, predeterminado y máximo del buffer de recepción de sockets de TCP a 4,096 bytes, 87,380 bytes y 6,291,456 bytes, respectivamente.

Si deseas agregar parámetros de configuración solo para kubelet o sysctl, incluye solo esa sección en tu archivo de configuración. Por ejemplo, para agregar una configuración de kubelet, crea el siguiente archivo:

kubeletConfig:
  cpuManagerPolicy: static

Para obtener una lista completa de los campos que puedes agregar a tu archivo de configuración, consulta las secciones Opciones de configuración de Kubelet y Opciones de configuración de Sysctl.

Agrega la configuración a un grupo de nodos

Después de crear el archivo de configuración, agrega la marca --system-config-from-file mediante Google Cloud CLI. Puedes agregar esta marca cuando creas un clúster o cuando creas o actualizas un grupo de nodos. No puedes agregar una configuración de sistema de nodo con la consola de Google Cloud.

Para agregar una configuración del sistema de nodos, ejecuta el siguiente comando:

Crear clúster

gcloud container clusters create CLUSTER_NAME \
    --location=LOCATION \
    --system-config-from-file=SYSTEM_CONFIG_PATH

Reemplaza lo siguiente:

  • CLUSTER_NAME: El nombre de tu clúster
  • LOCATION: la zona o región de procesamiento del clúster.
  • SYSTEM_CONFIG_PATH: La ruta de acceso al archivo que contiene tus configuraciones de kubelet y sysctl

Después de aplicar una configuración del sistema de nodos, el grupo de nodos predeterminado del clúster usa la configuración que definiste.

Crear grupo de nodos

gcloud container node-pools create POOL_NAME \
     --cluster CLUSTER_NAME \
     --location=LOCATION \
     --system-config-from-file=SYSTEM_CONFIG_PATH

Reemplaza lo siguiente:

  • POOL_NAME: El nombre de tu grupo de nodos
  • CLUSTER_NAME: El nombre del clúster al que deseas agregar un grupo de nodos.
  • LOCATION: la zona o región de procesamiento del clúster.
  • SYSTEM_CONFIG_PATH: La ruta de acceso al archivo que contiene tus configuraciones de kubelet y sysctl

Actualiza un grupo de nodos

gcloud container node-pools update POOL_NAME \
    --cluster=CLUSTER_NAME \
    --location=LOCATION \
    --system-config-from-file=SYSTEM_CONFIG_PATH

Reemplaza lo siguiente:

  • POOL_NAME: El nombre del grupo de nodos que quieres actualizar
  • CLUSTER_NAME: El nombre del clúster que deseas actualizar
  • LOCATION: la zona o región de procesamiento del clúster.
  • SYSTEM_CONFIG_PATH: La ruta de acceso al archivo que contiene tus configuraciones de kubelet y sysctl

Edita una configuración del sistema de nodos

Para editar una configuración del sistema de nodos, puedes crear un grupo de nodos nuevo con la configuración que desees o actualizar la configuración del sistema de nodos de un grupo de nodos existente.

Edita mediante la creación de un grupo de nodos

Para editar una configuración del sistema de nodos mediante la creación de un grupo de nodos, haz lo siguiente:

  1. Crea un archivo de configuración con la configuración que desees.
  2. Agrega la configuración a un grupo de nodos nuevo.
  3. Migra tus cargas de trabajo al grupo de nodos nuevo.
  4. Borra el grupo de nodos anterior.

Edita mediante la actualización de un grupo de nodos existente

Si quieres editar la configuración de un sistema de nodos mediante la actualización de un grupo de nodos existente, actualiza la configuración del sistema de nodos con los valores que desees. La actualización de una configuración del sistema de nodos anula la configuración del sistema del grupo de nodos con la nueva configuración. Si omites algún parámetro durante una actualización, se configurará con los respectivos valores predeterminados.

Si quieres restablecer la configuración del sistema de nodos a la configuración predeterminada, actualiza el archivo de configuración con valores vacíos para kubelet y sysctl. Por ejemplo:

kubeletConfig: {}
linuxConfig:
  sysctl: {}

Borra una configuración del sistema de nodos

Para quitar una configuración del sistema de nodos, haz lo siguiente:

  1. Crea un grupo de nodos.
  2. Migra tus cargas de trabajo al grupo de nodos nuevo.
  3. Borra el grupo de nodos que tiene la configuración del sistema de nodos anterior.

Opciones de configuración de Kubelet

En la siguiente tabla, se muestran las opciones de kubelet que puedes modificar.

Opciones de configuración de Kubelet Restricciones Parámetro de configuración predeterminado Descripción
cpuManagerPolicy El valor debe ser nonestatic none Esta configuración controla la política del administrador de CPU de kubelet. El valor predeterminado es none, que es el esquema de afinidad de CPU predeterminado, que no proporciona afinidad más allá de lo que el programador de SO proporciona automáticamente.

Configurar este valor como static permita que a los pods en la clase de QoS garantizada con solicitudes de CPU de número entero se les asigne el uso exclusivo de las CPU.
cpuCFSQuota El valor debe ser truefalse true Esta configuración aplica el límite de CPU del Pod. Establecer este valor en false significa que se ignoran los límites de CPU para Pods.

Omitir los límites de CPU puede ser conveniente en ciertas situaciones en las que los Pods son sensibles a los límites de CPU. El riesgo de inhabilitar cpuCFSQuota es que un Pod fuera de control puede consumir más recursos de CPU de lo previsto.
cpuCFSQuotaPeriod El valor debe ser una duración de tiempo "100ms" Mediante esta opción de configuración, se establece el valor del período de la cuota de CFS de CPU, cpu.cfs_period_us, que especifica el período de con qué frecuencia se debe reasignar el acceso de un cgroup a los recursos de CPU. Esta opción te permite ajustar el comportamiento de limitación de CPU.
insecureKubeletReadonlyPortEnabled El valor debe ser un valor booleano (true o false) true Esta configuración inhabilita el puerto de solo lectura 10255 de kubelet no seguro en cada grupo de nodos nuevo de tu clúster. Si estableces esta configuración en este archivo, no puedes usar un cliente de API de GKE para cambiar la configuración a nivel de clúster.
podPidsLimit El valor debe ser entre 1024 y 4194304 none Esta configuración establece la cantidad máxima de ID de procesos (PID) que puede usar cada Pod.

Opciones de configuración de Sysctl

Para ajustar el rendimiento de tu sistema, puedes modificar los siguientes atributos del kernel:

Los diferentes espacios de nombres de Linux pueden tener valores únicos para un sysctl determinado, mientras que otros son globales para todo el nodo. La actualización de las opciones de sysctl mediante una configuración del sistema de nodos garantiza que sysctl se aplique de forma global en el nodo y en cada espacio de nombres, lo que hace que cada pod tenga valores de sysctl idénticos en cada espacio de nombres de Linux.

Opciones de configuración del modo cgroup de Linux

kubelet y el entorno de ejecución del contenedor usan cgroups de kernel de Linux para la administración de recursos, como limitar la cantidad de CPU o memoria a la que puede acceder cada contenedor en un Pod. Hay dos versiones del subsistema cgroup en el kernel: cgroupv1 y cgroupv2. La compatibilidad de Kubernetes con cgroupv2 se ingresó como alfa en la versión 1.18 de Kubernetes, Beta en 1.22 y en fase de disponibilidad general en 1.25. Para obtener más información, consulta la documentación de cgroups v2 de Kubernetes.

La configuración del sistema de nodos te permite personalizar la configuración de cgroup de tus grupos de nodos. Puedes usar cgroupv1 o cgroupv2. GKE usa cgroupv2 para los grupos de nodos estándar nuevos que ejecutan la versión 1.26 y versiones posteriores, y cgroupv1 para versiones anteriores a 1.26. En el caso de los grupos de nodos creados con el aprovisionamiento automático de nodos, la configuración de cgroup depende de la versión inicial del clúster, no de la versión del grupo de nodos.

Puedes usar la configuración del sistema de nodos a fin de cambiar la configuración para que un grupo de nodos use cgroupv1 o cgroupv2 de manera explícita. Solo actualizar un grupo de nodos existente a 1.26 no cambia la configuración a cgroupv2, ya que los grupos de nodos existentes creados que ejecutan una versión anterior a la 1.26 (sin una configuración de cgroup personalizada), continúa usando cgroupv1, a menos que especifiques explícitamente lo contrario.

Por ejemplo, para configurar tu grupo de nodos a fin de usar cgroupv2, usa un archivo de configuración del sistema de nodos, como el siguiente:

linuxConfig:
  cgroupMode: 'CGROUP_MODE_V2'

Las opciones de cgroupMode compatibles son las siguientes:

  • CGROUP_MODE_V1: Usa cgroupv1 en el grupo de nodos.
  • CGROUP_MODE_V2: Usa cgroupv2 en el grupo de nodos.
  • CGROUP_MODE_UNSPECIFIED: usa la configuración predeterminada de cgroup de GKE.

Para usar cgroupv2, se aplican los siguientes requisitos y limitaciones:

  • Para un grupo de nodos que ejecuta una versión anterior a la 1.26, debes usar la versión de gcloud CLI 408.0.0 o posterior. Como alternativa, usa gcloud beta con la versión 395.0.0 o posterior.
  • Tu clúster y los grupos de nodos deben ejecutar la versión 1.24.2-gke.300 o posterior de GKE.
  • Debes usar Container-Optimized OS con la imagen de nodo containerd.
  • Si alguna de tus cargas de trabajo depende de la lectura del sistema de archivos de cgroup (/sys/fs/cgroup/...), asegúrate de que sean compatibles con la API de cgroupv2.
    • Asegúrate de que las herramientas de supervisión o de terceros sean compatibles con cgroupv2.
  • Si usas JDK (carga de trabajo de Java), te recomendamos que uses versiones que admiten por completo cgroupv2, lo que incluye JDK 8u372, JDK 11.0.16 o posterior, o JDK 15 o una versión posterior.

Verifica la configuración de cgroup

Cuando agregas una configuración del sistema de nodos, GKE debe volver a crear los nodos para implementar los cambios. Después de agregar la configuración a un grupo de nodos y volver a crear los nodos, puedes verificar la configuración nueva.

Puedes verificar la configuración de cgroup para los nodos de un grupo de nodos con gcloud CLI o la herramienta de línea de comandos de kubectl:

gcloud CLI

Verifica la configuración de cgroup de un grupo de nodos:

gcloud container node-pools describe POOL_NAME \
    --format='value(Config.effectiveCgroupMode)'

Reemplaza POOL_NAME por el nombre de tu grupo de nodos.

El resultado potencial es uno de los siguientes:

  • EFFECTIVE_CGROUP_MODE_V1: Los nodos usan cgroupv1.
  • EFFECTIVE_CGROUP_MODE_V2: Los nodos usan cgroupv2.

El resultado solo muestra la nueva configuración de cgroup después de que se vuelvan a crear los nodos del grupo de nodos. El resultado está vacío para los grupos de nodos de Windows Server, que no son compatibles con cgroup.

kubectl

A fin de verificar la configuración de cgroup para nodos en este grupo de nodos con kubectl, elige un nodo y conéctate a él mediante las siguientes instrucciones:

  1. Crea una shell interactiva con cualquier nodo del grupo de nodos. Reemplaza mynode en el comando por el nombre de cualquier nodo en el grupo de nodos.
  2. Identifica la versión de cgroup en nodos de Linux.

Opciones de configuración de página enorme de Linux

Puedes usar el archivo de configuración del sistema de nodos para usar las hugepages de la función del kernel de Linux.

Kubernetes admite páginas grandes en los nodos como un tipo de recurso, similar a la CPU o la memoria. Usa los siguientes parámetros a fin de indicar a tus nodos de Kubernetes que asignen previamente páginas enormes para el consumo por parte de los Pods. Para administrar el consumo de páginas enormes de tus pods, consulta Administra HugePages.

Para asignar previamente páginas enormes a tus nodos, especifica las cantidades y los tamaños. Por ejemplo, a fin de configurar tus nodos para asignar tres páginas enormes de 1 gigabyte y páginas enormes de 1,024 megabytes, usa una configuración del sistema de nodos como la que se muestra a continuación:

linuxConfig:
  hugepageConfig:
    hugepage_size2m: 1024
    hugepage_size1g: 3

Para usar páginas enormes, se aplican las siguientes limitaciones y requisitos:

  • Para garantizar que el nodo no esté ocupado por completo por páginas enormes, el tamaño general de las páginas grandes asignadas no puede exceder el 60% de la memoria total. Por ejemplo, con una máquina e2-standard-2 que tiene 8 GB de memoria, no puedes asignar más de 4.8 GB para páginas enormes.
  • Las páginas enormes de 1 gigabyte solo están disponibles en las máquinas A3, C2D, C3, C3A, C3D, C4, CT5E, CT5L, CT5LP, CT6E, H3, M2, M3 o Z3. de datos.

¿Qué sigue?