%20automatisieren%3F.png)
Wie kann ich die Serverinstallation automatisieren? Welche Infrastruktur/Systeme passen zu unseren Anforderungen?
Wir haben über 10 physische Server mit über 100 VMs, hauptsächlich LAMP. Nicht zu viele, aber auch nichts, was alleine weiterarbeiten kann. Alle Server verfügen über eine KVM-Virtualisierung. Wir hosten verschiedene maßgeschneiderte Anwendungen für unsere Kunden, die wir häufig ändern. Dies ist also keine einzelne Anwendung, die skaliert werden muss. Projektteams arbeiten direkt mit Kunden und mit VMs und das ist eine Voraussetzung.
Das Problem, mit dem wir regelmäßig konfrontiert werden, besteht darin, dass die Neuinstallation einer VM/Maschine schwierig wird, da niemand die jüngsten Änderungen daran kontrolliert. Dies birgt ein Instabilitätsrisiko, die Leute schieben es so lange wie möglich auf und die Probleme werden mit der Zeit größer.
Ich möchte mindestens alle 3 Monate und bei Bedarf ein Neuinstallationsverfahren einrichten. Die Neuinstallation sollte mit einem Code-Repository und einem Backup beginnen. Dies sollte keine VM-Duplikation sein.
Wir schätzen, dass uns dies im aktuellen Setup alle drei Monate etwa sechs Mannmonate kosten würde, wenn wir es manuell erledigen würden. Wie können wir diesen Zeitaufwand reduzieren und gleichzeitig die Wiederholbarkeit des Prozesses erhöhen?
Die Frage ist, welche Software uns bei der Automatisierung dieser Aufgabe helfen kann. Sie sollte so leicht wie möglich sein. Wir brauchen keine automatisierte Knotenzuweisung. Wir müssen nur Neuinstallationen so weit wie möglich automatisieren. Wir gehen davon aus, dass jede Neuinstallation von Menschen überwacht wird.
Unsere Knoten sind größtenteils LAMP-Knoten mit zwei Systemen mit über 1 TB strukturierten DB-Daten, mehreren >200 GB und etwa 50 kleinen, benutzerdefinierten VMs. Wir können problemlos eine geplante Ausfallzeit für jedes System einplanen, sodass dies keine Frage der Hochverfügbarkeit während der Neuinstallation ist.
Wir müssen die Neuinstallation nur so weit wie möglich automatisieren.
Antwort1
Sie benötigen ein Konfigurationsmanagement-Framework wie Ansible, Saltstack, Puppet oder Chef.
Dies ist das Tool, das zum Verwalten und Anwenden von Konfigurationen verwendet wird. Die Auswahl des eigentlichen Tools ist jedoch ein kleiner Teil des Projekts.
Sie müssen den Prozess entwerfen und bereitstellen, bei dem alle Änderungen an der Infrastruktur über dieses Tool verwaltet werden.
Dafür braucht man:
- Schulung der Mitarbeiter im Umgang mit dem Tool
- Ändern der Systemarchitektur, sodass Änderungen nicht ohne das Tool vorgenommen werden können
- Umgang mit dem Widerstand gegen die Veränderung der grundlegenden Arbeitsweise der Menschen
Sie sollten auch eine Vereinheitlichung der Software-Stack-Infrastruktur in Betracht ziehen.
Wenn jede VM eine etwas andere Softwarekonfiguration hat, haben Sie entweder
- viel doppelter Code in Ihrem Konfigurationsmanagementcode für verschiedene Installationen
- komplexe Logik zur Auswahl, wie welche Konfiguration angewendet wird
Jeder dieser Faktoren verursacht einen erheblichen Wartungsaufwand und das Endergebnis könnte genauso schmerzhaft sein wie Ihre aktuelle Situation.
Antwort2
Verfügt Ihre Cloud über einen API-Schlüssel?
Die meisten Clouds haben LAMP-Bilder mit einem Klick, z. B.
Vultr:https://www.vultr.com/apps/lamp/
Digitaler Ozean:https://marketplace.digitalocean.com/apps/lamp
Linode:https://www.linode.com/docs/guides/lamp-stack-marketplace-app/
Wenn nicht, ist VestaCP meine absolute Wahlhttps://vestacp.com/install/
Beide fügen Apache-Backend, Nginx-Frontend, MySQL/MariaDB/Postgres und PHP/PHP-FPM hinzu. Auch alles Optionale.
Für Updates würde ich einen separaten Server erstellen und einen gemeinsamen öffentlichen SSH-Schlüssel dort ablegen, den /root/.ssh/authorized_keys
der separate Server hat und der sich automatisch bei jedem Server anmelden kann, etwa so:
INSTANCES=(
10.0.0.5
10.0.0.6
10.0.0.7
...
)
for INSTANCE in "${INSTANCES[@]}"; do
ssh root@${INSTANCE} /bin/bash -c "apt update -y && apt upgrade -y"
done
Das ist so ziemlich Terraform, Kubernetes usw. zum Selbermachen.
Auf GitHub gibt es außerdem zahlreiche Cloud-spezifische Anleitungen, zum Beispiel:
Noch einer von Digital Ocean:https://github.com/ethanbeyer/DigitalOcean-Droplet-Setup
Ein AWS:https://github.com/elionaz/aws-LAMP/blob/master/install_lamp.sh