Files
chemavxandClaude Opus 5 40205eddc3 monitoring: Fase 2, el kube-prometheus-stack pasa a ArgoCD
El chart era un release Helm gestionado a mano (helm upgrade) desde abril.
Ahora lo gestiona su propia Application con source Helm, version clavada a
83.2.0 (la que ya corria: esto es una adopcion, no una actualizacion).

Los valores se mudan de values-kube-prometheus-stack.yaml al valuesObject de
la Application, con sus comentarios: ahi esta el historial de los retoques a
mano que se recuperaron en julio (alerting, SSO de Authentik, token de
Telegram), y perderlo seria perder el mapa. Inline y no multi-source $values
porque ese montaje se auto-podo la Application de infisical el 2026-06-18, y
tener los valores en dos sitios es la deriva que veniamos a matar.

La adopcion se verifico ANTES de activar el auto-sync: aplicada sin
syncPolicy, ArgoCD daba 96/97 Synced sin haber sincronizado nunca. El que
faltaba era el Deployment de Grafana, y no por deriva: el render del subchart
no declara managed-by: Helm ni el restartedAt del podTemplate, asi que el
merge a 3 bandas del cliente los habria BORRADO (reinicio de Grafana + Helm
perdiendo la propiedad del objeto). Con ServerSideApply/ServerSideDiff ArgoCD
solo toca lo que declara: 97/97 Synced, cero operaciones de sync, cero pods
reiniciados. selfHeal probado con replicas 1->2 en kube-state-metrics,
revertido en 11s.

skipCrds: true a proposito: ArgoCD pasa --include-crds por defecto y los 10
CRD de monitoring.coreos.com no los gestiona nadie hoy. Contrapartida
documentada en el fichero: al subir de chart hay que aplicarlos a mano.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-07-25 20:22:27 +00:00

59 lines
3.0 KiB
YAML

# Fase 1 de meter monitoring/ bajo ArgoCD (2026-07-25).
#
# Por qué una lista blanca de ficheros y no el directorio entero: monitoring/
# mezcla TRES dueños distintos y solo uno es nuestro.
#
# A) Lo que escribimos nosotros -> el include de aquí abajo, ArgoCD manda.
# B) Lo que genera el chart -> kube-prometheus-stack. Sigue SIN estar en
# esta lista, y con razón: gestionarlo desde aquí como manifiestos sueltos
# daría DOS dueños al mismo objeto y reproduciría la deriva del three-way
# merge que ya se comió el alerting y el token de Telegram. Desde la Fase 2
# (2026-07-25) lo gestiona su propia Application con source Helm ->
# argocd-app-kube-prometheus-stack.yaml, y los ~40 renderizados que había
# volcados en git se han borrado. Un solo dueño, el chart.
# C) Lo que fabrican los controladores solos -> serviceaccount-default,
# configmap-kube-root-ca.crt y el rulefiles-0 (lo genera el
# prometheus-operator desde los PrometheusRule). En git no pintan nada;
# si ArgoCD los gestionara pelearía con el operator sin parar.
#
# OJO: ingress-kube-prometheus-stack-grafana.yaml NO está en la lista a
# propósito — ese ingress lo gestiona Helm (managed-by=Helm). Es grupo B.
#
# Y OJO 2: este fichero DEBE vivir dentro de monitoring/ y estar en el include.
# Es el patrón de la casa (cada app lleva su argocd-app.yaml en su directorio).
# Si la Application no está dentro del path que ella misma vigila, el primer
# sync con prune:true la ve como recurso huérfano y SE BORRA A SÍ MISMA
# (pasó el 2026-07-25 al dejarla solo en argocd/, que es un volcado, no fuente).
#
# Motivo de la Fase 1: hasta hoy las alertas de Grafana se aplicaban a mano con
# kubectl apply, así que dependían de que alguien se acordara. Ahora git manda.
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: monitoring
namespace: argocd
annotations:
notifications.argoproj.io/subscribe.on-sync-failed.telegram: "5138407666"
notifications.argoproj.io/subscribe.on-health-degraded.telegram: "5138407666"
spec:
project: default
source:
repoURL: https://git.chemavx.xyz/chemavx/k8s-manifests
targetRevision: HEAD
path: monitoring
directory:
recurse: false
# Lista blanca explícita. Al añadir un fichero nuestro a monitoring/ hay
# que añadirlo AQUÍ o ArgoCD lo ignora. Y al revés: sacar un fichero de
# esta lista con prune:true activo BORRA el recurso del cluster.
include: "{argocd-app.yaml,argocd-app-kube-prometheus-stack.yaml,configmap-grafana-alerting.yaml,configmap-chemavx-homelab-overview.yaml,deployment-uptime-kuma.yaml,service-uptime-kuma.yaml,pvc-uptime-kuma-pvc.yaml,ingress-uptime-kuma.yaml,ingress-uptime-kuma-redirect.yaml,ingress-prometheus.yaml,infisical-grafana-telegram.yaml}"
destination:
server: https://kubernetes.default.svc
namespace: monitoring
syncPolicy:
automated:
prune: true
selfHeal: true
syncOptions:
- CreateNamespace=true