Reliability

Quiet is not the same as healthy.

kubeaid-cli installs Prometheus, Alertmanager, Grafana and their alert rules on every cluster it builds unless you opt out.

Where a check is opt-in, this page says so.

5 minheartbeat on a subscription
8default KubeAid alert rule sets
2hKubeAid app drift to warning
15 minfailed software-RAID disk to critical
Delivery

An alert nobody receives is still silence.

On a cluster kubeaid-cli builds with an Obmondo subscription, Alertmanager sends warning and critical alerts to Obmondo over mutual TLS. Without a subscription, you choose where alerts go.

Watchdog always fires, as a check that the alerting pipeline works. If it stops arriving from a subscribed cluster, Obmondo raises an alert of its own.

Who answers an alert, and how fast, depends on your Obmondo plan.

alertmanager.yaml from kubeaid-cli
route: group_by: ['namespace'] group_wait: 10s group_interval: 10s repeat_interval: 1h receiver: 'obmondo' routes: - receiver: 'obmondo' matchers: - 'alertname = Watchdog' repeat_interval: 5m
What ships

Each layer, and the alert rules that watch it.

  • Metrics

    node-exporter and kube-state-metrics feed Prometheus, and Grafana ships dashboards for cluster, namespace, pod and node resources.

    • Watchdog
    • TargetDown
  • Nodes and disks

    Alerts on a nearly full filesystem or a degraded software RAID array, with critical RAID disk alerts after 15 minutes.

    • NodeFilesystemAlmostOutOfSpace
    • NodeRAIDDegraded
    • HostRaidDiskFailure
  • Control plane and workloads

    Alerts when the API server is down, a node is not Ready or a pod keeps crash-looping. etcd's rules ship too, but nothing scrapes etcd until you expose etcd's metrics and set etcd_metrics for the cluster.

    • KubeAPIDown
    • KubeNodeNotReady
    • KubePodCrashLooping
  • Git drift

    Warns once an app KubeAid manages has been out of sync with Git, or unhealthy, for two hours.

    • ArgoCdAppOutOfSync
    • ArgoCdAppUnhealthy
  • Certificates and volumes

    Warns before a cert-manager or kubelet certificate expires, and when a volume claim in a namespace KubeAid manages sits unused for an hour.

    • CertManagerCertExpirySoon
    • KubeletClientCertificateExpiration
    • KubeDetectOrphanPvc
Read the KubeAid docs
A missed backup

A backup stops running. This is what notices.

Opt-in on a subscribed cluster

The backup exporter covers five backends and ships 18 alert rules. Each backend needs S3 credentials. MongoDB and MariaDB need their collector switched on, and the MongoDB, MariaDB and Sealed Secrets rules need their own switch.

All 18 rules on GitHub
Switch it on in kubeaid-agent's values (KubeAid 32.9.1 and later)
kubeaid-backup-exporter: enabled: true exporter: postgres: s3: {secretName: s3-credentials} velero: s3: {secretName: s3-credentials} mongodb: enabled: true s3: {secretName: s3-credentials} mariadb: enabled: true s3: {secretName: s3-credentials} sealedSecrets: s3: bucket: <bucket> endpoint: <url> secretName: s3-credentials prometheusRule: mongodb: {enabled: true} mariadb: {enabled: true} sealedSecrets: {enabled: true}
01

A scheduled backup does not run

KubeAid's Velero chart backs up at 03:00, Monday to Saturday. The backup exporter checks the newest backup's age every two hours by default.

02

The newest backup passes 26 hours

max_rpo is the maximum acceptable recovery point objective (RPO), 26 hours by default, so VeleroBackupExceededRPO fires as critical after five minutes. It can fire up to one exporter check late.

03

Someone checks the PostgreSQL and Velero backups at once

kubeaid-cli backup status reads the exporter and prints the backup state of each resource. It changes nothing on the cluster.

kubeaid-cli backup status sample, worst status per resource
RESOURCE STATUSdemo-pgsql collector_errordemo-uploads healthyobs-postgres exceeds_rpoprom-data healthy

Restore, by platform

Self-managed AzureOne command, kubeaid-cli cluster recover. It needs a disasterRecovery block.
AKSBy hand. kubeaid-cli installs no Velero on AKS, so add KubeAid's Velero chart.
HetznerBy hand: add KubeAid's Velero chart, re-bootstrap with kubeaid-cli, then restore a Velero backup. A recover command is in progress.
Self-managed AWS, EKS and generic bare metalBy hand: add KubeAid's Velero chart, re-bootstrap with kubeaid-cli, then restore a Velero backup.
PostgreSQL, any platformSet recover.enabled on the CloudNativePG cluster in kubeaid-addons to restore it from its object-store backup, which is off by default. KubeAid's Velero chart skips the volume data of RabbitMQ, Redis, MongoDB, OpenSearch and CloudNativePG.
Straight answers

What we do not claim.

01

No recovery time

Nothing in KubeAid's code or docs times a restore. max_rpo is an alert threshold, not a promise about how much data a restore brings back.

02

Hubble metrics are exposed, not collected

Cloud and bare-metal clusters kubeaid-cli builds run Cilium with Hubble and the Hubble UI for watching network flows. KubeAid's Prometheus does not collect Hubble's metrics, so no dashboard shows them and no alert fires on a dropped packet.

03

Monitoring runs one replica

Prometheus and Alertmanager each run one replica by default, so neither is highly available. To run more, set prometheus.replicas or alertmanager_replicas in the cluster's vars file.

Bring us a cluster you are not sure you could restore.

An Obmondo engineer who runs this stack in production will look at what alerts today and what a restore would take.