Verwenden von Containern mit SQL Server für Linux
Container unterstützen Organisationen dabei, flexible und skalierbare Installationen von SQL Server zu erstellen.
Wide World Importers unterstützt umfangreiche Datenbankworkloads, für die eine flexible und skalierbare Hostingarchitektur erforderlich ist. Sie möchten die Möglichkeit des Hostens von SQL Server in virtuellen Umgebungen wie Virtual Machines (VMs) und Containern auswerten.
Hier lernen Sie, für eine Datenbank zwischen Containern und VMs zu wählen.
Vergleich von VMs und Containern
Virtualisierung ist eine Technik, mit der Administratoren mehrere virtuelle Server auf einem einzelnen physischen Server hosten. Mit der Virtualisierung können Sie problemlos zusätzliche Instanzen bereitstellen, z. B. von SQL Server, ohne zusätzliche Hardware kaufen und installieren zu müssen. Es gibt zwei gängige Ansätze zur Virtualisierung:
- VMs: Bei der Verwendung von VMs ist jede Instanz ein vollständiger virtueller Server mit eigenem Betriebssystem und eigener Hardware.
- Container: Bei der Verwendung von Containern nutzt jede Instanz ein Betriebssystem und Hardwareressourcen gemeinsam mit dem Hostcomputer.
Sowohl VMs als auch Container bieten eine isolierte Umgebung, in der Anwendungen wie SQL Server so ausgeführt werden, als befänden sie sich auf einem separaten physischen Computer.
VMs sind größer und ihre Erstellung dauert länger, aber da sie über ein eigenes Betriebssystem verfügen, verwenden sie eine andere Konfiguration und Hardware als der Hostcomputer. Sie können VMs auch mit unterschiedlichen Betriebssystemen auf demselben Host kombinieren. So können Sie beispielsweise auf einem Linux-Host eine VM installieren, auf der Linux und Apache zum Hosten einer Website ausgeführt werden. Auf einer anderen VM können Sie Windows und SQL Server zum Hosten einer Datenbank ausführen.
Container sind kleiner, sodass sie viel schneller als VMs geladen werden. Wenn auf Ihrem Host jedoch beispielsweise Linux Ubuntu ausgeführt wird, müssen alle Container auf diesem Computer dieselbe Version von Ubuntu ausführen. Auf einem Linux-Host könnten Sie einen Container installieren, auf dem Linux und Apache ausgeführt werden, aber Ihr Datenbankcontainer muss auch Linux ausführen. Dies ist nur möglich, wenn Sie SQL Server 2017 oder höher ausführen.
Auf dem Hostcomputer müssen Sie Software wie Hyper-V oder Virtual Box installieren, um VMs zu hosten. Für Container können Sie das Docker-System, CRI-O, rkt und andere Containerhosts verwenden.
Gründe für die Verwendung virtueller Computer
Es gibt immer noch Situationen, in denen Container nicht die beste Lösung sind. Da Container nur unter einem Betriebssystem ausgeführt werden und Systemressourcen gemeinsam nutzen, spielt die Sicherheit eine wichtige Rolle. Wenn ein Angreifer Superuser-Berechtigungen erlangt, können einige Einflussfaktoren dazu führen, dass er Zugriff auf die Anwendungen erhält. In Containern müssen Anwendungen auf demselben Betriebssystem wie der Hostcomputer ausgeführt werden. Sie können Linux-basierte Anwendungen nicht in Containern unter Windows ausführen. Mit VMs hosten Sie einen Linux-Computer unter Windows oder einen Windows-Computer unter macOS und haben so mehr Flexibilität. Bei Verwendung von VMs können Sie mehrere Anwendungen mit enger Integration auf einem einzigen virtuellen Computer hosten. Container hosten üblicherweise nur einzelne Anwendungen.
VMs sind weniger effizient als Container. Auf einem bestimmten Hardwaresatz können Sie mindestens doppelt so viele Anwendungen in Containern ausführen wie mit VMs. Ein virtueller Computer verwendet mehr Ressourcen, da er zur Unterstützung des Gastbetriebssystems eine vollständige Kopie des Betriebssystems und virtualisierte Versionen der gesamten Hardware benötigt.
Gründe für die Verwendung von Containern
Container haben im Vergleich einen geringeren Ressourcenbedarf und ermöglichen Ihnen, Apps mit entsprechend niedrigerer Ressourcennutzung zu packen. Da die Container von nur einem Betriebssystem gehostet werden, ist der Verwaltungsaufwand geringer. Statt alle Gastbetriebssysteme auf allen VMs müssen Sie nur ein Betriebssystem reparieren und aktualisieren. Die Container sind kleiner und unkomplizierter. Daher können sie in Sekunden gestartet werden und nicht in Minuten, die zum Starten einer VM erforderlich sind.
Orchestrierung
Zum Orchestrieren von Containern können Sie Docker Swarm, Kubernetes und andere Lösungen verwenden. Orchestratoren überwachen Apps, ermöglichen das Skalieren von Apps mithilfe von Containern und bieten zu einem gewissen Grad eine Notfallwiederherstellung. Weil Microsoft Tools und Beispiele für die Verwendung von Kubernetes bietet, ist es eine gute Wahl, SQL Server für Linux in einem Container unterzubringen. Ein Containerimage für SQL Server für Linux für die Verwendung mit Kubernetes ist verfügbar.
SQL Server für Linux im Container
Ein Problem bei Datenbanken, die in Containern ausgeführt werden, ist die beständige Speicherung. Sie müssen einen Speicherort außerhalb des Containers bereitstellen, in dem die Datenbank Datenbankdateien beibehalten kann. Dann sind Änderungen für alle Container in einem Cluster verfügbar. Wenn Sie Kubernetes verwenden, können Sie für diesen Speicherort ein persistentes Volume verwenden.
Erstellen Sie zunächst ein persistentes Volume, und fügen Sie dann einen Anspruch auf ein persistentes Volume (Persistent Volume Claim, PVC) hinzu. Erstellen Sie ein Bereitstellungsmanifest für SQL Server für Linux, das das von Microsoft erstellte mssql-server-linux
-Containerimage verwendet. Das Manifest enthält auch Definitionen für den PVC und einen Lastenausgleich für den Dienst, um eine einheitliche IP-Adresse zu gewährleisten. Erstellen Sie die Bereitstellung, und überprüfen Sie, ob SQL Server innerhalb eines Pods ausgeführt wird. Nach Abschluss dieses Setups startet Kubernetes eine neue Instanz, wenn der Knoten ausfällt. Ein einfacher Test besteht darin, den Pod zu löschen und zu überprüfen, ob automatisch ein neuer gestartet wird.