Monitoring-wijzigingen op het cluster uitrollen
Aan het einde van deze gids zijn wijzigingen in k8s/monitoring/ (rules, config, ingress, dashboards) live op het cluster en is er bevestiging dat alerting nog werkt. Voor de architectuur achter deze stack, zie explanation: monitoring-stack. Voor referentie van endpoints, secrets en alert-rules, zie reference: monitoring-stack.
Voorwaarden:
kubectl-toegang tot hetmonitoring-namespace.- De PR’s met de gewenste yaml-wijzigingen zijn gemerged naar
main. - Korte downtime van Alertmanager is acceptabel als je de deployment opnieuw oprolt (
Recreate-strategy).
1. Nieuwe secrets aanmaken (alleen eerste keer of bij rotatie)
Secrets staan niet in git. Twee monitoring-specifieke secrets die handmatig moeten:
# SMTP-credentials voor Alertmanager → Flowmailer
kubectl create secret generic alertmanager-smtp \
--namespace monitoring \
--from-literal=SMTP_FROM='alerts@tapster.nl' \
--from-literal=SMTP_HOST='smtp.flowmailer.net' \
--from-literal=SMTP_PORT='587' \
--from-literal=SMTP_USER='<flowmailer-user>' \
--from-literal=SMTP_PASS='<flowmailer-password>'
# Watchdog-webhook (healthchecks.io of BetterStack heartbeat-URL)
kubectl create secret generic alertmanager-webhook \
--namespace monitoring \
--from-literal=HEALTHCHECK_WATCHDOG_URL='https://hc-ping.com/<uuid>'
Een nieuwe placeholder in alertmanager-config.yaml toegevoegd? Dan ook de envsubst-whitelist in alertmanager-deployment.yaml bijwerken. Zie reference: envsubst-whitelist.
2. Prometheus: rules en config
kubectl apply -f k8s/monitoring/mongoose-pool-rules.yaml
kubectl apply -f k8s/monitoring/kubernetes-platform-rules.yaml
kubectl apply -f k8s/monitoring/watchdog-rules.yaml
kubectl apply -f k8s/monitoring/prometheus-config.yaml
kubectl apply -f k8s/monitoring/prometheus-deployment.yaml
kubectl -n monitoring rollout restart deployment/prometheus
kubectl -n monitoring rollout status deployment/prometheus
Verifieer dat de rules geladen zijn:
kubectl -n monitoring port-forward svc/prometheus 9090:9090 &
curl -s -u admin:<wachtwoord> http://localhost:9090/api/v1/rules \
| jq '.data.groups[].name'
kill %1
Verwacht: watchdog, mongoose-pool, kubernetes-pods, kubernetes-nodes, tapster-api-availability, tls-certificates, alertmanager-self.
3. Alertmanager: config en deployment
kubectl apply -f k8s/monitoring/alertmanager-config.yaml
kubectl apply -f k8s/monitoring/alertmanager-deployment.yaml
kubectl -n monitoring rollout restart deployment/alertmanager
kubectl -n monitoring rollout status deployment/alertmanager
Verifieer dat de init-container de envsubst-render goed deed:
POD=$(kubectl -n monitoring get pod -l app=alertmanager -o name | head -1)
kubectl -n monitoring exec "$POD" -c alertmanager -- \
cat /etc/alertmanager/alertmanager.yml | head -40
Geen letterlijke ${...}-strings te zien (anders is de whitelist incompleet). Controleer ook dat Watchdog actief is:
kubectl -n monitoring port-forward svc/alertmanager 9093:9093 &
curl -s http://localhost:9093/api/v2/alerts \
| jq '.[] | select(.labels.alertname=="Watchdog") | {state: .status.state, startsAt}'
kill %1
4. Ingress
kubectl apply -f k8s/monitoring/ingress.yaml
Traefik leest IngressRoutes en secret-changes live; geen rollout nodig. Test dat basic-auth werkt:
curl -I https://prometheus.tapster.nl # verwacht: 401 Unauthorized
curl -I -u admin:<wachtwoord> https://prometheus.tapster.nl # verwacht: 200 of 302
Voor het roteren van het basic-auth-wachtwoord, zie basic-auth rotate how-to.
5. Grafana: datasources, dashboards
kubectl apply -f k8s/monitoring/grafana-deployment.yaml
kubectl apply -f k8s/monitoring/grafana-dashboards-configmap.yaml
kubectl -n monitoring rollout restart deployment/grafana
kubectl -n monitoring rollout status deployment/grafana
Open Grafana, check onder Configuration → Data sources dat prometheus en alertmanager allebei “Working” tonen. Onder Dashboards moeten de nieuwe ConfigMap-dashboards verschijnen.
6. End-to-end verificatie
Stuur een test-alert direct in Alertmanager om de hele keten te toetsen:
kubectl -n monitoring port-forward svc/alertmanager 9093:9093 &
curl -s -H 'Content-Type: application/json' -d '[{
"labels":{"alertname":"SmtpTest","severity":"critical","service":"tapster-api"},
"annotations":{"summary":"Verificatie na monitoring-rollout"},
"startsAt":"'"$(date -u +%Y-%m-%dT%H:%M:%SZ)"'",
"endsAt":"'"$(date -u -v+10M +%Y-%m-%dT%H:%M:%SZ)"'"
}]' http://localhost:9093/api/v2/alerts
kill %1
Mail moet binnen ~30 seconden bij roy@tapster.nl zijn. Geen mail? Check de logs:
kubectl -n monitoring logs deploy/alertmanager -c alertmanager --since=2m \
| grep -iE 'notify|smtp|err|warn'
Watchdog-heartbeat naar healthchecks.io moet ook live zijn. Kijk op het dashboard van de healthcheck-service: laatste ping < 2 minuten geleden.
Veelvoorkomende problemen
The PersistentVolumeClaim "..." is invalid: spec.resources.requests.storage: Forbidden: field can not be less than previous value: de yaml verkleint een PVC. PVC-shrinks worden niet ondersteund door de cluster-default storage-class. Voor Alertmanager: zie Alertmanager-PVC verkleinen.- Alertmanager
CrashLoopBackOffmetinvalid URL: unsupported scheme "": een placeholder inalertmanager-config.yamlis niet vervangen. Check dat de variabele in de envsubst-whitelist vanalertmanager-deployment.yamlstaat én dat het bijbehorende secret (vaakalertmanager-webhook) bestaat met de juiste keys. - Grafana 502 Bad Gateway: pod is nog niet ready. Wacht 30 tot 60 seconden of check
kubectl -n monitoring logs deploy/grafanaop datasource-provisioning-fouten.