El ConfigMap grafana-alerting (reglas provisionadas + contact points + política de notificación → Telegram) se monta en el Deployment de Grafana, pero el chart NO generaba ese volumen: se había añadido a mano en algún momento y sobrevivía únicamente por el three-way merge de Helm, que preserva lo que no aparece ni en el render viejo ni en el nuevo. O sea que todo el alerting de Grafana dependía de un accidente afortunado. Un `helm upgrade --force`, un `kubectl replace` desde la salida del chart, un cambio del chart que reestructurase `volumes`, o reconstruir el release desde el fichero de valores que acabo de añadir en el commit anterior — cualquiera de las cuatro se lo habría llevado por delante. Y en silencio: los paneles seguirían pintando igual, solo dejarían de llegar los avisos. Se declara con grafana.extraConfigmapMounts. Comprobado antes de aplicar que el spec renderizado es equivalente al vivo (subPath/readOnly a null y defaultMode 420 son los valores por defecto), así que el pod NO se ha reiniciado: mismo nombre antes y después. Y verificado lo que de verdad importaba: renderizando SOLO desde values-kube-prometheus-stack.yaml, el volumen aparece — el fichero ya basta para reconstruir el release entero sin perder el alerting. Encontrado haciendo el chequeo posterior al upgrade de las alertas de ruido, no por el upgrade en sí: llevaba así desde que se montó. 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