Establecimiento de las especificaciones del contenedor
Escenario
CCE le permite establecer límites de recursos para contenedores agregados durante la creación de cargas de trabajo. Puede solicitar y limitar las cuotas de CPU y memoria utilizadas por cada pod en una carga de trabajo.
Significados
- Request: El sistema programa un pod para el nodo que cumple con los requisitos para el despliegue de carga de trabajo en función del valor de solicitud.
- Limit: El sistema limita los recursos utilizados por la carga de trabajo en función del valor límite.
Si un nodo tiene suficientes recursos, el pod de este nodo puede usar más recursos de los solicitados, pero no más que limitados.
Por ejemplo, si establece la solicitud de memoria de un contenedor en 1 GiB y el valor límite en 2 GiB, un pod se programa en un nodo con CPU de 8 GiB sin ningún otro pod en ejecución. En este caso, el pod puede usar más de 1 GiB de memoria cuando la carga es pesada, pero el uso de memoria no puede exceder los 2 GiB. Si un proceso en un contenedor intenta usar los recursos más de 2 GiB, el núcleo del sistema intenta terminar el proceso. Como resultado, se produce un error de OOM.
Al crear una carga de trabajo, se recomienda establecer los límites superior e inferior de los recursos de CPU y memoria. Si no se establecen los límites de recursos superior e inferior para una carga de trabajo, una pérdida de recursos de esta carga de trabajo hará que los recursos no estén disponibles para otras cargas de trabajo desplegadas en el mismo nodo. Además, las cargas de trabajo que no tienen límites de recursos superiores e inferiores no se pueden supervisar con precisión.
Descripción de configuración
En los servicios de producción reales, la relación recomendada de Request a Limit es de aproximadamente 1:1.5. Para algunos servicios sensibles, la proporción recomendada es 1:1. Si el Request es demasiado pequeño y el Limit es demasiado grande, los recursos de nodo se comprometen en exceso. Durante los picos de servicio, la memoria o la CPU de un nodo se puede utilizar. Como resultado, el nodo no está disponible.
- Cuotas de CPU:
Tabla 1 Descripción de las cuotas de CPU Parámetro
Descripción
CPU request
Número mínimo de núcleos de CPU requeridos por un contenedor. Los recursos se programan para el contenedor en función de este valor. El contenedor se puede programar para este nodo solo cuando el total de CPU disponible en el nodo es mayor o igual que el número de aplicaciones de CPU en contenedores.
CPU limit
Número máximo de núcleos de CPU disponibles para un contenedor.
Configuración recomendada
CPU real disponible de un nodo ≥ Suma de los límites de CPU de todos los contenedores en el nodo actual ≥ Suma de las solicitudes de CPU de todos los contenedores en el nodo actual. Puede ver las CPU disponibles reales de un nodo en la consola de CCE (Resource Management > Nodes > Allocatable).
- Cuotas de memoria:
Tabla 2 Descripción de las cuotas de memoria Parámetro
Descripción
Memory request
Cantidad mínima de memoria requerida por un contenedor. Los recursos se programan para el contenedor en función de este valor. El contenedor se puede programar para este nodo solamente cuando la memoria total disponible en el nodo es mayor o igual que el número de aplicaciones de memoria en contenedores.
Memory Limit
Cantidad máxima de memoria disponible para un contenedor. Cuando el uso de memoria excede el límite de memoria configurado, la instancia puede reiniciarse, lo que afecta al uso normal de la carga de trabajo.
Configuración recomendada
Memoria real disponible de un nodo ≥ Suma de los límites de memoria de todos los contenedores del nodo actual ≥ Suma de las peticiones de memoria de todos los contenedores del nodo actual. Puede ver la memoria disponible real de un nodo en la consola de CCE (Resource Management > Nodes > Allocatable).
Los recursos asignables se calculan basándose en el valor Request de solicitud de recurso, que indica el límite superior de recursos que pueden solicitarse por los pods en este nodo, pero no indica los recursos disponibles reales del nodo (para más detalles, véase Ejemplo). La fórmula de cálculo es la siguiente:
- CPU asignable = CPU total - CPU solicitada de todos los pods - CPU reservada para otros recursos
- Memoria asignable = Memoria total - Memoria solicitada de todos los pods - Memoria reservada para otros recursos
Ejemplo
Suponga que un clúster contiene un nodo con 4 núcleos de CPU y 8 GiB de memoria. Se han desplegado dos pods (pod 1 y pod 2) en el clúster. Pod 1 sobresuscribe recursos (es decir, Limit > Request). Las especificaciones de los dos pods son las siguientes:
Pod |
Solicitud de CPU |
Límite de CPU |
Solicitud de memoria |
Límite de memoria |
---|---|---|---|---|
Pod 1 |
1 núcleo |
2 núcleos |
2 GiB |
4 GiB |
Pod 2 |
2 núcleos |
2 núcleos |
2 GiB |
2 GiB |
El uso de CPU y memoria del nodo es el siguiente:
- CPUs asignables = 4 núcleos (1 núcleo solicitado por el pod 1 + 2 núcleos solicitados por el pod 2) = 1 núcleo
- Memoria asignable = 8 GiB – (1 GiB solicitado por el pod 1 + 2 GiB solicitado por el pod 2) = 5 GiB
En este caso, el resto de 1 núcleo de 5 GiB puede ser utilizado por el siguiente nuevo pod.
Si el pod 1 está bajo carga pesada durante las horas pico, usará más CPU y memoria dentro del límite. Por lo tanto, los recursos asignables reales son menores que 1 núcleo de 5 GiB.