e98e3a2b84
Playbooks liegen unter pve1/ansible und pve2/ansible; authorized_keys als Fragmente mit Deploy-Skript und Ziel-Matrix für Proxmox, VM 101 und CTs. Co-authored-by: Cursor <cursoragent@cursor.com>
140 lines
4.0 KiB
Markdown
140 lines
4.0 KiB
Markdown
# 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 ← Symlink nach /root/docu/pve2/ansible
|
||
↓
|
||
ansible-playbook playbooks/disk-maintenance.yml
|
||
↓ SSH
|
||
docker (101) · media (109) · AIDEV (110)
|
||
```
|
||
|
||
## Verzeichnisstruktur (Git)
|
||
|
||
Quelle im Repo **`docu`**, auf pve2 deployen:
|
||
|
||
```bash
|
||
cd /root/docu && git pull
|
||
ln -sfn /root/docu/pve2/ansible /root/ansible
|
||
```
|
||
|
||
```
|
||
/root/docu/pve2/ansible/ # (= /root/ansible nach Symlink)
|
||
├── README.md
|
||
├── 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
|
||
```
|
||
|
||
SSH-Keys für Ansible → [../shared/ssh/README.md](../shared/ssh/README.md)
|
||
|
||
## 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 — Public Key `root@pve2` muss in den CTs stehen ([shared/ssh](../shared/ssh/README.md)).
|
||
|
||
## 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/docu/pve2/ansible/inventory/group_vars/all.yml` (oder `/root/ansible/…` via Symlink)
|
||
|
||
```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
|
||
```
|