backup: retirar reddit-intel del sistema de copias
El servicio se decomisó (Reddit denegó el acceso a la API), así que su CronJob de n97 estaría empaquetando cada noche un directorio que ya nadie escribe, y backup-verify seguiría exigiendo una copia fresca que nunca va a llegar: en tres días habría empezado a sumar ERRORS y a disparar la alerta por una avería que no existe. Se van el CronJob, el script reddit-intel.sh y su comprobación en verify.sh. El `--exclude /reddit-intel/**` de rclone-mega SE QUEDA a propósito: sync es un espejo exacto y quitarlo borraría de un tirón las copias que aún viven en Mega. Se retirará cuando se decida purgar ese remoto a mano. Verificado: el ConfigMap sigue parseando y los cuatro scripts pasan `sh -n`. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -230,8 +230,10 @@ data:
|
|||||||
log "Origen: /data/backups/backups"
|
log "Origen: /data/backups/backups"
|
||||||
log "Destino: mega:k3s-backups/"
|
log "Destino: mega:k3s-backups/"
|
||||||
|
|
||||||
# --exclude reddit-intel: ese subdir remoto lo escribe el CronJob de n97
|
# --exclude reddit-intel: reddit-intel se decomisó el 2026-07-27 y ya nadie
|
||||||
# directamente; un sync sin exclude lo borraría (sync = espejo exacto).
|
# escribe ese subdir, pero el exclude SE QUEDA: sync es espejo exacto, así
|
||||||
|
# que quitarlo borraría de golpe las copias que aún quedan allí. Se retira
|
||||||
|
# cuando se decida purgar el remoto a mano.
|
||||||
# --mega-hard-delete: sin esto los borrados de rotación van a la papelera de
|
# --mega-hard-delete: sin esto los borrados de rotación van a la papelera de
|
||||||
# MEGA, que sigue contando cuota. Llenó los 20GB el 2026-07-25 y tumbó
|
# MEGA, que sigue contando cuota. Llenó los 20GB el 2026-07-25 y tumbó
|
||||||
# este job y el de reddit-intel ("Request over quota").
|
# este job y el de reddit-intel ("Request over quota").
|
||||||
@@ -275,31 +277,6 @@ data:
|
|||||||
--config /rclone/rclone.conf --log-level INFO --stats 60s
|
--config /rclone/rclone.conf --log-level INFO --stats 60s
|
||||||
rm -rf "$KEEP"
|
rm -rf "$KEEP"
|
||||||
log "B2 crown-jewels completado ($N artefactos)."
|
log "B2 crown-jewels completado ($N artefactos)."
|
||||||
reddit-intel.sh: |
|
|
||||||
#!/bin/sh
|
|
||||||
# Corre en chemavx-n97 (imagen rclone, BusyBox — sin GNU-ismos).
|
|
||||||
# Sube /opt/reddit-intel a Mega directamente: es el único dato del host n97
|
|
||||||
# y su cron local escribe en el MISMO disco (inútil contra fallo de disco).
|
|
||||||
set -e
|
|
||||||
|
|
||||||
log() { echo "[$(date '+%Y-%m-%d %H:%M:%S')] $*"; }
|
|
||||||
DATE=$(date +%Y-%m-%d_%H-%M-%S)
|
|
||||||
F="/tmp/reddit-intel_${DATE}.tar.gz"
|
|
||||||
|
|
||||||
log "Empaquetando /opt/reddit-intel..."
|
|
||||||
tar -czf "$F" -C /opt/reddit-intel .
|
|
||||||
gzip -t "$F"
|
|
||||||
log "Subiendo a mega:k3s-backups/reddit-intel/..."
|
|
||||||
rclone copy "$F" mega:k3s-backups/reddit-intel/ --config /rclone/rclone.conf --log-level INFO
|
|
||||||
log "Podando copias remotas de más de 8 días..."
|
|
||||||
# --mega-hard-delete: ver nota en rclone-mega.sh (la papelera cuenta cuota).
|
|
||||||
rclone delete mega:k3s-backups/reddit-intel/ --min-age 8d --mega-hard-delete --config /rclone/rclone.conf
|
|
||||||
log "Subiendo a B2 (crown jewels, retención 3 días)..."
|
|
||||||
rclone copy "$F" b2:chemavx-k3s-backups/reddit-intel/ --config /rclone/rclone.conf --log-level INFO
|
|
||||||
# --b2-hard-delete: ver nota en b2-crown-jewels.sh (B2 oculta y factura, no borra).
|
|
||||||
rclone delete b2:chemavx-k3s-backups/reddit-intel/ --min-age 3d --b2-hard-delete --config /rclone/rclone.conf
|
|
||||||
rm -f "$F"
|
|
||||||
log "reddit-intel OK"
|
|
||||||
verify.sh: |
|
verify.sh: |
|
||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
# Imagen BusyBox (rclone) — evitar GNU-ismos (date -d 'yesterday' NO funciona).
|
# Imagen BusyBox (rclone) — evitar GNU-ismos (date -d 'yesterday' NO funciona).
|
||||||
@@ -339,21 +316,6 @@ data:
|
|||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
|
||||||
# reddit-intel vive en su subdir (lo sube el CronJob de n97)
|
|
||||||
FOUND=0
|
|
||||||
for d in $ACCEPTED_DATES; do
|
|
||||||
if echo "$FILES" | grep -q "reddit-intel/reddit-intel_${d}"; then
|
|
||||||
FOUND=1
|
|
||||||
break
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
if [ "$FOUND" -eq 1 ]; then
|
|
||||||
log "[OK] reddit-intel"
|
|
||||||
else
|
|
||||||
log "[WARN] reddit-intel — sin backup en los últimos 3 días"
|
|
||||||
ERRORS=$((ERRORS + 1))
|
|
||||||
fi
|
|
||||||
|
|
||||||
log "---"
|
log "---"
|
||||||
TOTAL=$(echo "$FILES" | grep -c "tar.gz\|sql.gz\|db.gz" || true)
|
TOTAL=$(echo "$FILES" | grep -c "tar.gz\|sql.gz\|db.gz" || true)
|
||||||
log "Total archivos en Mega: $TOTAL"
|
log "Total archivos en Mega: $TOTAL"
|
||||||
|
|||||||
@@ -1,59 +0,0 @@
|
|||||||
apiVersion: batch/v1
|
|
||||||
kind: CronJob
|
|
||||||
metadata:
|
|
||||||
name: reddit-intel-backup
|
|
||||||
namespace: backup-system
|
|
||||||
spec:
|
|
||||||
# Único CronJob de backup que corre en n97: /opt/reddit-intel vive fuera de k3s
|
|
||||||
# (Docker en el host) y su cron local escribe en el mismo disco.
|
|
||||||
schedule: "15 3 * * *"
|
|
||||||
concurrencyPolicy: Forbid
|
|
||||||
failedJobsHistoryLimit: 2
|
|
||||||
successfulJobsHistoryLimit: 3
|
|
||||||
jobTemplate:
|
|
||||||
spec:
|
|
||||||
backoffLimit: 1
|
|
||||||
activeDeadlineSeconds: 1800
|
|
||||||
template:
|
|
||||||
spec:
|
|
||||||
nodeSelector:
|
|
||||||
kubernetes.io/hostname: chemavx-n97
|
|
||||||
restartPolicy: Never
|
|
||||||
securityContext:
|
|
||||||
runAsUser: 0
|
|
||||||
containers:
|
|
||||||
- name: rclone
|
|
||||||
# OJO: imagen BusyBox — el script debe evitar GNU-ismos
|
|
||||||
image: docker.io/rclone/rclone:1.74.3
|
|
||||||
command: ["/bin/sh", "/scripts/reddit-intel.sh"]
|
|
||||||
resources:
|
|
||||||
requests:
|
|
||||||
cpu: 50m
|
|
||||||
memory: 64Mi
|
|
||||||
limits:
|
|
||||||
cpu: 200m
|
|
||||||
memory: 256Mi
|
|
||||||
volumeMounts:
|
|
||||||
- mountPath: /opt/reddit-intel
|
|
||||||
name: reddit-intel
|
|
||||||
readOnly: true
|
|
||||||
- mountPath: /rclone
|
|
||||||
name: rclone-conf
|
|
||||||
- mountPath: /scripts
|
|
||||||
name: scripts
|
|
||||||
volumes:
|
|
||||||
- name: reddit-intel
|
|
||||||
hostPath:
|
|
||||||
path: /opt/reddit-intel
|
|
||||||
type: Directory
|
|
||||||
# RCLONE_CONF (Infisical /backup-system) contiene mega+b2 desde 2026-07-15
|
|
||||||
- name: rclone-conf
|
|
||||||
secret:
|
|
||||||
secretName: rclone-conf-infisical
|
|
||||||
items:
|
|
||||||
- key: RCLONE_CONF
|
|
||||||
path: rclone.conf
|
|
||||||
- name: scripts
|
|
||||||
configMap:
|
|
||||||
name: backup-scripts
|
|
||||||
defaultMode: 0755
|
|
||||||
Reference in New Issue
Block a user