Ich mache nicht mehr viel manuelle Systemadministration. Ich betrachte meine Infrastruktur als programmierbare Einheit und behandle sie als solche, indem ich Systeme mit Tools konfiguriere, die das Konfigurationsmanagement, die Wartung von EC2-Knoten usw. automatisieren. Tools in meiner Toolbox:
- Ruby (meine Lieblingsskript- / Werkzeugsprache)
- Git (Versionskontrolle)
- Opscodes Chef (geschrieben in Ruby) (1)
- Capistrano (Ad-hoc-Massenwartung)
- Zum Beispiel die EC2-API-Tools von Amazon und die Image-Wartung.
- Das AWS-Juwel von Rightscale (Ruby-Bindungen für EC2)
(1) - Offenlegung, ich arbeite für Opscode. Andere Werkzeuge füllen den Raum wie die Puppe von Reductive Lab.
Ich bündle ein AMI, wenn ich einen Knoten so aufgebaut habe, wie ich es für eine bestimmte Funktion benötige. Wenn ich beispielsweise einen Rails-App-Server erstelle, werden alle erforderlichen Pakete installiert, um beim Erstellen Zeit zu sparen.
Wenn alles andere fehlschlägt, melde ich mich mit SSH bei Systemen an. Ich habe viele Jahre lang manuelle Systemadministration betrieben, das ist ein alter Hut.
Verwenden Sie eine Art Fenstersystem und Remotedesktop, um auf die Box zuzugreifen, oder ist alles eine Befehlszeile?
Ich installiere keine GUI auf Servern, es sei denn, ein Paket ist abhängig und wird automatisch installiert.
Gibt es ein Äquivalent dazu in der Linux-Welt? (Dateien übertragen)
Normalerweise mache ich zwei Arten der Dateiübertragung / Dateipflege.
- Paketinstallation
- Konfigurationsdateien
Für plattformeigene Pakete verwende ich das Standard-Paketverwaltungstool wie APT oder YUM. Für Quellinstallationen (Something.tar.gz) lade ich normalerweise über wget herunter.
Konfigurationsdateien sind normalerweise ERB-Vorlagen, die von Chef verwaltet werden.
Ich verwende SSH und SCP / SFTP, um Dateien manuell zu übertragen.
Führen Sie Ihre Konfigurationsänderungen / Skript-Optimierungen direkt auf dem Computer durch? Oder haben Sie auf Ihrer lokalen Box etwas eingerichtet, um diese Dateien remote zu bearbeiten? Oder bearbeiten Sie sie einfach aus der Ferne und übertragen sie dann bei jedem Speichern?
Ich behalte alles, was mit der Verwaltung von Systemen zu tun hat, in einem Softwaresteuerungs-Repository. Hier ist mein typischer Workflow beim Aktualisieren der Konfiguration auf einem oder mehreren Systemen. Ich starte von meiner lokalen Workstation aus.
- Ziehen Sie aus dem Master-Git-Repository, um die Änderungen anderer zu erhalten.
- Bearbeiten Sie die Datei (en) lokal (z. B. aktualisieren Sie eine Konfigurationsdatei).
- Übernehmen Sie die Änderung, drücken Sie zum Master.
- Ziehen Sie auf dem Chef-Server (über SSH angemeldet) die letzte Änderung ab, die ich gerade festgeschrieben habe.
- Stellen Sie die Konfiguration an der entsprechenden Stelle auf dem Chef-Server bereit (ich verwende hierfür Rake).
- Chef-Kunden werden in regelmäßigen Abständen ausgeführt, sodass sie alle 30 Minuten Änderungen vornehmen. Wenn ich sofort etwas brauche, führe ich Chef-Client manuell aus.
- Überprüfen Sie die Änderung!
Wie verschieben Sie Dateien zwischen EC2 und Ihrer lokalen Umgebung hin und her? FTP? Eine Art zugeordnetes Laufwerk über VPN?
Es gibt einige Speicherorte, an denen Dateien, die ich auf EC2-Knoten verwende, möglicherweise gespeichert werden.
- Chef Server. Konfigurationsvorlagen hauptsächlich, einige kleine Pakete auch.
- GitHub. Wir speichern unseren Code (Open Source-Projekte) auf GitHub. EC2-Knoten können dies leicht erreichen (z. B. zum Auschecken der neuesten Version von etwas).
- Amazon S3 Eimer. Einige Dinge werden in einem Eimer aufbewahrt.
Ich arbeite viel in EC2 und teste hauptsächlich Umgebungen und Änderungen. Aufgrund meiner Tools und meines Workflows verbringe ich mehr Zeit mit der Arbeit an Dingen, die mir wirklich wichtig sind, und weniger mit dem Umgang mit einzelnen Dateien und dem Nachdenken über bestimmte Konfigurationen.