This commit is contained in:
Mathias Schneider
2026-04-01 13:35:27 +02:00
parent 82d7e0e888
commit 07b79e33fa
8 changed files with 920 additions and 0 deletions
+271
View File
@@ -0,0 +1,271 @@
# 🧩 Was ist Ansible?
**Ansible** ist ein Open-Source-Tool zur **Automatisierung von IT-Aufgaben**. Es wird vor allem genutzt für:
* **Konfigurationsmanagement** (Server einrichten)
* **Deployment** (Software ausrollen)
* **Orchestrierung** (komplexe Abläufe steuern)
👉 Einfach gesagt:
Mit Ansible kannst du **wiederholbare Aufgaben automatisieren**, die sonst manuell auf Servern ausgeführt werden müssten.
💡 Besonderheit:
Ansible ist **agentenlos** es muss nichts auf den Zielsystemen installiert werden (nur z. B. SSH-Zugang bei Linux).
---
# 🧠 Grundprinzip (einfach erklärt)
Ansible arbeitet mit sogenannten **Playbooks** (YAML-Dateien), in denen du beschreibst:
> „Was soll passieren?“ nicht „Wie genau Schritt für Schritt?“
Beispiel (vereinfacht):
```yaml
- hosts: webserver
tasks:
- name: Installiere Nginx
apt:
name: nginx
state: present
```
👉 Bedeutung:
* Ziel: Servergruppe „webserver“
* Aufgabe: Installiere Nginx, falls noch nicht vorhanden
➡️ Wichtig: **idempotent**
→ Der gleiche Befehl kann beliebig oft laufen, ohne Schaden anzurichten.
---
# 🔍 Abgrenzung zu ähnlichen Tools
Ansible gehört zur Kategorie „Infrastructure as Code“. Hier ein Vergleich:
### 🆚 Puppet
* arbeitet mit Agenten auf Zielsystemen
* eigene DSL (Programmiersprache)
* komplexer Einstieg
👉 Ansible:
* kein Agent nötig
* nutzt YAML (einfacher lesbar)
---
### 🆚 Chef
* basiert stark auf Ruby
* eher „programmatisch“
👉 Ansible:
* deklarativ („Zielzustand beschreiben“)
---
### 🆚 Terraform
* erstellt Infrastruktur (Cloud, Netzwerke)
* Fokus: „Was existiert?“
👉 Ansible:
* konfiguriert Systeme („Was läuft darauf?“)
💡 Typische Kombination:
* Terraform erstellt Server
* Ansible konfiguriert sie
---
### 🆚 Docker
* isoliert Anwendungen in Containern
👉 Ansible:
* kann Docker automatisieren (z. B. Container starten)
---
# 🧩 Welche Probleme löst Ansible?
## 1. ❌ „Works on my machine“-Problem
Unterschiedliche Umgebungen führen zu Bugs.
👉 Lösung:
* identische Konfiguration überall
---
## 2. ❌ Manuelle Server-Konfiguration
Admins klicken sich durch Systeme → fehleranfällig
👉 Lösung:
* alles als Code definieren
---
## 3. ❌ Deployment-Chaos
Unklare Abläufe beim Software-Rollout
👉 Lösung:
* automatisierte Deployments
---
## 4. ❌ Skalierung schwierig
Mehr Server = mehr Aufwand
👉 Lösung:
* gleiche Playbooks für 1 oder 100 Server
---
# ⚙️ Typische Anwendungsfälle (mit Praxisbeispielen)
## 🧪 Beispiel 1: Webserver aufsetzen
Statt:
* SSH einloggen
* Pakete installieren
* Config schreiben
👉 Mit Ansible:
* ein Playbook ausführen → fertig
---
## 🚀 Beispiel 2: Continuous Deployment
In Kombination mit Tools wie:
* Jenkins
* GitLab
Ablauf:
1. Code wird gepusht
2. Pipeline startet
3. Ansible deployed neue Version
---
## ☁️ Beispiel 3: Cloud-Setup
* Server via Terraform erstellen
* Ansible installiert:
* Datenbank
* Backend
* Monitoring
---
## 🔄 Beispiel 4: Updates automatisieren
```yaml
- name: Update alle Server
apt:
upgrade: dist
```
👉 Ergebnis:
* alle Systeme sind aktuell ohne manuelles Eingreifen
---
# ⚠️ Herausforderungen und Grenzen
## 1. 📚 Komplexität bei großen Projekten
* viele Playbooks → schwer zu überblicken
👉 Lösung:
* Rollen & Struktur nutzen
---
## 2. 🐢 Performance
* läuft über SSH → langsamer als agentbasierte Tools
---
## 3. 🧪 Debugging
* Fehleranalyse manchmal schwierig
---
## 4. 🧑‍💻 YAML-Fallen
* Einrückung kritisch („Whitespace matters“)
---
## 5. 🔐 Zugriffsmanagement
* SSH-Keys und Rechte müssen sauber konfiguriert sein
---
# 🧱 Wichtige Konzepte (kurz erklärt)
* **Inventory** → Liste der Zielsysteme
* **Playbook** → Ablaufbeschreibung
* **Task** → einzelne Aktion
* **Role** → wiederverwendbare Struktur
* **Module** → konkrete Funktionen (z. B. apt, copy)
---
# 🧭 Wann solltest du Ansible verwenden?
👉 Gute Wahl, wenn du:
* viele Server verwalten musst
* wiederholbare Deployments brauchst
* schnell starten willst (geringe Einstiegshürde)
👉 Weniger geeignet:
* bei extrem großen, hochdynamischen Systemen (teilweise bessere Alternativen)
---
# 🧠 Fazit
**Ansible ist eines der zugänglichsten Tools für Automatisierung in der Softwareentwicklung.**
Es hilft dir:
* Fehler zu reduzieren
* Zeit zu sparen
* Infrastruktur reproduzierbar zu machen
👉 Besonders stark ist es durch:
* einfache Syntax (YAML)
* agentenlose Architektur
* breite Einsatzmöglichkeiten