En este documento, se muestra cómo personalizar la configuración de tu nodo de Google Kubernetes Engine (GKE) con un archivo de configuración denominado configuración del sistema de nodos.
Una configuración del sistema de nodos es un archivo de configuración que proporciona una manera de ajustar un conjunto limitado de parámetros de configuración del sistema. En tu grupo de nodos, puedes usar una configuración del sistema de nodos para especificar parámetros de configuración personalizados para el agente del nodo de Kubernetes kubelet y para las configuraciones del kernel de Linux de nivel bajo sysctl.
En este documento, se detallan las configuraciones disponibles para una configuración del sistema de nodos y cómo aplicarlas a tus grupos de nodos de GKE Standard. Ten en cuenta que, debido a que los clústeres de GKE Autopilot tienen un entorno de nodos más administrado, sus opciones de configuración directa del sistema de nodos son limitadas en comparación con los grupos de nodos de GKE Standard.
Por qué usar configuraciones del sistema de nodos
Las configuraciones del sistema de nodos ofrecen los siguientes beneficios:
- Ajuste del rendimiento: Optimiza el rendimiento de la pila de red, la administración de memoria, la programación de la CPU o el comportamiento de E/S para aplicaciones exigentes, como el entrenamiento o la entrega de IA, bases de datos, servidores web de alto tráfico o servicios sensibles a la latencia.
- Fortalecimiento de la seguridad: Aplica parámetros de configuración de seguridad específicos a nivel del kernel o restringe ciertos comportamientos del sistema para reducir la superficie de ataque.
- Administración de recursos: Ajusta la forma en que
kubeletadministra los PIDs, el espacio en disco, la recolección de elementos no utilizados de imágenes o los recursos de CPU y memoria. - Compatibilidad de la carga de trabajo: Ayuda a garantizar que el entorno del nodo cumpla con los requisitos previos específicos para software especializado o aplicaciones más antiguas que requieren parámetros de configuración del kernel particulares.
Otras opciones para personalizar la configuración de los nodos
También puedes personalizar la configuración de tu nodo con otros métodos:
- Archivo de configuración del entorno de ejecución: Para personalizar un entorno de ejecución de contenedores de containerd en tus nodos de GKE, puedes usar un archivo diferente llamado archivo de configuración del entorno de ejecución. Para obtener más información, consulta Cómo personalizar la configuración de containerd en nodos de GKE.
- ComputeClass: Puedes especificar atributos de nodos en la especificación de ComputeClass de GKE. Puedes usar ComputeClasses, tanto en el modo Autopilot como en el modo estándar de GKE, en la versión 1.32.1-gke.1729000 y versiones posteriores de GKE. Para obtener más información, consulta Cómo personalizar la configuración del sistema de nodos.
- DaemonSets: También puedes usar DaemonSets para personalizar nodos. Para obtener más información, consulta Inicia automáticamente los nodos de GKE con DaemonSets.
Los nodos de Windows Server no admiten la configuración del sistema de nodos.
Antes de comenzar
Antes de comenzar, asegúrate de hacer lo siguiente:
- Instala las herramientas de línea de comandos:
- Si usas los ejemplos de gcloud CLI en este documento, asegúrate de instalar y configurar Google Cloud CLI.
- Si usas los ejemplos de Terraform, asegúrate de instalar y configurar Terraform.
- Otorga permisos: Necesitas los permisos de IAM adecuados para crear y actualizar clústeres y grupos de nodos de GKE, como
container.clusterAdmino un rol diferente con permisos equivalentes. - Planifica posibles interrupciones de la carga de trabajo: Las configuraciones de nodos personalizados se aplican a nivel del grupo de nodos. Por lo general, los cambios activan una actualización progresiva de los nodos del grupo, lo que implica volver a crear los nodos. Planifica posibles interrupciones de la carga de trabajo y usa presupuestos de interrupción de Pods (PDB) cuando sea apropiado.
- Haz una copia de seguridad y prueba todos los cambios: Siempre prueba los cambios de configuración en un entorno de desarrollo o de pruebas antes de aplicarlos a la producción. Los parámetros de configuración incorrectos pueden provocar inestabilidad en los nodos o errores en las cargas de trabajo.
- Revisa la configuración predeterminada de GKE: Las imágenes de nodos de GKE incluyen configuraciones predeterminadas optimizadas. Personaliza los parámetros solo si tienes una necesidad específica y comprendes el impacto de los cambios.
Usa una configuración de sistema de nodos en el modo GKE Standard
Cuando usas una configuración del sistema de nodos, usas un archivo YAML que contiene los parámetros de configuración para kubelet y el kernel de Linux. Si bien las configuraciones del sistema de nodos también están disponibles en el modo Autopilot de GKE, los pasos de este documento te muestran cómo crear y usar un archivo de configuración para el modo Estándar de GKE.
Para usar una configuración del sistema de nodos en el modo estándar de GKE, haz lo siguiente:
- Crea un archivo de configuración. Este archivo contiene tus configuraciones de
kubeletysysctl. - 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 la configuración de tu sistema de nodos en YAML. En el siguiente ejemplo, se agregan configuraciones para las opciones de kubelet y sysctl:
kubeletConfig:
cpuManagerPolicy: static
allowedUnsafeSysctls:
- 'kernel.shm*'
- 'kernel.msg*'
- 'kernel.sem'
- 'fs.mqueue*'
- 'net.*'
linuxConfig:
sysctl:
net.core.somaxconn: '2048'
net.ipv4.tcp_rmem: '4096 87380 6291456'
En este ejemplo, se aplica lo siguiente:
- El campo
cpuManagerPolicy: staticconfigurakubeletpara usar la política de administración de CPU estáticas. + El camponet.core.somaxconn: '2048'limita las tareas pendientessocket listen()a 2,048 bytes. - El campo
net.ipv4.tcp_rmem: '4096 87380 6291456'establece el valor mínimo, predeterminado y máximo del búfer de recepción de sockets de TCP en 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 la configuración del sistema de nodos. 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 la configuración del sistema de nodos, 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 de Standard
Después de crear la configuración del sistema de nodos, agrega la marca --system-config-from-file con 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 .
Crea un clúster con la configuración del sistema de nodos
Puedes agregar una configuración del sistema de nodos durante la creación del clúster con gcloud CLI o Terraform. Las siguientes instrucciones aplican la configuración del sistema de nodos al grupo de nodos predeterminado:
gcloud CLI
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ústerLOCATION: la zona o región de procesamiento del clúster.SYSTEM_CONFIG_PATH: La ruta de acceso al archivo que contiene tus configuraciones dekubeletysysctl
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.
Terraform
Para crear un clúster regional con una configuración del sistema de nodos personalizada a través de Terraform, consulta el siguiente ejemplo:
Si deseas obtener más información para usar Terraform, consulta Compatibilidad con Terraform para GKE.
Crea un grupo de nodos nuevo con la configuración del sistema de nodos
Puedes agregar una configuración del sistema de nodos cuando usas gcloud CLI o Terraform para crear un grupo de nodos nuevo.
En las siguientes instrucciones, se aplica la configuración del sistema de nodos a un grupo de nodos nuevo:
gcloud CLI
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 nodosCLUSTER_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 dekubeletysysctl
Terraform
Para crear un grupo de nodos con una configuración del sistema de nodos personalizada con Terraform, consulta el siguiente ejemplo:
Si deseas obtener más información para usar Terraform, consulta Compatibilidad con Terraform para GKE.
Actualiza la configuración del sistema de nodos de un grupo de nodos existente
Puedes actualizar la configuración del sistema de nodos de un grupo de nodos existente ejecutando el siguiente comando:
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 actualizarCLUSTER_NAME: El nombre del clúster que deseas actualizarLOCATION: la zona o región de procesamiento del clúster.SYSTEM_CONFIG_PATH: La ruta de acceso al archivo que contiene tus configuraciones dekubeletysysctl
Este cambio requiere que se vuelvan a crear los nodos, lo que puede causar interrupciones en tus cargas de trabajo en ejecución. Para obtener más información sobre este cambio específico, busca la fila correspondiente en la tabla de cambios manuales que vuelven a crear los nodos con una estrategia de actualización de nodos sin respetar las políticas de mantenimiento.
Para obtener más información sobre las actualizaciones de nodos, consulta Planifica las interrupciones de las actualizaciones de nodos.
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 creando un grupo de nodos, haz lo siguiente:
- Crea un archivo de configuración con la configuración que desees.
- Agrega la configuración a un grupo de nodos nuevo.
- Migra tus cargas de trabajo al grupo de nodos nuevo.
- Borra el grupo de nodos anterior.
Edita mediante la actualización de un grupo de nodos existente
Para editar la configuración del sistema de nodos de un grupo de nodos existente, sigue las instrucciones de la pestaña Actualizar grupo de nodos para agregar la configuración a un grupo de nodos. Cuando actualizas la configuración de un sistema de nodos y la nueva configuración anula la configuración del sistema existente del grupo de nodos, se deben volver a crear los nodos. 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 los campos 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, sigue estos pasos:
- Crea un grupo de nodos.
- Migra tus cargas de trabajo al grupo de nodos nuevo.
- Borra el grupo de nodos que tiene la configuración del sistema de nodos anterior.
Opciones de configuración de kubelet
En las tablas de esta sección, se describen las opciones de kubelet que puedes modificar.
Administración de CPU
En la siguiente tabla, se describen las opciones de administración de CPU para kubelet.
Parámetros de configuración de kubelet |
Restricciones | Parámetro de configuración predeterminado | Descripción |
|---|---|---|---|
cpuCFSQuota |
Debe ser true o false. |
true |
Este parámetro de 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 beneficioso 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 |
Debe ser una duración. | "100ms" |
Mediante este parámetro 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. |
Administración y expulsión de la memoria
En la siguiente tabla, se describen las opciones modificables para la administración y el descarte de memoria. En esta sección, también se incluye una tabla independiente que describe las opciones modificables para la marca evictionSoft.
Parámetros de configuración de kubelet |
Restricciones | Parámetro de configuración predeterminado | Descripción |
|---|---|---|---|
evictionSoft |
Es un mapa de nombres de indicadores. Para conocer las restricciones de valores, consulta la siguiente tabla. | none |
Este parámetro de configuración asigna nombres de indicadores a una cantidad o un porcentaje que define los umbrales de descarte flexible. Un umbral de desalojo temporal debe tener un período de gracia. El kubelet no expulsa los Pods hasta que se supera el período de gracia. |
evictionSoftGracePeriod |
Es un mapa de nombres de indicadores. Para cada nombre de indicador, el valor debe ser una duración positiva inferior a 5m. Las unidades de tiempo válidas son ns, us (o µs), ms, s o m. |
none |
Este parámetro de configuración asigna nombres de indicadores a duraciones que definen períodos de gracia para los umbrales de expulsión flexible. Cada umbral de desalojo temporal debe tener un período de gracia correspondiente. |
evictionMinimumReclaim |
Es un mapa de nombres de indicadores. Para cada nombre de indicador, el valor debe ser un porcentaje positivo inferior a 10%. |
none |
Este parámetro de configuración asigna nombres de indicadores a porcentajes que definen la cantidad mínima de un recurso determinado que kubelet recupera cuando realiza un desalojo de Pod. |
evictionMaxPodGracePeriodSeconds |
El valor debe ser un número entero entre 0 y 300. |
0 |
Este parámetro de configuración define, en segundos, el período de gracia máximo para la finalización del Pod durante el desalojo. |
En la siguiente tabla, se muestran las opciones modificables para la marca evictionSoft.
Las mismas opciones también se aplican a las marcas evictionSoftGracePeriod y evictionMinimumReclaim con diferentes restricciones.
kubelet de configuración |
Restricciones | Parámetro de configuración predeterminado | Descripción |
|---|---|---|---|
memoryAvailable |
El valor debe ser una cantidad mayor que 100Mi y menor que 50% de la memoria del nodo. |
none |
Este parámetro de configuración representa la cantidad de memoria disponible antes del descarte temporal. Define la cantidad del indicador memory.available en el kubelet . |
nodefsAvailable |
El valor debe estar entre 10% y 50%. |
none |
Este parámetro de configuración representa el nodo disponible antes del desalojo temporal. Define la cantidad del indicador nodefs.available en el kubelet . |
nodefsInodesFree |
El valor debe estar entre 5% y 50%. |
none |
Este parámetro de configuración representa los nodos inodefs que están libres antes del desalojo temporal. Define la cantidad del indicador nodefs.inodesFree en el kubelet . |
imagefsAvailable |
El valor debe estar entre 15% y 50%. |
none |
Este parámetro de configuración representa el imagefs disponible antes del desalojo temporal. Define la cantidad de señal de imagefs.available en el kubelet . |
imagefsInodesFree |
El valor debe estar entre 5% y 50%. |
none |
Este parámetro de configuración representa los nodos i de imagefs que están libres antes del desalojo temporal. Define la cantidad del indicador imagefs.inodesFree en el kubelet. |
pidAvailable |
El valor debe estar entre 10% y 50%. |
none |
Este parámetro de configuración representa los PIDs disponibles antes del desalojo temporal. Define la cantidad del indicador pid.available en el kubelet. |
singleProcessOOMKill
|
El valor debe ser true o false. |
true para nodos de cgroupv1 y false para nodos de cgroupv2 |
Este parámetro de configuración establece si los procesos del contenedor se cierran de forma individual o como grupo por falta de memoria.
Disponible en las versiones 1.32.4-gke.1132000, 1.33.0-gke.1748000 o posteriores de GKE. |
Administración de PID
En la siguiente tabla, se describen las opciones modificables para la administración de PIDs.
kubelet de configuración |
Restricciones | Parámetro de configuración predeterminado | Descripción |
|---|---|---|---|
podPidsLimit |
El valor debe estar entre 1024 y 4194304. |
none |
Esta configuración establece la cantidad máxima de ID de procesos (PID) que puede usar cada Pod. |
Logging
En la siguiente tabla, se describen las opciones de registro que se pueden modificar.
Parámetros de configuración de kubelet |
Restricciones | Parámetro de configuración predeterminado | Descripción |
|---|---|---|---|
containerLogMaxSize |
El valor debe ser un número positivo y un sufijo de unidad entre 10Mi y 500Mi, inclusive. |
10Mi |
Este parámetro de configuración controla el parámetro de configuración containerLogMaxSize de la política de rotación del registro de contenedores, que te permite configurar el tamaño máximo de cada archivo de registro. El valor predeterminado es 10Mi. Las unidades válidas son Ki, Mi y Gi. |
containerLogMaxFiles |
El valor debe ser un número entero entre 2 y 10, incluidos ambos. |
5 |
Este parámetro de configuración controla el parámetro de configuración containerLogMaxFiles de la política de rotación de archivos de registro de contenedores, que te permite configurar la cantidad máxima de archivos permitidos para cada contenedor, respectivamente. El valor predeterminado es 5. El tamaño total del registro (container_log_max_size*container_log_max_files) por contenedor no puede exceder el 1% del almacenamiento total del nodo. |
Recolección de elementos no utilizados de imágenes
En la siguiente tabla, se describen las opciones modificables para la recolección de elementos no utilizados de imágenes.
Parámetros de configuración de kubelet |
Restricciones | Parámetro de configuración predeterminado | Descripción |
|---|---|---|---|
imageGCHighThresholdPercent |
El valor debe ser un número entero entre 10 y 85 (ambos incluidos) y mayor que imageGcLowThresholdPercent. |
85 |
Este parámetro de configuración define el porcentaje de uso del disco por encima del cual se ejecuta la recolección de elementos no utilizados de imágenes. Representa el uso de disco más alto para el que se debe realizar la recolección de elementos no utilizados. El porcentaje se calcula dividiendo el valor de este campo por 100. |
imageGCLowThresholdPercent |
El valor debe ser un número entero entre 10 y 85 (ambos incluidos) y menor que imageGcHighThresholdPercent. |
80 |
Este parámetro de configuración define el porcentaje de uso del disco antes del cual nunca se ejecuta la recolección de elementos no utilizados de imágenes. Representa el uso de disco más bajo al que se puede realizar la recolección de elementos no utilizados. El porcentaje se calcula dividiendo el valor de este campo por 100. |
imageMinimumGcAge |
El valor debe ser una duración que no supere 2m. Las unidades de tiempo válidas son ns, us (o µs), ms, s, m o h. |
2m |
Este parámetro de configuración define la antigüedad mínima de una imagen sin usar antes de que se recopile la basura. |
imageMaximumGcAge |
El valor debe ser una duración de tiempo. | 0s |
Este parámetro de configuración define la antigüedad máxima que puede tener una imagen sin usar antes de que se recopile la basura. El valor predeterminado de este campo es Disponible en las versiones 1.30.7-gke.1076000, 1.31.3-gke.1023000 o posteriores de GKE. |
Extracción de imágenes
En la siguiente tabla, se describen las opciones modificables para la extracción de imágenes.
Parámetros de configuración de kubelet |
Restricciones | Parámetro de configuración predeterminado | Descripción |
|---|---|---|---|
maxParallelImagePulls |
El valor debe ser un número entero entre 2 y 5, inclusive. | 2 o 3 según el tipo de disco. |
Este parámetro de configuración define la cantidad máxima de extracciones de imágenes en paralelo. El valor predeterminado lo decide el tipo de disco de arranque. |
Operaciones inseguras y seguridad
En la siguiente tabla, se describen las opciones modificables para configurar la seguridad y controlar las operaciones no seguras.
Parámetros de configuración de kubelet |
Restricciones | Parámetro de configuración predeterminado | Descripción |
|---|---|---|---|
allowedUnsafeSysctls |
Es una lista de nombres o grupos de
|
none |
Este parámetro de configuración define una lista de entidades permitidas separada por comas de nombres o grupos de sysctl no seguros que se pueden establecer en los Pods.sysctl |
insecureKubeletReadonlyPortEnabled |
El valor debe ser un valor booleano: true o false. |
true |
Este parámetro de configuración inhabilita el kubelet puerto de solo lectura 10255 no seguro en cada grupo de nodos nuevo de tu clúster. Si estableces este parámetro de configuración en este archivo, no puedes usar un cliente de API de GKE para cambiar el parámetro de configuración a nivel del clúster. |
Administradores de recursos
Kubernetes ofrece un conjunto de administradores de recursos. Puedes configurar estos administradores de recursos para coordinar y optimizar la alineación de los recursos de los nodos para los Pods que están configurados con requisitos específicos para los recursos de CPU, dispositivos y memoria (páginas grandes).
En la siguiente tabla, se describen las opciones que se pueden modificar para los administradores de recursos.
Parámetros de configuración de kubelet |
Restricciones | Parámetro de configuración predeterminado | Descripción |
|---|---|---|---|
cpuManagerPolicy |
El valor debe ser none o static. |
none |
Este parámetro de 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.Establecer este valor en static permite que a los Pods que se encuentran en la clase de QoS Guaranteed y tienen solicitudes de CPU de número entero se les asignen CPU exclusivas. |
memoryManager.policy |
El valor debe ser None o Static. |
None |
Este parámetro de configuración controla la política del administrador de memoria de Si estableces este valor en Este parámetro de configuración es compatible con los clústeres cuyo plano de control ejecuta la versión 1.32.3-gke.1785000 o posterior de GKE. |
topologyManager |
El valor debe ser uno de los parámetros de configuración admitidos para cada uno de los campos respectivos. No puedes establecer el campo |
|
Estos parámetros de configuración controlan la configuración de Topology Manager de Puedes establecer la política y la configuración del alcance de forma independiente. Para obtener más información sobre estos parámetros de configuración, consulta Alcances y políticas del administrador de topología. Los siguientes recursos de GKE admiten este parámetro de configuración:
|
Opciones de configuración de Sysctl
Para ajustar el rendimiento de tu sistema, puedes modificar los parámetros del kernel de Linux. En las tablas de esta sección, se describen los distintos parámetros del kernel que puedes configurar.
Parámetros del sistema de archivos (fs.*)
En la siguiente tabla, se describen los parámetros modificables del sistema de archivos de Linux. Estos parámetros de configuración controlan el comportamiento del sistema de archivos de Linux, como los límites de identificadores de archivos y la supervisión de eventos.
Parámetro Sysctl |
Restricciones | Descripción |
|---|---|---|
fs.aio-max-nr |
Debe estar entre [65536, 4194304]. | Este parámetro de configuración define la cantidad máxima de solicitudes de E/S asíncronas en todo el sistema. |
fs.file-max |
Debe ser un valor entre [104857, 67108864]. | Este parámetro de configuración define la cantidad máxima de identificadores de archivos que puede asignar el kernel de Linux. |
fs.inotify.max_user_instances |
Debe estar entre [8192 y 1048576]. | Este parámetro de configuración define la cantidad máxima de instancias de inotify que puede crear un usuario. |
fs.inotify.max_user_watches |
Debe estar entre [8192 y 1048576]. | Este parámetro de configuración define la cantidad máxima de supervisores de inotify que un usuario puede crear. |
fs.nr_open |
Debe estar entre [1048576, 2147483584]. | Este parámetro de configuración define la cantidad máxima de descriptores de archivos que puede abrir un proceso. |
Parámetros del kernel (kernel.*)
En la siguiente tabla, se describen los parámetros modificables del kernel de Linux. Estos parámetros de configuración establecen las funcionalidades principales del kernel, incluida la asignación de memoria compartida.
| Parámetro de Sysctl | Restricciones | Descripción |
|---|---|---|
kernel.shmmni |
Debe estar entre [4096 y 32768]. | Este parámetro de configuración define la cantidad máxima de segmentos de memoria compartida en todo el sistema. Si no se establece este valor, se usará el valor predeterminado 4096. |
kernel.shmmax |
Debe estar entre [0, 18446744073692774399]. | Este parámetro de configuración define el tamaño máximo, en bytes, de un solo segmento de memoria compartida que permite el kernel. Este valor se ignora si es mayor que la cantidad real de RAM, lo que significa que se puede compartir toda la RAM disponible. |
kernel.shmall |
Debe estar entre [0, 18446744073692774399]. | Este parámetro de configuración define la cantidad total de páginas de memoria compartida que se pueden usar en el sistema al mismo tiempo. Una página tiene 4,096 bytes en la arquitectura AMD64 e Intel 64. |
kernel.perf_event_paranoid |
Debe estar entre [-1, 3]. | Este parámetro de configuración controla el uso del sistema de eventos de rendimiento por parte de usuarios sin privilegios y sin CAP_PERFMON. El valor predeterminado es 2 en el kernel. |
kernel.sched_rt_runtime_us |
Debe estar entre [-1, 1000000]. | Este parámetro de configuración define un límite global sobre la cantidad de tiempo que puede usar la programación en tiempo real. |
kernel.softlockup_panic |
Opcional (booleano). | Este parámetro de configuración controla si el kernel entra en pánico cuando se detecta un bloqueo temporal. |
kernel.yama.ptrace_scope |
Debe estar entre [0, 3]. |
Este parámetro de configuración define el alcance y las restricciones de la llamada al sistema
|
kernel.kptr_restrict |
Debe estar entre [0, 2]. | Este parámetro de configuración indica si se aplican restricciones a la exposición de direcciones del kernel a través de /proc y otras interfaces. |
kernel.dmesg_restrict |
Opcional (booleano). | Este parámetro de configuración indica si se impide que los usuarios sin privilegios usen dmesg(8) para ver los mensajes del búfer de registro del kernel. |
kernel.sysrq |
Debe estar entre [0, 511]. |
Este parámetro de configuración controla las funciones que se pueden invocar a través de la tecla SysRq. Entre los valores posibles, se incluyen los siguientes:
|
Parámetros de red (net.*)
En la siguiente tabla, se describen los parámetros de redes que se pueden modificar. Estos parámetros de configuración ajustan el rendimiento y el comportamiento de la pila de redes, desde los búferes de socket hasta el seguimiento de conexiones.
| Parámetro de Sysctl | Restricciones | Descripción |
|---|---|---|
net.core.busy_poll |
Cualquier número entero positivo, inferior a 2147483647. | Este parámetro de configuración define el tiempo de espera de sondeo ocupado de baja latencia para sondeo y selección. Representa el tiempo aproximado en µs para el bucle de espera activa de eventos. |
net.core.busy_read |
Cualquier número entero positivo, inferior a 2147483647. | Este parámetro de configuración define el tiempo de espera de la sondeo ocupado de baja latencia para las lecturas de sockets. Representa el tiempo aproximado en µs de espera en bucle ocupado para los paquetes en la cola del dispositivo. |
net.core.netdev_max_backlog |
Cualquier número entero positivo inferior a 2147483647. | Este parámetro de configuración define la cantidad máxima de paquetes en cola del lado de INPUT cuando la interfaz recibe paquetes más rápido de lo que el kernel puede procesarlos. |
net.core.rmem_default |
Cualquier número entero positivo, inferior a 2147483647. | Este parámetro de configuración define el tamaño predeterminado del búfer de socket de recepción, en bytes. |
net.core.rmem_max |
Cualquier número entero positivo, inferior a 2147483647. | Este parámetro de configuración define el tamaño máximo del búfer del socket de recepción, en bytes. |
net.core.wmem_default |
Cualquier número entero positivo inferior a 2147483647. | Este parámetro de configuración define el valor predeterminado, en bytes, del búfer de envío de sockets. |
net.core.wmem_max |
Cualquier número entero positivo inferior a 2147483647. | Este parámetro de configuración define el tamaño máximo del búfer de socket de envío, en bytes. |
net.core.optmem_max |
Cualquier número entero positivo, inferior a 2147483647. | Este parámetro de configuración define el tamaño máximo del búfer auxiliar permitido por socket. |
net.core.somaxconn |
Debe estar entre [128, 2147483647]. | Este parámetro de configuración define el límite de la acumulación de socket listen(), que se conoce en el espacio del usuario como SOMAXCONN. El valor predeterminado de este parámetro de configuración es 128. |
net.ipv4.tcp_rmem |
{min, default, max} (cada uno > 0, memoria en bytes). | Este parámetro de configuración define el tamaño mínimo, en bytes, del búfer de recepción que usan los sockets UDP en la moderación. El parámetro de configuración predeterminado es 1 página. |
net.ipv4.tcp_wmem |
{min, default, max} (cada uno > 0, memoria en bytes). | Este parámetro de configuración define el tamaño mínimo, en bytes, del búfer de envío que usan los sockets de UDP con moderación. El parámetro de configuración predeterminado es 1 página. |
net.ipv4.tcp_tw_reuse |
Debe ser un valor entre {0, 1}. | Este parámetro de configuración define si se permite la reutilización de sockets en el estado TIME_WAIT para las conexiones nuevas cuando es seguro desde el punto de vista del protocolo. El valor predeterminado es 0. |
net.ipv4.tcp_max_orphans |
Debe ser un valor entre [16384 y 262144]. | Este parámetro de configuración define la cantidad máxima de sockets TCP que no están asociados a ningún identificador de archivo del usuario. |
net.ipv4.tcp_max_tw_buckets |
Debe estar entre [4096, 2147483647]. | Este parámetro de configuración define la cantidad máxima de sockets en espera que el sistema puede mantener de forma simultánea. Si se supera este número, el socket de espera se destruye de inmediato y se imprime una advertencia. |
net.ipv4.tcp_syn_retries |
Debe estar entre [1, 127]. | Este parámetro de configuración define la cantidad de veces que se retransmite el SYN inicial para un intento de conexión TCP activa. |
net.ipv4.tcp_ecn |
Debe estar entre [0, 2]. | Este parámetro de configuración controla el uso de la Notificación de congestión explícita (ECN) por parte del protocolo TCP. ECN se usa solo cuando ambos extremos de la conexión TCP indican que la admiten. |
net.ipv4.tcp_mtu_probing |
Debe estar entre [0, 2]. |
Este parámetro de configuración controla el descubrimiento de la MTU de la ruta de la capa de fragmentación de TCP. Los valores admitidos son los siguientes:
|
net.ipv4.tcp_congestion_control |
Debe ser uno de los valores admitidos de la columna Description. | Este parámetro de configuración no es compatible cuando GKE Dataplane V2 está habilitado en el clúster. Los siguientes valores admitidos dependen del tipo de imagen:
|
net.ipv6.conf.all.disable_ipv6 |
Booleano. | Cambiar este valor es lo mismo que cambiar el parámetro de configuración conf/default/disable_ipv6 y todos los parámetros de configuración disable_ipv6 por interfaz al mismo valor. |
net.ipv6.conf.default.disable_ipv6 |
Booleano. | Este parámetro de configuración inhabilita el funcionamiento de IPv6. |
net.netfilter.nf_conntrack_acct |
Debe ser un valor entre {0, 1}. | Este parámetro de configuración habilita la contabilización del flujo de seguimiento de conexiones. El valor predeterminado es 0, lo que significa que el parámetro de configuración está inhabilitado. Disponible en las versiones 1.32.0-gke.1448000 y posteriores de GKE. |
net.netfilter.nf_conntrack_max |
Debe estar entre [65536, 4194304]. | Este parámetro de configuración define el tamaño de la tabla de seguimiento de conexiones. Si se alcanza el valor máximo, la nueva conexión fallará. Disponible en las versiones 1.32.0-gke.1448000 y posteriores de GKE. |
net.netfilter.nf_conntrack_buckets |
Debe estar entre [65536, 524288]. |
Este parámetro de configuración define el tamaño de la tabla hash. El parámetro de configuración recomendado es el resultado de la siguiente fórmula: Disponible en las versiones 1.32.0-gke.1448000 y posteriores de GKE. |
net.netfilter.nf_conntrack_tcp_timeout_close_wait |
Debe estar entre [60 y 3, 600]. |
Este parámetro de configuración define el período, en segundos, durante el cual las conexiones TCP pueden permanecer en el estado Disponible en las versiones 1.32.0-gke.1448000 y posteriores de GKE. |
net.netfilter.nf_conntrack_tcp_timeout_established |
Debe estar entre [600, 86400]. |
Este parámetro de configuración define la duración, en segundos, de las conexiones inactivas antes de que se borren automáticamente de la tabla de seguimiento de conexiones. Disponible en las versiones 1.32.0-gke.1448000 y posteriores de GKE. |
net.netfilter.nf_conntrack_tcp_timeout_time_wait |
Debe estar entre [1 y 600]. |
Este parámetro de configuración define el período, en segundos, durante el cual las conexiones TCP pueden permanecer en el estado Disponible en las versiones 1.32.0-gke.1448000 y posteriores de GKE. |
Parámetros de memoria virtual (vm.*)
En la siguiente tabla, se describen los parámetros modificables del subsistema de memoria virtual. Estos parámetros de configuración administran el subsistema de memoria virtual, que controla cómo el kernel maneja la memoria, el intercambio y el almacenamiento en caché del disco.
Parámetro sysctl |
Restricciones | Descripción |
|---|---|---|
vm.max_map_count |
Debe estar entre [65536, 2147483647]. | Este archivo define la cantidad máxima de áreas de asignación de memoria que puede tener un proceso. |
vm.dirty_background_ratio |
Debe ser un valor entre [1 y 100]. | Este parámetro de configuración define el porcentaje de memoria del sistema que se puede llenar con páginas sucias antes de que los subprocesos de vaciado del kernel en segundo plano comiencen a escribir en el disco. El valor debe ser inferior al valor del campo vm.dirty_ratio. |
vm.dirty_background_bytes |
Debe estar entre [0, 68719476736]. |
Este parámetro de configuración define la cantidad de memoria sucia en la que los subprocesos de vaciado del kernel en segundo plano comienzan la escritura diferida. Ten en cuenta que |
vm.dirty_expire_centisecs |
Debe estar entre [0 y 6000]. | Este parámetro de configuración define la antigüedad máxima, en centésimas de segundo, que los datos no guardados pueden permanecer en la memoria antes de que los subprocesos de vaciado del kernel los escriban en el disco. |
vm.dirty_ratio |
Debe ser un valor entre [1 y 100]. | Este parámetro de configuración define el porcentaje de memoria del sistema que se puede llenar con páginas sucias antes de que los procesos que realizan escrituras se vean obligados a bloquearse y escribir datos sucios de forma síncrona. |
vm.dirty_bytes |
Debe estar entre [0, 68719476736]. |
Este parámetro de configuración define la cantidad de memoria sucia en la que un proceso que genera escrituras en el disco comienza a escribir en el disco por sí mismo. El valor mínimo permitido para Ten en cuenta que |
vm.dirty_writeback_centisecs |
Debe estar entre [0 y 1, 000]. | Este parámetro de configuración define el intervalo, en centésimas de segundo, en el que los subprocesos de vaciado del kernel se activan para escribir datos antiguos no guardados en el disco. |
vm.overcommit_memory |
Debe ser un valor entre {0, 1, 2}. |
Este parámetro de configuración determina la estrategia del kernel para controlar el exceso de asignación de memoria. Los valores son los siguientes:
|
vm.overcommit_ratio |
Debe estar entre [0 y 100]. | Este parámetro de configuración define el porcentaje de RAM física que se permite para la sobreasignación cuando el valor del campo vm.overcommit_memory se establece en 2. |
vm.vfs_cache_pressure |
Debe estar entre [0 y 100]. | Este parámetro de configuración ajusta la preferencia del kernel para recuperar la memoria que se usa para las memorias caché de dentry (directorio) y de inode. |
vm.swappiness |
Debe estar entre [0 y 200]. | Este parámetro de configuración controla la tendencia del kernel a mover procesos de la memoria física al disco de intercambio. El valor predeterminado es 60. |
vm.watermark_scale_factor |
Debe estar entre [10 y 3, 000]. | Este parámetro de configuración controla la agresividad de kswapd. Define la memoria restante antes de que se active kswapd y la memoria que se debe liberar antes de que se suspenda. El valor predeterminado es 10. |
vm.min_free_kbytes |
Debe ser un valor entre [67584 y 1048576]. | Este parámetro de configuración define la memoria libre mínima antes de que se produzca un error de OOM. El valor predeterminado es 67584. |
Para obtener más información sobre los valores admitidos para cada marca sysctl, consulta la documentación de gcloud CLI sobre --system-config-from-file.
Los diferentes espacios de nombres de Linux pueden tener valores únicos para una marca sysctl determinada, mientras que otros pueden ser globales para todo el nodo. La actualización de las opciones de sysctl con una configuración del sistema de nodos ayuda a garantizar que sysctl se aplique de forma global en el nodo y en cada espacio de nombres, de modo 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
El entorno de ejecución del contenedor y kubelet usan cgroups del 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 Standard nuevos que ejecutan la versión 1.26 y posteriores, y cgroupv1 para los grupos de nodos que ejecutan versiones anteriores a la 1.26. En el caso de los grupos de nodos que se crearon 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. cgroupv1 no es compatible con máquinas Arm.
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. La actualización de un grupo de nodos existente que usa cgroupv1 a la versión 1.26 no cambia el parámetro de configuración a cgroupv2.
Los grupos de nodos existentes que ejecutan una versión anterior a la 1.26 y que no incluyen una configuración de cgroup personalizada seguirán usando cgroupv1.
Para cambiar el parámetro de configuración, debes especificar de forma explícita cgroupv2 para el grupo de nodos existente.
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: Usacgroupv1en el grupo de nodos.CGROUP_MODE_V2: Usacgroupv2en 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 la imagen de nodo de Container-Optimized OS con containerd o Ubuntu con 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 decgroupv2. - Si usas herramientas de supervisión o de terceros, asegúrate de que sean compatibles con
cgroupv2. - Si usas cargas de trabajo de Java (JDK), te recomendamos que uses versiones que admitan 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 para 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 posible resultado es uno de los siguientes:
EFFECTIVE_CGROUP_MODE_V1: Los nodos usancgroupv1EFFECTIVE_CGROUP_MODE_V2: Los nodos usancgroupv2
El resultado solo muestra la nueva configuración del cgroup después de que se vuelven a crear los nodos en el grupo de nodos. El resultado está vacío para los grupos de nodos de Windows Server, que no admiten cgroup.
kubectl
Para usar kubectl y verificar la configuración de cgroup para nodos en este grupo de nodos, selecciona un nodo y conéctate a él siguiendo estas instrucciones:
- Crea una shell interactiva con cualquier nodo del grupo de nodos. En el comando, reemplaza
mynodepor el nombre de cualquier nodo en el grupo de nodos. - Identifica la versión de cgroup en nodos de Linux.
Opciones de configuración de páginas enormes de Linux
Puedes usar un archivo de configuración del sistema de nodos para preasignar hugepages. Kubernetes admite páginas grandes preasignadas como un tipo de recurso, similar a la CPU o la memoria.
Para usar páginas enormes, se aplican las siguientes limitaciones y requisitos:
- Para garantizar que el nodo no esté ocupado por completo por hugepages, el tamaño general de las hugepages asignadas no puede exceder ninguno de los siguientes valores:
- En máquinas con menos de 30 GB de memoria: El 60% de la memoria total Por ejemplo, en una máquina e2-standard-2 con 8 GB de memoria, no puedes asignar más de 4.8 GB para páginas enormes.
- En máquinas con más de 30 GB de memoria: El 80% de la memoria total. Por ejemplo, en las máquinas c4a-standard-8 con 32 GB de memoria, las páginas enormes no pueden superar los 25.6 GB.
- Las páginas enormes de 1 GB solo están disponibles en los tipos de máquinas A3, C2D, C3, C3D, C4, C4A, C4D, CT5E, CT5LP, CT6E, H3, M2, M3, M4 o Z3.
En la siguiente tabla, se describen los parámetros de configuración modificables para las páginas grandes de Linux.
| Parámetro de configuración | Restricciones | Valor predeterminado | Descripción |
|---|---|---|---|
hugepage_size2m |
Es un recuento de números enteros. Sujeto a los límites de asignación de memoria descritos anteriormente. | 0 |
Este parámetro de configuración preasigna una cantidad específica de páginas enormes de 2 MB. |
hugepage_size1g |
Es un recuento de números enteros. Sujeto a las limitaciones de memoria y tipo de máquina descritas anteriormente. | 0 |
Este parámetro de configuración preasigna una cantidad específica de páginas enormes de 1 GB. |
Páginas enormes transparentes (THP)
Puedes usar un archivo de configuración del sistema de nodos para habilitar la compatibilidad con Transparent HugePage del kernel de Linux. Con THP, el kernel asigna automáticamente páginas enormes a los procesos sin necesidad de una asignación previa manual.
En la siguiente tabla, se describen los parámetros modificables para el THP.
| Parámetro de configuración | Valores admitidos | Valor predeterminado | Descripción |
|---|---|---|---|
transparentHugepageEnabled |
|
UNSPECIFIED |
Este parámetro de configuración controla si se habilita THP para la memoria anónima. |
transparentHugepageDefrag |
|
UNSPECIFIED |
Este parámetro de configuración define la configuración de desfragmentación para THP. |
THP está disponible en la versión 1.33.2-gke.4655000 de GKE o posterior. También está habilitado de forma predeterminada en los grupos de nodo TPU nuevos en la versión 1.33.2-gke.4655000 de GKE o posterior. THP no se habilita cuando actualizas grupos de nodos existentes a una versión compatible o posterior.