Initiale Infrastruktur-Dokumentation pve1 und pve2.
Enthält Host-Doku, MQTT/HA, Git-Setup, Power-Monitoring und GPU-Idle (pve2). Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -0,0 +1,129 @@
|
||||
# 06 — Ansible-Automatisierung
|
||||
|
||||
## Konzept
|
||||
|
||||
**Ansible legt keine Crons in den Containern an.**
|
||||
|
||||
Stattdessen:
|
||||
|
||||
1. Auf dem **Proxmox-Host** existiert ein **Cron-Job** (wöchentlich)
|
||||
2. Der Cron startet ein **Shell-Script**
|
||||
3. Das Script führt **`ansible-playbook`** aus
|
||||
4. Ansible verbindet sich per **SSH** zu den CTs und führt Wartungs-Tasks aus
|
||||
|
||||
```
|
||||
/etc/cron.weekly/pve-lxc-disk-maintenance
|
||||
↓ (Symlink)
|
||||
/root/ansible/run-disk-maintenance.sh
|
||||
↓
|
||||
ansible-playbook playbooks/disk-maintenance.yml
|
||||
↓ SSH
|
||||
docker (101) · media (109) · AIDEV (110)
|
||||
```
|
||||
|
||||
## Verzeichnisstruktur
|
||||
|
||||
```
|
||||
/root/ansible/
|
||||
├── ansible.cfg
|
||||
├── run-disk-maintenance.sh → von cron.weekly aufgerufen
|
||||
├── inventory/
|
||||
│ ├── hosts.yml → Hosts + CT-spezifische Variablen
|
||||
│ └── group_vars/all.yml → globale Schwellwerte
|
||||
├── playbooks/
|
||||
│ └── disk-maintenance.yml
|
||||
└── roles/
|
||||
└── disk_cleanup/
|
||||
├── defaults/main.yml
|
||||
├── tasks/main.yml
|
||||
└── handlers/main.yml
|
||||
```
|
||||
|
||||
## Verwaltete Hosts
|
||||
|
||||
| Ansible-Host | VMID | IP | Besonderheiten |
|
||||
|--------------|------|-----|----------------|
|
||||
| docker | 101 | 192.168.10.101 | Frigate-Pfade auf `/mnt/records` |
|
||||
| media | 109 | 192.168.20.6 | Jellyfin-Cache-Pfad |
|
||||
| aidev | 110 | 10.100.2.13 | Dev-Tooling optional |
|
||||
|
||||
SSH als `root` vom Proxmox-Host — Key-Auth war bereits eingerichtet.
|
||||
|
||||
## Was das Playbook macht
|
||||
|
||||
| Task | Beschreibung |
|
||||
|------|--------------|
|
||||
| Journal | `journalctl --vacuum-size=200M` |
|
||||
| apt | `autoclean` / `autoremove` / `clean` |
|
||||
| Docker-Logs | Dateien >50 MB auf 10 MB kürzen |
|
||||
| Docker | Gestoppte Container (>7 T.), dangling Images, Build-Cache (>14 T.) |
|
||||
| Docker-Volumes | Nur **dangling** Volumes |
|
||||
| daemon.json | Log-Limits `10m` × `3` — nur wenn Datei noch nicht existiert |
|
||||
| fstrim | `/` im Container (**wichtig für Thin-Pool**) |
|
||||
| Frigate | Aufnahme-Ordner älter als 30 Tage löschen |
|
||||
| Jellyfin | Cache-Dateien älter als 30 Tage löschen |
|
||||
|
||||
### Tags (optional)
|
||||
|
||||
```bash
|
||||
# Alles (Standard)
|
||||
ansible-playbook playbooks/disk-maintenance.yml
|
||||
|
||||
# Nur aggressive Image-Bereinigung zusätzlich
|
||||
ansible-playbook playbooks/disk-maintenance.yml --tags aggressive
|
||||
|
||||
# Nur Frigate oder Jellyfin
|
||||
ansible-playbook playbooks/disk-maintenance.yml --tags frigate
|
||||
ansible-playbook playbooks/disk-maintenance.yml --tags jellyfin
|
||||
```
|
||||
|
||||
## Cron
|
||||
|
||||
```bash
|
||||
ls -la /etc/cron.weekly/pve-lxc-disk-maintenance
|
||||
# → Symlink nach /root/ansible/run-disk-maintenance.sh
|
||||
```
|
||||
|
||||
- **Intervall:** `cron.weekly` (typisch Sonntag morgens)
|
||||
- **Log:** `/var/log/pve-lxc-disk-maintenance.log`
|
||||
|
||||
### Cron deaktivieren
|
||||
|
||||
```bash
|
||||
rm /etc/cron.weekly/pve-lxc-disk-maintenance
|
||||
```
|
||||
|
||||
### Cron auf täglich umstellen (Beispiel)
|
||||
|
||||
```bash
|
||||
echo '0 3 * * * root /root/ansible/run-disk-maintenance.sh' > /etc/cron.d/pve-lxc-disk-maintenance
|
||||
```
|
||||
|
||||
## Konfiguration anpassen
|
||||
|
||||
Globale Werte: `/root/ansible/inventory/group_vars/all.yml`
|
||||
|
||||
```yaml
|
||||
journal_max_size: 200M
|
||||
docker_prune_stopped_containers_older_than: 168h # 7 Tage
|
||||
docker_prune_unused_images_older_than: 336h # 14 Tage (Tag: aggressive)
|
||||
frigate_recordings_retain_days: 30
|
||||
jellyfin_cache_max_age_days: 30
|
||||
fstrim_enabled: true
|
||||
```
|
||||
|
||||
Host-spezifisch in `inventory/hosts.yml` (z. B. Frigate-Pfade nur auf `docker`).
|
||||
|
||||
## Voraussetzungen
|
||||
|
||||
- **Ansible** auf dem Proxmox-Host installiert (`apt install ansible`)
|
||||
- **SSH** vom Host zu den CTs als root
|
||||
- CTs müssen laufen (für SSH)
|
||||
|
||||
## Manuell testen
|
||||
|
||||
```bash
|
||||
/root/ansible/run-disk-maintenance.sh
|
||||
# oder
|
||||
cd /root/ansible && ansible-playbook playbooks/disk-maintenance.yml
|
||||
```
|
||||
Reference in New Issue
Block a user