Files
it-know-how/verschiedene/Ansible.md
T
2026-04-01 13:35:27 +02:00

272 lines
4.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 🧩 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