Mejores prácticas para escalamiento y planificación de capacidad: ¿solo VM? ¿VM+Contenedor? ¿Solo contenedor? Grupo ? ¿Algo más?

Mejores prácticas para escalamiento y planificación de capacidad: ¿solo VM? ¿VM+Contenedor? ¿Solo contenedor? Grupo ? ¿Algo más?

(No puedo encontrar una pregunta similar que ya haya sido respondida, pero tal vez no uso las buenas palabras porque soy un estudiante de francés;))
La respuesta más cercana a lo que estoy buscando es:Mejores prácticas de topología de hardware de aplicaciones web escalablespero no responde todo

He creado una pequeña nube privada (Openstack) en la que ejecuto máquinas virtuales KVM, la mayoría de las veces una máquina virtual por dominio/sitio web, para mis docenas de sitios web y también para algunos clientes.
Planeo probar si puedo evolucionar a una "nube híbrida", ejecutando algunas cosas dentro de mi nube y otras en EC2, por lo que quiero saber si mi "forma de hacerlo" es la más adecuada para mi uso.
Esas máquinas virtuales ejecutan CoreOS, que luego ejecutan diferentes servicios Docker (un contenedor para Nginx, un contenedor para pgsql, etc.). Si un servicio comienza a ser demasiado "corto" en algo, entonces creo una VM más grande, copio la VM antigua a la VM más grande y elimino la anterior, o creo una VM dedicada para el servicio que necesito (por ejemplo, una segunda VM dedicada a Nginx para manejar más conexiones).

Sin embargo, me pregunto si no estoy haciendo las cosas mal.
Elegí usar este "modelo" porque quierofuerteaislamiento entre los diferentes dominios/clientes, porque en aquel entonces quería jugar y acostumbrarme más a Docker, y porque considero que Docker es una de las formas más efectivas de implementar servicios rápidamente.

¿Debería preferirsolo use máquinas virtuales(por lo que no hay contenedores) con una VM por servicio (en lugar de una VM por dominio)?
O¿Debería usar en su lugar contenedores solo?¿Separar los diferentes servicios y ejecutarlos todos juntos en mis nodos? ¿Docenas y docenas de contenedores de diferentes servicios y diferentes clientes? Entonces, ¿cómo puedo aislar de forma eficaz los diferentes dominios/clientes? ¿Y luego cómo puedo escalar esos servicios? ¿Simplemente agregando más nodos?
¿O debería crear un grupo de máquinas virtuales grandes o máquinas básicas y luego usarlas paracrear un gran clúster CoreOS¿Cuál debería poder crecer al agregarle más nodos de metal desnudo? Entonces se aplica la misma pregunta que para los contenedores.

Lo siento si mi pregunta parece demasiado tonta o novata o no adecuada, pero prefiero hacerla ahora que cuando será demasiado tarde para dar un paso atrás;)

Cualquier sugerencia es bienvenida :)

Y

Respuesta1

Está totalmente bien usar ambas máquinas virtuales.ycontenedores, especialmente en este tipo de escenario.

Las máquinas virtuales proporcionan una capa de aislamiento segura que es barata y costosa: - es barata en mano de obra, porque no es necesario trabajar muy duro para lograr una buena seguridad con las máquinas virtuales; - Es costoso en recursos, porque la sobrecarga de las máquinas virtuales puede ser significativa, especialmente para servicios pequeños que requieren cantidades modestas de RAM.

(El "impuesto a la virtualización" puede considerarse una pequeña constante; para los servicios grandes, esa constante es insignificante, pero para los servicios pequeños, se convierte en una fracción significativa de la huella total).

Los contenedores, por otro lado, le proporcionan una forma económica y eficiente.aislamiento de softwarey método de implementación (en el sentido de que puede implementar varios contenedores uno al lado del otro sin preocuparse por versiones conflictivas).

Además, si desea implementar una nube híbrida (es decir, pasar de una nube privada a una pública), los contenedores son una forma muy sencilla de unir ambos entornos, abstrayendo sus diferencias.

Mi estrategia personal (suponiendo que entiendo correctamente sus necesidades) sería aislar a los inquilinos con máquinas virtuales y confiar en una nube privada simple (OpenStack u otra), implementar en contenedores y mover esos contenedores entre su nube privada y una pública. nube según sea necesario. Por supuesto, puede redimensionar sus máquinas virtuales (en cualquier nube) para adaptarse a las fluctuaciones en los requisitos de recursos.

información relacionada