Tres ficheros describían algo distinto de lo desplegado, y aplicarlos rompía
cosas. Ahora coinciden campo por campo (verificado con kubectl diff vacío).
argocd/deployment-argocd-redis.yaml decía `resources: {}` y el nodeSelector por
defecto. Lo vivo lleva el anclaje a chemavx-k8 y límites de 200m/128Mi, sin los
cuales este pod muere con Exit Code 255 tras días de uptime. El arreglo sólo
constaba en argocd-patches/redis-patch.yaml, así que el fichero que uno
aplicaría primero era justo el que deshacía el arreglo. Queda el comentario
explicando por qué el anclaje está ahí, y el parche lleva cabecera diciendo que
es parcial y que no debe compararse con el cluster.
gitea/configmap-daemon-json.yaml le faltaban dos insecure-registries que sí
están vivos (git.chemavx.xyz y gitea.gitea.svc.cluster.local:3000). Comprobado
que lo vivo es lo correcto: el buildkitd.toml declara ese registro como
http/insecure y los workflows de CI empujan ahí. Aplicar el fichero viejo habría
dejado a la CI sin poder subir imágenes.
gitea/configmap-buildkitd-config.yaml es nuevo: ese ConfigMap llevaba 90 días
vivo sin manifiesto ninguno.
Restos de polymarket, decomisado el 2026-07-17: fuera su Namespace de
cluster-wide/namespaces.yaml (11 quedan) y borrado el directorio
polymarket-bot/, que resultó no estar en git siquiera — sus dos ficheros los
descarta .gitignore por autogenerados, así que eran basura local del export de
abril. De paso, namespaces.yaml pierde las anotaciones de último apply y gana
una cabecera: no es la lista completa del cluster (16 apps de ArgoCD crean su
propio namespace) y aplicarlo no lo reconstruye.
La auditoría baja de 26 hallazgos a 13, y ninguno de los 13 es deriva real:
8 son reddit-intel, inactivo a propósito (ver reddit-intel/PROMOTION.md), 3 son
el fichero de parche parcial, uno es un `group: ''` equivalente a estar ausente
y el último era una anotación del controlador, ya fuera del export.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
k8s-manifests
Manifests de Kubernetes gestionados por ArgoCD para el cluster chemavx.
Regla crítica: secrets en git
Los secrets con datos sensibles NO se guardan en este repo.
Los archivos de secret en este repo sólo contienen metadata (name, namespace, labels, annotations). Los campos data / stringData se gestionan manualmente fuera de git.
Por qué
Un valor placeholder como REDACTED es base64 válido que decodifica a bytes no-UTF-8. Si ArgoCD aplica ese manifest, corrompe el secret en el cluster, lo que puede:
- Romper certificados TLS (ERR_CERT_AUTHORITY_INVALID)
- Impedir que pods arranquen (
grpc: error while marshaling: string field contains invalid UTF-8) - Cifrar credenciales con una clave incorrecta
Secrets TLS (cert-manager)
Los secrets TLS los gestiona cert-manager automáticamente a partir del recurso Certificate. No crear archivos secret-*-tls.yaml con datos.
Secrets de aplicación — crear manualmente antes del primer deploy
| Namespace | Secret | Comando |
|---|---|---|
n8n |
n8n-secret |
kubectl create secret generic n8n-secret --from-literal=encryption-key='<valor-en-vaultwarden>' -n n8n |
authentik |
authentik-secret |
Ver Vaultwarden → "authentik" |
cloudflare-ddns |
cloudflare-ddns-secret |
Ver Vaultwarden → "cloudflare-ddns" |
vaultwarden |
vaultwarden-secret |
Ver Vaultwarden → "vaultwarden" |
ghost-en |
ghost-en-smtp |
kubectl create secret generic ghost-en-smtp --from-literal=SMTP_USER='<user-gmail>' --from-literal=SMTP_PASS='<app-password>' -n ghost-en |
argocd |
argocd-secret |
Gestionado por ArgoCD bootstrap |
argocd |
argocd-redis |
Gestionado por ArgoCD bootstrap |
monitoring |
kube-prometheus-stack-grafana |
Ver Vaultwarden → "grafana" |
monitoring |
kube-prometheus-stack-admission |
Generado por helm (webhook TLS) |
ArgoCD ignoreDifferences para secrets
Toda ArgoCD Application que gestione un namespace con secrets debe incluir ignoreDifferences para el campo /data:
spec:
ignoreDifferences:
- group: ""
kind: Secret
name: <nombre-del-secret>
namespace: <namespace>
jsonPointers:
- /data
syncPolicy:
syncOptions:
- RespectIgnoreDifferences=true
Ver n8n ArgoCD Application como referencia.
Pre-commit hook
Este repo incluye un pre-commit hook que rechaza commits con REDACTED en archivos .yaml.
Instalar con:
cp .githooks/pre-commit .git/hooks/pre-commit
chmod +x .git/hooks/pre-commit
Renovate Bot
Secret renovate-token gestionado manualmente (no está en el repo).
Para recrearlo:
kubectl create secret generic renovate-token \
--from-literal=RENOVATE_TOKEN=<token-gitea> \
-n renovate
Token en https://git.chemavx.xyz/user/settings/applications con permisos:
issue: Read/Write, repository: Read/Write, user: Read
Imagen fijada a 38.0.0 — no actualizar a latest sin probar autenticación primero.
ArgoCD patches
Después de instalar ArgoCD aplicar:
kubectl apply -f argocd-patches/redis-patch.yaml