Kubernetes: limitación de la CPU para un conjunto de pods

CorePress2024-01-24  8

Tengo una aplicación basada en Java que consta de varios pods (digamos 4) cuya licencia se otorga por la suma de milicores (digamos que hemos comprado 2000 mC de licencias). La aplicación se ejecuta en un host de clúster con 4000 mC para admitir la memoria necesaria para la aplicación. La aplicación está en ráfagas, por lo que cada módulo querrá utilizar 2000 mC en algún momento, pero no al mismo tiempo. Si el límite de la CPU se establece en 2000 mC por pod, entonces, para más de 4 pods, nuestra responsabilidad de licencia sería de 8000 mC, aunque en realidad la capacidad del host la limitaría a 4000 mC. Esto sigue siendo el doble de las licencias que hemos pagado. Si limitamos cada pod a 500 mC para asegurarnos de no exceder nunca los 2000 mC y permanecer dentro del límite de nuestra licencia, los pods carecen de recursos suficientes.

¿Hay alguna manera de limitar la CPU para un grupo de¿Pods permitir que cualquier pod explote hasta el límite máximo sin permitirles colectivamente exceder el máximo?



------------------------------------

Una buena estrategia aquí sería jugar con las solicitudes y limitar el parámetro de recursos.

Como ejemplo para su caso, puede utilizar la siguiente configuración

recursos.solicitudes.cpu - 750mC recursos.limites.cpu - 2000mC

Esto asignará 3000 mC (740 x 4) de CPU en el nodo, lo que permitirá 1000 mC adicionales para que la CPU explote.

Referencia: https://kubernetes.io/docs/tasks/configure-pod-container/assign-cpu-resource/#motivation-for-cpu-requests-and-limits

2

Lamentablemente, esto rompería el acuerdo de licencia, ya que cada módulo debe alcanzar una temperatura de 2000 mC y eso requeriría una licencia de 8000 mC. Se necesita alguna agrupación de programación a la que se pueda aplicar un límite entre un pod y un host.

- D. Baillie

28/03/2021 a las 18:55

Ya veo, por lo que entendí del último comentario esque se le facturará el límite de CPU según la licencia y no lo que realmente solicita. En ese caso, sería mejor limitar el número de pods a un máximo de 2.

Vishalsaugat

28/03/2021 a las 23:08



------------------------------------

Mi sugerencia sería habilitar el escalado automático del pod. Hay 2 tipos:

Escalador automático de pods horizontal (HPA): si sus pods son idénticos y no necesita los 4 a la vez, implemente HPA para pods. Con esto, puede mantener una cantidad mínima de pods que necesita y luego escalarlos al número máximo que desee en función de métricas como CPU, utilización de memoria, etc. HPA

Cápsula verticalEscalado automático (VPA): puede implementar VPA utilizando la administración de recursos proporcionada por Kubernetes. Puede agregar el parámetro resources.requests.cpu para iniciar su pod y, en caso de que la utilización aumente, puede limitarlo usando el parámetro resources.limits.cpu. Gestión de recursos

La combinación de los dos métodos anteriores será ideal en su caso.

1

Los cuatro pods son partes diferentes de la aplicación que tiene una licencia general de 2000 mC. Todos funcionan en paralelo, pero cada uno requiere alcanzar una temperatura de 2000 mC a diferentes temperaturas.veces.

- D. Baillie

28/03/2021 a las 18:56

Su guía para un futuro mejor - libreflare
Su guía para un futuro mejor - libreflare