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 realizar personalizaciones adicionales con los siguientes métodos:
- Reemplaza los componentes del sistema, como en Personaliza registros de Cloud Logging para GKE con Fluentd
- Usa 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:
- Crea un archivo de configuración. Este archivo contiene tus configuraciones de
kubelet
ysysctl
. - 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
configurakubelet
para usar la política de administración de CPU estáticas.net.core.somaxconn: '2048'
limita las tareas pendientessocket 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 \
--system-config-from-file=SYSTEM_CONFIG_PATH
Reemplaza lo siguiente:
CLUSTER_NAME
: El nombre de tu clústerSYSTEM_CONFIG_PATH
: La ruta de acceso al archivo que contiene tus configuraciones dekubelet
ysysctl
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 \
--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.SYSTEM_CONFIG_PATH
: La ruta de acceso al archivo que contiene tus configuraciones dekubelet
ysysctl
Actualiza un grupo de nodos
gcloud container node-pools update POOL_NAME \
--cluster=CLUSTER_NAME \
--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 actualizarSYSTEM_CONFIG_PATH
: La ruta de acceso al archivo que contiene tus configuraciones dekubelet
ysysctl
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:
- 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
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:
- 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 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 none o static
|
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 true o false
|
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. |
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:
net.core.busy_poll
net.core.busy_read
net.core.netdev_max_backlog
net.core.rmem_max
net.core.wmem_default
net.core.wmem_max
net.core.optmem_max
net.core.somaxconn
net.ipv4.tcp_rmem
net.ipv4.tcp_wmem
net.ipv4.tcp_tw_reuse
net.ipv6.conf.all.disable_ipv6
net.ipv6.conf.default.disable_ipv6
vm.max_map_count
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 nuevos que ejecutan la versión 1.26 y posteriores, y cgroupv1
para las versiones anteriores a la 1.26.
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 la versión 1.26 no cambia la configuración a cgroupv2
, ya que los grupos de nodos existentes creados con una versión anterior a la 1.26 (sin una configuración de cgroup personalizada) continúan 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
: Usacgroupv1
en el grupo de nodos.CGROUP_MODE_V2
: Usacgroupv2
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 la CLI de gcloud408.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 decgroupv2
.- Asegúrate de que las herramientas de supervisión o de terceros sean compatibles con
cgroupv2
.
- Asegúrate de que las herramientas de supervisión o de terceros sean compatibles con
- 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.
A fin de verificar la configuración de cgroup para nodos en este grupo de nodos, elige un nodo y conéctate a él mediante las siguientes instrucciones:
- 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. - 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.