Best Practices für Skalierung und Kapazitätsplanung: Nur VM? VM+Container? Nur Container? Cluster? Etwas anderes?

Best Practices für Skalierung und Kapazitätsplanung: Nur VM? VM+Container? Nur Container? Cluster? Etwas anderes?

(Ich kann keine ähnliche Frage finden, die bereits beantwortet wurde, aber vielleicht verwende ich nicht die richtigen Worte, da ich Französisch studiere ;))
Die Antwort, die meiner Frage am nächsten kommt, ist:Bewährte Vorgehensweisen für die skalierbare Hardwaretopologie von Webanwendungenaber es beantwortet nicht alles

Ich habe eine kleine private Cloud (Openstack) erstellt, auf der ich KVM-VMs ausführe, meistens eine VM pro Domäne/Website, für meine Dutzende von Websites und auch für einige Kunden.
Ich habe vor zu testen, ob ich zu einer „Hybrid-Cloud“ übergehen kann, bei der einige Dinge in meiner Cloud und andere auf EC2 laufen. Ich möchte also herausfinden, ob meine Vorgehensweise für meinen Einsatzzweck am besten geeignet ist.
Auf diesen VMs läuft CoreOS, das wiederum verschiedene Docker-Dienste ausführt (ein Container für Nginx, ein Container für pgsql usw.). Wenn einem Dienst etwas zu „knapp“ wird, erstelle ich entweder eine größere VM, kopiere die alte VM auf die größere VM und lösche die alte, oder ich erstelle eine dedizierte VM für den benötigten Dienst (zum Beispiel eine zweite VM für Nginx, um mehr Verbindungen zu handhaben).

Ich frage mich jedoch, ob ich nicht etwas falsch mache.
Ich habe mich für dieses "Modell" entschieden, weil ich möchtestarkIsolation zwischen den verschiedenen Domänen/Clients, weil ich damals mit Docker herumspielen und mich mehr damit vertraut machen wollte und weil ich Docker für eine der effektivsten Möglichkeiten halte, um schnell Dienste bereitzustellen.

Sollte ich liebernur VMs verwenden(also keine Container) mit einer VM pro Dienst (anstatt einer VM pro Domäne)?
Odersollte ich stattdessen nur Container verwendendie verschiedenen Dienste zu trennen und sie alle gemischt in meinen Knoten auszuführen? Dutzende und Dutzende von Containern mit verschiedenen Diensten und verschiedenen Clients? Wie kann ich dann die verschiedenen Domänen/Clients effektiv isolieren? Und wie skaliere ich diese Dienste dann? Einfach mehr Knoten hinzufügen?
Oder sollte ich einen Cluster aus großen VMs oder Bare-Metal-Maschinen erstellen und diese dann verwenden, umErstellen Sie einen großen CoreOS-Clusterwelches durch das Hinzufügen weiterer Bare-Metal-Knoten wachsen können sollte? Dann gilt die gleiche Frage wie für Container.

Entschuldigen Sie, wenn meine Frage zu dumm oder zu neulinghaft oder unpassend erscheint, aber ich stelle sie lieber jetzt, als wenn es für einen Rückzieher zu spät ist ;)

Alle Vorschläge sind willkommen :)

Y

Antwort1

Es ist völlig in Ordnung, beide VMs zu verwendenUndContainer, insbesondere in diesem Szenario.

VMs stellen eine sichere Isolationsschicht bereit, die sowohl günstig als auch teuer ist: - Sie erfordern wenig Arbeitsaufwand, da Sie sich nicht sehr anstrengen müssen, um mit VMs eine gute Sicherheit zu erreichen. - Sie sind ressourcenintensiv, da der Overhead von VMs erheblich sein kann, insbesondere bei kleinen Diensten, die nur bescheidene Mengen an RAM benötigen.

(Die „Virtualisierungssteuer“ kann als kleine Konstante betrachtet werden; bei großen Diensten ist diese Konstante vernachlässigbar, bei kleinen Diensten macht sie jedoch einen erheblichen Anteil des gesamten Fußabdrucks aus.)

Container hingegen bieten Ihnen eine kostengünstige und effizienteSoftwareisolierungund Bereitstellungsmethode (in dem Sinne, dass Sie mehrere Container nebeneinander bereitstellen können, ohne sich über widersprüchliche Versionen Gedanken machen zu müssen).

Wenn Sie darüber hinaus eine Hybrid Cloud implementieren möchten (also einen Überlauf von einer privaten Cloud zu einer öffentlichen), stellen Container eine sehr einfache Möglichkeit dar, beide Umgebungen zu überbrücken und ihre Unterschiede zu abstrahieren.

Meine persönliche Strategie (vorausgesetzt, ich verstehe Ihre Anforderungen richtig) wäre, Mandanten mit VMs zu isolieren und auf eine einfache private Cloud (OpenStack oder andere) zu setzen, in Containern bereitzustellen und diese Container nach Bedarf zwischen Ihrer privaten Cloud und einer öffentlichen Cloud zu verschieben. Sie können Ihre VMs (in beiden Clouds) natürlich neu dimensionieren, um Schwankungen im Ressourcenbedarf Rechnung zu tragen.

verwandte Informationen