Files
k8s-manifests/reddit-intel/PROMOTION.md
T
chemavxandClaude Fable 5 ae0b5f9492 feat(reddit-intel): manifiestos preparados, INACTIVOS hasta promoción
App corre en docker compose en n97 (semana de calibración). El app-of-apps
no es recursivo: nada de este directorio se sincroniza hasta aplicar a mano
argocd-app.yaml. Checklist de activación en PROMOTION.md (imagen construida,
secrets en Infisical /reddit-intel, copia de la BD al PVC).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-06 17:14:06 +00:00

3.3 KiB

reddit-intel — promoción de docker compose (n97) a k3s

Estado: INACTIVO. Los manifiestos de este directorio existen solo en git; el app-of-apps k8s-manifests no es recursivo, así que ArgoCD no los sincroniza. La app corre en docker compose en chemavx-n97 (/opt/reddit-intel, semana de calibración desde 2026-07-06).

Checklist de activación (en este orden)

  1. Imagen en el registro. Primer build manual, o workflow_dispatch del workflow "Build reddit-intel image" en el repo git.chemavx.xyz/chemavx/reddit-intel (requiere secrets CI_TOKEN y TELEGRAM_BOT_TOKEN configurados en ese repo). El workflow actualiza el tag de deployment.yaml aquí; si el build es manual, sustituir el placeholder :00000000 a mano por el sha8 real.

  2. Secrets en Infisical (proyecto "homelab", env prod, path /reddit-intel) — mismos valores que el .env del compose: reddit-client-id, reddit-client-secret, llm-api-key, dashboard-auth-token, telegram-bot-token, telegram-chat-id (los dos de telegram pueden ir vacíos).

  3. Congelar el compose y copiar la BD al PVC:

    # en n97
    cd /opt/reddit-intel && docker compose down       # para la app (checkpoint WAL limpio)
    /opt/reddit-intel/scripts/backup.sh               # backup final pre-migración
    
    # activar la app (crea PVCs y arranca el pod con BD vacía)
    kubectl apply -f reddit-intel/argocd-app.yaml
    kubectl -n reddit-intel rollout status deploy/reddit-intel
    
    # parar el pod y volcar la BD del host al PVC
    kubectl -n reddit-intel scale deploy/reddit-intel --replicas=0
    kubectl -n reddit-intel run pvc-loader --image=busybox --restart=Never \
      --overrides='{"spec":{"nodeSelector":{"kubernetes.io/hostname":"chemavx-n97"},"containers":[{"name":"pvc-loader","image":"busybox","command":["sleep","600"],"volumeMounts":[{"name":"data","mountPath":"/data"}]}],"volumes":[{"name":"data","persistentVolumeClaim":{"claimName":"reddit-intel-data"}}]}}'
    kubectl -n reddit-intel wait --for=condition=Ready pod/pvc-loader
    kubectl -n reddit-intel cp /opt/reddit-intel/data/reddit-intel.db pvc-loader:/data/reddit-intel.db
    kubectl -n reddit-intel delete pod pvc-loader
    kubectl -n reddit-intel scale deploy/reddit-intel --replicas=1
    

    (El docker compose down previo garantiza que no hay -wal/-shm pendientes: basta copiar el .db.)

  4. Verificar: kubectl -n reddit-intel logs deploy/reddit-intel debe mostrar scheduler_start jobs=monitor,detector,analyzer,karma,learning; el dashboard responde vía svc/reddit-intel (port-forward o el ingress que se decida — pendiente de elegir exposición).

  5. Desmantelar la fase compose: quitar la línea del crontab de chemavx en n97 (el CronJob reddit-intel-db-backup de aquí la reemplaza) y archivar /opt/reddit-intel cuando la semana de convivencia confirme que todo va bien.

Notas

  • El CronJob de backup (backup-cronjob.yaml) replica el patrón researchowl: sqlite3 .backup + integrity_check + retención 7, contra el PVC.
  • Un solo replica siempre (strategy: Recreate): SQLite WAL + APScheduler in-process no admiten dos pods.
  • El namespace reddit-intel ya existe en el clúster (creado durante la preparación); CreateNamespace=true lo cubre igualmente.