Solución de problemas de saturación de memoria en clústeres AKS
En este artículo se describen los métodos para solucionar problemas de saturación de memoria. La saturación de memoria se produce si al menos una aplicación o proceso necesita más memoria que un host de contenedor puede proporcionar o si el host agota su memoria disponible.
Requisitos previos
- La herramienta de línea de comandos kubectl de Kubernetes. Para instalar kubectl mediante la CLI de Azure, ejecute el comando az aks install-cli .
Síntomas
En la tabla siguiente se describen los síntomas comunes de saturación de memoria.
Síntoma | Description |
---|---|
Pods no programables | No se pueden programar pods adicionales si el nodo está cerca de su límite de memoria establecido. |
Expulsión de pods | Si un nodo se queda sin memoria, kubelet puede expulsar pods. Aunque el plano de control intenta volver a programar los pods expulsados en otros nodos que tienen recursos, no hay ninguna garantía de que otros nodos tengan suficiente memoria para ejecutar estos pods. |
Nodo no listo | La saturación de memoria puede provocar kubelet y containerd dejar de responder, lo que finalmente provoca problemas de preparación del nodo. |
Eliminación de memoria insuficiente (OOM) | Se produce un problema de OOM si la expulsión del pod no puede evitar un problema de nodo. |
Lista de comprobación de solución de problemas
Para reducir la saturación de memoria, use herramientas de supervisión eficaces y aplique procedimientos recomendados.
Paso 1: Identificación de nodos que tienen saturación de memoria
Use cualquiera de los métodos siguientes para identificar los nodos que tienen saturación de memoria:
En un explorador web, use la característica Container Insights de AKS en Azure Portal.
En una consola, use la herramienta de línea de comandos de Kubernetes (kubectl).
Container Insights es una característica de AKS que supervisa el rendimiento de la carga de trabajo del contenedor. Para más información, consulte Habilitación de Container Insights para el clúster de Azure Kubernetes Service (AKS).
En Azure Portal, busque y seleccione Servicios de Kubernetes.
En la lista de servicios de Kubernetes, seleccione el nombre del clúster.
En el panel de navegación del clúster, busque el encabezado Supervisión y seleccione Conclusiones.
Establezca el valor de intervalo de tiempo adecuado.
Seleccione la pestaña Nodos .
En la lista Métrica , seleccione Conjunto de trabajo memoria (calculado desde Allocatable) .
En el selector de percentiles, establezca el ejemplo en Max y, a continuación, seleccione la etiqueta de columna % máximo dos veces. Esta acción ordena los nodos de tabla por el porcentaje máximo de memoria usada, de mayor a menor.
Dado que el primer nodo tiene el uso de memoria más alto, seleccione ese nodo para investigar el uso de memoria de los pods que se ejecutan en el nodo.
Nota:
El porcentaje de uso de CPU o memoria para pods se basa en la solicitud de CPU especificada para el contenedor. No representa el porcentaje del uso de cpu o memoria para el nodo. Por lo tanto, examine el uso real de cpu o memoria en lugar del porcentaje de uso de CPU o memoria para pods.
Ahora que ha identificado los pods que usan memoria alta, puede identificar las aplicaciones que se ejecutan en el pod.
Paso 2: Revisar los procedimientos recomendados para evitar la saturación de memoria
Revise la tabla siguiente para obtener información sobre cómo implementar procedimientos recomendados para evitar la saturación de memoria.
Procedimiento recomendado | Description |
---|---|
Uso de solicitudes y límites de memoria | Kubernetes proporciona opciones para especificar el tamaño mínimo de memoria (solicitud) y el tamaño máximo de memoria (límite) de un contenedor. Al configurar límites en pods, es posible evitar la presión de memoria en el nodo. Asegúrese de que los límites agregados de todos los pods que se ejecutan no superen la memoria disponible del nodo. Esta situación se denomina sobrecommitción. El programador de Kubernetes asigna recursos basados en solicitudes y límites establecidos a través de calidad de servicio (QoS). Sin límites adecuados, el programador podría programar demasiados pods en un solo nodo. Esto podría hacer caer el nodo. Además, aunque kubelet expulsa pods, dará prioridad a los pods en los que el uso de memoria supere sus solicitudes definidas. Se recomienda establecer la solicitud de memoria cerca del uso real. |
Habilitación del escalador automático de pod horizontal | Al escalar el clúster, puede equilibrar las solicitudes entre muchos pods para evitar la saturación de la memoria. Esta técnica podría reducir la superficie de memoria en el nodo específico. |
Uso de etiquetas antiafinidad | En escenarios en los que la memoria no esté delimitada por diseño, es posible usar selectores de nodo y etiquetas de afinidad o antiafinidad, que pueden aislar la carga de trabajo en nodos específicos. Mediante el uso de etiquetas de antiafinidad, puede impedir que otras cargas de trabajo programen pods en estos nodos. Esto reducirá el problema de saturación de memoria. |
Elección de máquinas virtuales de SKU más altas | Las máquinas virtuales (VM) que tienen más memoria de acceso aleatorio (RAM) son más adecuadas para controlar el uso elevado de memoria. Para usar esta opción, deberá crear un nuevo grupo de nodos, acordonar los nodos (hacer que no se puedan programar) y purgar el grupo de nodos existente. |
Aislamiento de cargas de trabajo del sistema y del usuario | Se recomienda ejecutar las aplicaciones en un grupo de nodos de usuario. Esta configuración garantizará que pueda aislar los pods específicos de Kubernetes en el grupo de nodos del sistema y mantener el rendimiento del clúster. |
Más información
Más información sobre los procedimientos recomendados de Azure Kubernetes Service (AKS)
Supervisión del rendimiento del clúster de Kubernetes con Container Insights
Aviso de declinación de responsabilidades sobre la información de terceros
Los productos de otros fabricantes que se mencionan en este artículo han sido creados por compañías independientes de Microsoft. Microsoft no ofrece ninguna garantía, ya sea implícita o de otro tipo, sobre la confiabilidad o el rendimiento de dichos productos.
Aviso de declinación de responsabilidades sobre la información de contacto de terceros
Microsoft proporciona información de contacto de otros proveedores para ayudarle a encontrar información adicional sobre este tema. Esta información de contacto puede cambiar sin previo aviso. Microsoft no garantiza la precisión de esta información de contacto de terceros.
Ponte en contacto con nosotros para obtener ayuda
Si tiene preguntas o necesita ayuda, cree una solicitud de soporte o busque consejo en la comunidad de Azure. También puede enviar comentarios sobre el producto con los comentarios de la comunidad de Azure.