Server Installation/Ansible

Aus Opennet
Version vom 18. Januar 2015, 19:30 Uhr von Lars (Diskussion | Beiträge)

(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Wechseln zu: Navigation, Suche

Inhaltsverzeichnis

Überblick

ansible ist eine Konfigurationsmanagement-Software basierend auf Python. Es benötigt für die Client-Konfiguration lediglich eine ssh-Verbindung. Auf der Client-Seite ist keine spezifische Software erforderlich.

Innerhalb von Opennet setzen wir ansible für die Konfiguration der UGW-Server ein.

Die Konfigurationsverwaltung wird üblicherweise durch Server/heartofgold angewandt.



Konfiguration

  • alle Details liegen im Home-Verzeichnis des Nutzers ansible auf Server/heartofgold unter ~/ansible
  • zu verwaltende Server werden in der Datei hosts eingetragen und eventuell verschiedenen Gruppen zugeordnet
  • einzelne Konfigurationsaufgaben werden in Playbooks zusammengefasst
  • es findet keinerlei automatische Verteilung von Änderungen statt - die Anwendung von Playbooks erfolgt ausschließlich durch manuelle Auslösung

Ersteinrichtung

Die folgenden Schritte sind auszuführen, wenn die ansible-Konfigurationsverwaltung von einem neuen/zusätzlichen Host/Account aus durchgeführt werden soll.

  1. Paket installieren: aptitude install ansible (die darauffolgenden Aktionen können von einem Nutzer-Account durchgeführt werden)
  2. auf allen zu konfigurierenden Servern muss der ssh-Schlüssel des ausführenden Nutzers importiert werden
  3. git-Repository auschecken: git clone git@dev.on-i.de:ansible.git
  4. ansible-Konfiguration auf das git-Repository-Verzeichnis ausrichten:
    1. cp /etc/ansible/ansible.cfg ~/.ansible.cfg
    2. die Pfade in den folgenden Einstellungen anpassen:
Einstellung Beispielwert
hostfile ~/ansible/hosts
roles_path ~/ansible/roles
remote_user root
log_path ~/ansible/ansible.log

git-Repository

Die Konfiguration (Dateien, Schlüssel, Abläufe) wird in einem git-Repository (siehe Opennet DEV) verwaltet.


Verzeichnisstruktur

Im ansible-Verzeichnis gibt es mehrere Dateien und Unterverzeichnisse.

Globale Struktur

hosts
Diese Datei enthält das sogenannte Inventory von ansible.
Hier werden alle Hosts und Gruppen, sowie globale Variable (in der Sektion [all:vars]) definiert.
playbook-*.yml
Ein Playbook enthält Variablendefinitionen, sowie eine Liste von Aufgaben/Zuständen, die auf bestimmte Hosts angewandt werden sollen.
Der Dateiname einer playbook-Datei spielt keine Rolle - die Playbooks werden ausschließlich manuell ausgeführt.
host_vars/
Für jeden Host kann hier eine gleichnamige Datei (HOSTNAME.yml) abgelegt werden, die Host-spezifische Einstellungen (vor allem: IPs und Interface-Namen) enthält.
roles/
Eine Rolle ist in ansible eine Zusammenstellung von Konfigurationen, die auf gewisse Hosts angewandt werden sollen.
Beispielsweise können alle notwendigen Einstellungen für den Betrieb eines DNS-Servers in einer eigenen Rolle zusammengefasst werden.

Rollen-spezifische Struktur

Unterhalb jedes roles-Unterverzeichnis ist die folgende Struktur üblich:

defaults/main.yml
Variablen, die innerhalb dieser Rolle für alle Hosts gelten sollen. Sie können durch Host-spezifische Variablen überschrieben werden.
handlers/main.yml
Im Anschluss an die Änderungen von Dateien müssen unter Umständen Dienste neugestartet werden. Diese Handler werden nur bei tatsächlichen Änderungen ausgeführt.
files/
Per Konvention werden in diesem Verzeichnis zu kopierende Dateien abgelegt. Das copy-Modul verwendet diesen Pfad automatisch als Präfix für relative Pfadangaben.
templates/
Per Konvention werden in diesem Verzeichnis Dateien abgelegt, die Template-Platzhalter enthalten. Das template-Modul verwendet diesen Pfad automatisch als Präfix für relative Pfadangaben.
tasks/
Per Konvention beinhaltet die Datei main.yml in diesem Verzeichnis include-Direktiven zum Einbinden weiterer Dateien in diesem Unterverzeichnis.
Die task-Dateien enthalten die Beschreibungen von herzustellenden Konfigurationen (vorhandene Pakete, Dateien, usw.).

Variablen

Host-spezifische, Rollen-spezifische oder globale Variablen können an verschiedenen Stellen mit unterschiedlicher Priorität definiert werden (siehe [http://docs.ansible.com/playbooks_variables.html#variable-precedence-where-should-i-put-a-variable ansible-Dokumentation).

Globale Variablen
hosts-Datei in der [all:vars]-Sektion
Rollen-spezifische Variablen für alle Hosts
roles/*/defaults/
Host-spezifische Variablen
host_vars/


Übliche Aufgaben

  • alle Konfigurationen anwenden: ansible-playbook ~/ansible/playbook-ugw-server.yml
  • einen einzigen Server konfigurieren: ansible-playbook ~/ansible/playbook-ugw-server.yml --limit=HOSTNAME.on-i.de
  • auf anwendbare Änderungen prüfen ohne sie auszuführen: ansible-playbook ~/ansible/playbook-ugw.yml --limit=HOSTNAME.on-i.de --check
  • Informationen (inkl. interner Variablen) eines Hosts anzeigen: ansible -m setup HOSTNAME.on-i.de
  • Dokumentation zu einem ansible-Modul anzeigen: ansible-doc synchronize


Anwendungspolicy

Folgende Schritte sind für eine sichere Verwendung des Werkzeugs Konfigurationverwaltung zu verwenden:

  1. kleinschrittige Änderungen vornehmen
  2. Änderungen im ersten Versuch nur auf einen einzigen Host anwenden (z.B. ansible-playbook .... --limit HOSTNAME)
  3. die Ausgabe des ansible-Playbook-Laufs sorgfältig auf erwartete und unerwartete Änderungen prüfen
  4. die Wirksamkeit der Änderungen auf dem Host prüfen (funktionieren die Dienste noch?)
  5. Änderungen auf alle Hosts anwenden
  6. Wirksamkeit und Funktionsfähigkeit der Dienste prüfen
  7. Änderungen via git committen


Rollen-Details

basic

Diese Rolle ist für alle opennet-Server geeignet. Im Wesentlichen sorgt es für eine einfache Verteilung der ssh-Schlüssel von Administratoren und Maschinen-Accounts (Backup, Konfigurationsverwaltung).

Vorbereitung eines neuen Hosts

  1. ssh-Schlüssel des ansible-Nutzers manuell importieren
  2. Host in die hosts-Datei eintragen

Ablauf

  • Übertragung von ssh-Schlüsseln
  • typische Server-Pakete installieren
  • munin-node für Monitoring vorkonfigurieren

ugw-server

Diese Rolle ist für die neuen UGW-Server (ab 2015) geeignet (zur Zeit: Server/erina und Server/megumi).

Vorbereitung eines neuen Hosts

  1. siehe basic-Rolle
  2. eine Datei für den Host unter host_vars/ erstellen (basierend auf einer vorhandenen UGW-Datei in diesem Verzeichnis)
  3. openvpn-Schlüssel und -Zertifikate erzeugen und unter files/openvpn/host-certs/ugw bzw. files/openvpn/host-certs/users anlegen (oder provisorisch die Verzeichnisse eines anderen Hosts symlinken)

Hinweise

Wähle einen geeigneten Zeitpunkt für die Anwendung dieser Konfiguration aus. Vor allem die Änderung der openvpn-Konfiguration führt zu einer kurzzeitigen Trennung aller Cliensts.

Ablauf

  • Netzwerk-Konfiguration
  • DNS-Server (bzw. Zonen-Slave)
  • OLSRD
  • Firewall
  • OpenVPN (Konfiguration, Skripte, Zertifikate)
  • OpenVPN-Statusseite (z.B. http://erina.opennet-initiative.de/vpnstatus)
  • opennet-spezifische Munin-Plugins für UGW-Server
  • Dateien für Download-Tests erzeugen
Meine Werkzeuge
Namensräume

Varianten
Aktionen
Start
Opennet
Kommunikation
Karten
Werkzeuge