Todavía me estoy poniendo de pie con kubernetes. Tenemos una aplicación basada en Spring Boot con ~17 microservicios que se ejecutan en Kubernetes 1.4.2 en AWS. Cuando ejecuto esta aplicación en un clúster de AWS de trabajadores medianos de 4 m3, todos mis contenedores están en el rango de 200 a 300 MB de uso de memoria en reposo (con un par de excepciones). Para la producción, instalé el mismo conjunto de servicios en trabajadores grandes de 4 m4 e instantáneamente mi memoria se movió hasta 700-1000 MB de memoria en los mismos contenedores con especificaciones prácticamente idénticas. Estoy tratando de averiguar quién es la parte infractora aquí: Springboot, Docker o Kubernetes.
¿Alguien ha visto un comportamiento como este antes?
Sé que puedo limitar los recursos usando los límites de Kubernetes, pero realmente no quiero hacerlo dado que sé que la aplicación puede funcionar sin problemas en máquinas más pequeñas y ocupa menos espacio. Solo busco algún consejo sobre dónde podría estar el problema.
EDITAR: Una pieza más o información pertinente. Estoy usando CoreOS estable 1298.6.0 como imagen del sistema operativo host.
En mi opinión, el problema es que sus procesos dentro del contenedor ven la RAM total del host disponible como la RAM disponible para ellos.
Si usa una instancia más grande, la JVM intentará usar aún más RAM. Debe intentar limitar el montón de su máquina virtual Java con -Xmx300m (ajuste este valor con lo que necesita su aplicación). Te recomiendo leer este artículo donde se explica de una manera fácil y limpia.