Module 04

Maintaining Veeam Kasten
Over Time

Modules 01 to 03 left you with a deployed, configured Veeam Kasten for Kubernetes instance. This module is the year after that: keeping it current, watching its health, and protecting the protector itself — the same patch-watch-back-up instincts you run today, pointed at a system that lives inside the cluster it protects.

5 sections
plus a knowledge check
~40 minutes
estimated
Veeam Kasten 9.0.2
day-two operations
By the end of this module you'll be able to:
  1. Plan a Veeam Kasten upgrade that respects the supported version window and the catalog free-space requirement
  2. Explain how Kubernetes and distribution version support sets the pace of your upgrade calendar
  3. Monitor Veeam Kasten itself — dashboard compliance states, Prometheus metrics, and alerting
  4. Collect the right diagnostics before you open a support case
  5. Configure, schedule, and test Veeam Kasten Disaster Recovery so the catalog outlives the cluster
  6. Describe what garbage collection cleans up, and why retiring a restore point may not free space right away
Overview · 01

Day two: you now own the protector

This section maps your Veeam Data Platform maintenance routine onto Veeam Kasten: the equivalent of patching, job-health checking, and configuration backup — and where each parallel stops being useful.

As a Veeam Data Platform administrator you have a rhythm: patch on your schedule, read job sessions in the morning, keep a configuration backup. Veeam Kasten asks for the same three habits in a different shape — a set of services running inside the cluster it protects, upgraded with the Helm release you installed, observed through metrics rather than an open console, and protected by a policy it creates for itself.

Two differences change the calendar. Cadence: Veeam Kasten ships far more frequently than Veeam Data Platform — the maintenance guidance is to always upgrade, noting releases every two weeks. And the floor moves: distribution versions no longer actively supported by their vendor or community are not supported by Veeam Kasten either, so a cluster upgrade you do not own can put your backup platform out of support.

Two ideas to carry through this module

Everything that follows — upgrades, monitoring, catalog protection, housekeeping — falls out of these two.

01
The protector is a workload.
Veeam Kasten runs as services in a namespace on the cluster, so it inherits the cluster's fate: node loss, storage failure, a namespace deleted by accident, an unsupported Kubernetes upgrade.
02
The catalog is the product.
Restore points are only useful while something knows they exist — the catalog is that something: Veeam Kasten's own record of every restore point, policy, and action, playing the role the configuration database plays for a Veeam Backup & Replication server. Veeam Kasten Disaster Recovery exists to protect that catalog, and catalog storage space is also what gates your upgrades.
Your Veeam Data Platform habitThe Veeam Kasten equivalentWhere the parallel breaks
Patch the backup server, then upgrade components Upgrade the Helm release in the Veeam Kasten namespace, reusing your current values Two constraints have no console equivalent: a four-version maximum per upgrade, and at least 50% free space in catalog storage
Read job sessions in the console each morning Read the dashboard's compliance states, then the action metrics behind them Alerting is something you wire up: Veeam Kasten exposes a Prometheus endpoint for a central system to extract data from
Keep a configuration backup of the backup server Enable the Veeam Kasten Disaster Recovery (KDR) policy, which backs up Veeam Kasten's own resources and catalog to a location profile Recovery depends on a passphrase you stored and a location profile configured on the target cluster
Watch repositories for space and stale data Let the garbage collector clean up resources that are orphaned or past their expiration period Retiring a restore point does not always free space right away, and deduplication can make the reclamation minimal
Remember

Three of the four duties above — upgrades, dashboard health, catalog protection — touch catalog storage. If you take one number from this module, take 50%: the free space Veeam Kasten needs in catalog storage for upgrades.

Upgrades · 02

Upgrading Veeam Kasten, and keeping pace with the cluster

The upgrade rules, the command that performs the upgrade, and a planner for deciding whether you are one hop or several from current — plus the version floor you do not control: the Kubernetes and OpenShift releases underneath you.

The two rules that decide your upgrade plan

Veeam Kasten upgrades are supported across a maximum of four versions (for example, 2.0.10 to 2.0.14). If your instance is further behind, a step upgrade process is recommended, using the --version flag with helm upgrade to control the version jumps — and at least 50% free space is required in catalog storage.

You do not have to work the arithmetic out by hand: the System Information page (Settings menu, navigation sidebar) shows catalog free space and your recommended upgrade path. From a terminal, k10tools primer upgrade finds the recommended path and checks there is adequate space, for Helm deployments — it requires internet access to gcr.io, so on an air-gapped cluster use the System Information page instead. Download k10tools before you need it: it ships separately for Linux, macOS, and Windows, linked from the Veeam Kasten Tools page.

shell
./k10tools primer upgrade
Catalog space is the constraint people trip over

A release may perform a catalog schema upgrade, which requires at least 50% of free space in the catalog-pv-claim persistent volume — the claim's size may need increasing first. The figure is in the dashboard under Settings > System Information > Upgrade Status.

The upgrade itself

An upgrade is a Helm upgrade of the release you installed — the documented example assumes the kasten-io namespace and release name k10. The sequence refreshes the chart repository, captures your current values, and upgrades using them, so your configuration survives.

shell · upgrade to the latest release
helm repo update && \
  helm get values k10 --output yaml --namespace=kasten-io > k10_val.yaml && \
  helm upgrade k10 kasten/k10 --namespace=kasten-io -f k10_val.yaml

For a step upgrade, the same sequence carries a pinned version — this is the form the upgrade primer prints as its recommended upgrade path, with the target release on the end.

shell · one hop of a step upgrade
helm repo update && \
  helm get values k10 --output yaml --namespace=kasten-io > k10_val.yaml && \
  helm upgrade k10 kasten/k10 --namespace=kasten-io -f k10_val.yaml --version=4.5.6
Heads up

Read the Upgrade Notes for every release you pass through, not only the one you land on — that is where the breaking details live. If Generic Storage Backup is in use and a new Kanister-tools image ships, extra steps may be needed to update the Kanister sidecar image.

Recent Upgrade Notes exampleWhat breaks if you skip it
An app_namespace label was added to per-application metrics Prometheus queries that pin the exact label set may need updating
Metrics sourced through Red Hat ACM Observability moved from cluster_id to cluster_uid Dashboards and alert rules filtering on the old label need changing
Policy, profile, and action names became limited to 63 characters Names above that are rejected at creation time
Interactive — plan your own upgrade
Try it · upgrade-path planner

Is your instance one hop from current, or several?

Answer both questions as your cluster looks today. The planner applies only the two documented rules: the four-version support window and the catalog free-space requirement.

1 · How many releases behind the target version are you?
Count the releases between your running version and the one you want to land on.
2 · How much free space is in catalog storage?
Read it from the dashboard under Settings > System Information > Upgrade Status, or from the upgrade primer.

Choose an answer to each question above, then select Plan my upgrade.

The planner applies the documented upgrade rules to your two answers; it does not read your cluster.

Keeping pace with Kubernetes

The other half of staying current is the platform underneath: Veeam Kasten publishes the certified Kubernetes distributions and respective OpenShift versions it supports. A single release can move both ends of that list — 8.5.9 added support for Kubernetes 1.34 and removed support for Kubernetes 1.30, while OpenShift 4.17 clusters continued to be supported.

KubernetesRed Hat OpenShiftNotes
1.344.21Supported
1.334.20Supported
1.324.19Supported
1.314.18Supported
1.304.17Kubernetes version only supported when deployed as an OpenShift cluster
1.294.16Kubernetes version only supported when deployed as an OpenShift cluster

Check the matrix in the guide for the release you are running before you plan a cluster upgrade.

Pro tip

Put the cluster's Kubernetes upgrade on the same calendar as the Veeam Kasten upgrade: a single release can add one supported version and remove another. If the platform team moves first, your options narrow to whichever release supports the new version; moving Veeam Kasten first keeps the choice. Agree in writing who signs off on any cluster upgrade that would drop the running release out of the supported matrix — the published list of certified Kubernetes and OpenShift versions — otherwise the backup platform loses support by nobody's decision.

Monitoring · 03

Watching Veeam Kasten itself

From the morning glance to the support case: three layers of monitoring, the alerts worth creating first, and the order to gather diagnostics in when something looks wrong.

Layer one: the dashboard

The top of the dashboard shows the cluster's applications, its policies, and a summary of the backup data footprint. Filtered to applications with stateful services, each lands in one of four states — the closest thing here to your morning read of job sessions.

Unmanaged

No protection policy covers this object.

Non-compliant

A policy applies, but its actions are failing or have not been invoked yet — for example, right after policy creation.

Compliant

A policy applies and its service-level agreements (SLAs) are being respected.

Removed

Objects that no longer exist on the cluster; filter to this state to find a removed application and restore it.

Layer two: the built-in Prometheus instance

Veeam Kasten integrates with Prometheus, exposing an endpoint a central system can extract data from; the built-in instance defaults to 8Gi of persistent storage and a 30d retention period, changeable through the prometheus.server.persistentVolume.size and prometheus.server.retention Helm values. Leave that server enabled — disabling it reduces functionality including usage data, reporting, and the multi-cluster dashboard, and it can be re-enabled during a Helm upgrade with --set prometheus.server.enabled=true.

Action metrics are the ones you will query first: Veeam Kasten records counts for cluster and application-specific actions, labels them with the action's context, and includes the final status as state for ended actions — values including pending, running, attempt_failed, failed, succeeded, cancelled, skipped, and deleting.

PromQL · successful backups in the past 24 hours
sum(round(increase(action_ended_total{action="backup",state="succeeded"}[24h])))

Read it as: how many backup actions finished successfully in the last 24 hours — action_ended_total is the metric, the braces filter to successful backups, [24h] is the lookback window, and increase, sum, and round collapse it to one number.

Swap the labels and you have the query that matters more: sum(round(increase(action_ended_total{action="restore",state="failed"}[1h]))) returns failed restores in the past hour.

Layer three: your existing monitoring stack

Metrics leave the cluster two ways: Prometheus remote write pushes them to Prometheus-compatible endpoints such as Grafana, Datadog, or Thanos — the recommended route for most use cases — or an external Prometheus scrapes the built-in server. Grafana visualizes what Prometheus collected; alerts fire when metrics cross your thresholds. That stack usually belongs to a platform or observability team — name who owns wiring the two alerts below before you assume they exist.

The two alerts to create first

The product's own guidance: alert on any actions where state=failed, and on Catalog Volume Used Space > 50%, because that condition could impact Veeam Kasten upgrades. The second is the alert that protects your upgrade window from Section 02. For version tracking, the k10_build_info Prometheus gauge metric exposes the running version as a label.

When something looks wrong

Try it · the order to work in

From "that looks wrong" to a support case

Work down this list rather than starting at the bottom. Click a step to see what it involves — one opens at a time.

  1. Confirm which actions are failing and on which applications, using the compliance states and the action list. A non-compliant application tells you a policy's actions are failing or have not run yet.

  2. Admin users running 4.5.7 or later can get support logs from the System Information page under the Settings menu in the navigation sidebar — no terminal required.

  3. The debug script generates k10_debug_logs.tar.gz with separate log files per Veeam Kasten service; it assumes your default context points at the cluster and the kasten-io namespace, with flags for a different namespace or output file. --prom-duration also gathers metrics from the built-in Prometheus server (duration drives size); --prom-metrics-only separates metric from log collection.

  4. The k10tools binary has commands that help validate whether a cluster is set up correctly before installing Veeam Kasten and debug the Veeam Kasten micro services. Admin users can also validate storage classes from the System Information page — the state "Unknown" is shown until validation is run.

  5. Support runs through Veeam Kasten Community Support or a case opened at the Veeam customer portal; collecting the bundle first turns a case into a diagnosis instead of a request for logs. Before the case goes in, check the Veeam knowledge base filtered to Veeam Kasten (veeam.com/knowledge-base.html) — searching the exact error text often ends the incident there — and the Veeam Kasten support group on the Veeam Community Resource Hub (community.veeam.com).

shell · the debug bundle
curl -s https://docs.kasten.io/downloads/9.0.2/tools/k10_debug.sh | bash;

The bundle also includes a Prometheus health-check section — curated metrics for the instance's storage and retention health.

The two kubectl verbs under all of it

Every step above eventually rests on two generic Kubernetes commands — cluster tooling, not Veeam Kasten features — that map onto triage instincts you already have.

The commandThe question it answersYour existing instinct
kubectl get pods "Is it running?" — one line of live state per pod, the same view the install walkthrough had you watch in Module 03. Scanning the job monitor for red before reading anything else.
kubectl describe on the stuck pod "Why is it broken?" — full detail for one resource, ending in an Events list that records what last went wrong (a failed image pull, an unschedulable pod, a failed mount). Opening the job's log after the monitor showed red — evidence first, changes second.

Every escalation path above assumes you can answer these two questions before the case is opened. A copyable form of the second: kubectl describe pod <pod-name> --namespace kasten-io — take the pod name from the kubectl get pods output. A third verb, kubectl explain, prints the cluster API's own documentation for any resource field — useful later, once you express policies as code.

Protecting the catalog · 04

Who backs up the backup system?

The section your director or CISO will ask about first: what Veeam Kasten Disaster Recovery protects, which mode fits your storage, and the recovery path from an empty cluster back to a working catalog.

Veeam Kasten is a stateful application on the cluster, so it must back up its own data — the job of the Veeam Kasten Disaster Recovery (KDR) policy. KDR recovers the platform from unintended deletion of Veeam Kasten or its restore points, failure of its underlying storage, or accidental destruction of the cluster it is deployed on; the API exposes the same capability as a KastenDR object for listing KDR restore points and restoring from one.

The Veeam Data Platform parallel is configuration backup: both are scheduled, both protect the metadata that makes restore points findable, both are worthless if you cannot decrypt them. Where it breaks is the dependency list — after enabling KDR, retain the source Cluster ID, the KDR passphrase or external secret manager details, and the KDR location profile details and credential, without which restore point catalog recovery will not be possible.

The Setup Kasten DR page in the Veeam Kasten dashboard, reached from the Settings section of the navigation sidebar, showing a Location Profile selector with an Add New button, a Passphrase Method choice of Passphrase, HashiCorp Vault, or AWS Secrets Manager, a passphrase field, and an Enable Kasten DR button
Where you turn it on. On the Setup Kasten DR page, under the Settings menu in the navigation sidebar, you specify a location profile for the exported KDR backups and the passphrase method used to encrypt them. Restore Kasten sits directly below it in the sidebar — the page you will use on the far side of a disaster. ↔ Click the image to view it full size.
Two constraints to settle before you enable it

Choose a location profile that supports immutable backups — the guide states this strongly, so the catalog can be recovered after incidents including ransomware and accidental deletion — and check the target: Veeam Repository location profiles cannot be used as a destination for KDR backups. Passphrase options include a passphrase you supply, HashiCorp Vault, and AWS Secrets Manager, with Azure Key Vault Secrets added as a passphrase provider for Disaster Recovery.

Choosing a KDR mode

The KDR mode specifies how internal Veeam Kasten resources are protected; set it before enabling the KDR policy — changes only apply to future runs. From v8.0.0 all installations default to Quick DR (Local Catalog Snapshot), which should only be enabled if the storage provisioner behind Veeam Kasten's persistent volume claims supports both creating storage snapshots and restoring the existing volume from one.

ModeRecommended whenWhat each policy run does
Quick DR (Local Catalog Snapshot) Storage used for Veeam Kasten persistent volume claims supports both creating storage snapshots and provisioning a volume from a snapshot Creates a local snapshot of the catalog persistent volume claim and incrementally exports only the minimally required catalog data
Quick DR (Exported Catalog Snapshot) Storage can create snapshots but cannot provision a volume from one; or you want to reduce local snapshot retention without affecting exported backups. May be selected on any snapshot-capable storage for the highest level of resilience Everything the local-snapshot mode does, plus an incremental export of the catalog snapshot data
Quick DR (No Catalog Snapshot) No available cluster storage supports snapshot creation, or there is no requirement to recover local restore points or action history Incrementally exports only the minimally required catalog data; does not support recovery of local restore points and action history
Legacy DR Supported for backwards-compatibility only — the mode is deprecated and will be removed in a future release, and all clusters should be migrated to a supported Quick DR configuration Exports a full copy of the catalog database

Quick DR modes protect more resource types than Legacy DR — policy presets, transform sets, blueprint bindings, basic user policies; reports, action pod specs, and audit configuration are protected by neither. Legacy mode is selected explicitly with the Helm value kastenDisasterRecovery.quickMode.enabled=false.

The policy KDR creates for you

Enabling KDR automatically creates k10-disaster-recovery-policy, which backs up Veeam Kasten's resources and catalog data to an external location profile. It appears on the Policies page; Run Once starts a manual backup, Edit changes frequency and retention. Match its frequency to the lowest recovery point objective (RPO) policy on the cluster.

The k10-disaster-recovery-policy detail page in the Veeam Kasten dashboard, tagged Snapshot plus Export in the kasten-io namespace, showing a valid status, an immutable location profile for blueprint actions and export, hourly snapshot and export frequency, a retention schedule of 4 hourly and 1 daily, weekly, monthly and yearly, export durability, and Edit, Edit YAML, Run Once, Pause and Delete controls
The policy you did not create, and should still review. Frequency and retention are editable, and the location profile shown is an immutable one. If the layout looks like your own application policies, that is the point — KDR is a policy like any other, pointed at Veeam Kasten's own namespace. ↔ Click the image to view it full size.

The recovery path, end to end

Interactive — click each stage
Rebuilding Veeam Kasten after losing a cluster
Click a stage to inspect it.
The Restore Kasten wizard in the Veeam Kasten dashboard at its Configure Restore step, with steps Configure Restore, Select Restore Point and Summary listed on the left, and fields for the location profile holding exported Kasten DR backups, the Cluster ID of the source Kasten instance, a Passphrase Method choice, and the passphrase used to configure the Kasten DR policy on the source instance
Stage 05 in the dashboard. Recovering an instance asks for the location profile, the source instance's cluster identifier, and the passphrase used when the KDR policy was configured — then a restore point and a summary. Every field here was decided months earlier — which is why the passphrase belongs in your secrets store and runbook, not in someone's memory. ↔ Click the image to view it full size.
Pro tip

The guide's recommendation is to enable Veeam Kasten DR and regularly test the process. Treat the KDR test like the restore tests you already run: on a schedule, with the passphrase retrieved from where it is meant to live, not from your own notes.

For a customer conversation

"Who backs up the backup system?" ends a lot of Kubernetes protection projects late. The answer here is concrete: a dedicated policy over the platform's own namespace, the catalog exported encrypted to an immutable external location profile — surviving ransomware and accidental deletion — and recovery onto a new cluster from that export.

Housekeeping · 05

Housekeeping, and a healthy week in the life

The last section covers the cleanup Veeam Kasten does on its own, the space behavior that surprises people, and a maintenance rhythm you can put on a calendar this week.

A garbage collector daemon cleans up resources that are orphaned or past their expiration period. Its list is specific: actions above the retained maximum (oldest first, per action type), RestorePointContents for expired manual backups per their expiresAt value, and the temporary objects restores leave behind — CSISnapshot objects, persistent volumes, profiles, services, network policies, secrets, and config maps. Export pods are cleaned up after the configured grace period.

Helm optionWhat it tunes
garbagecollector.daemonPeriodThe length of time between two consecutive garbage collection events, in seconds
garbagecollector.keepMaxActionsHow many finished actions to keep — no actions deleted if the value is less than or equal to zero
garbagecollector.actions.enabledEnables the action collectors
Retiring a restore point does not mean the space comes back today

When restore points are retired — manually or by a retention schedule — the cleanup is not immediate for every resource, and backup data in an object store may take a significant amount of time to be removed. Shared data references, aggregated data awaiting garbage collection, immutable-backup version retention, and re-referencing safety windows all delay it — and deduplication can mean minimal or no reclamation at all.

Log volume is the other thing worth setting deliberately: retention is tuned with Helm values including a rotation count and a size threshold that triggers rotation, applied during an upgrade of the release.

shell · tuning log retention
helm upgrade k10 kasten/k10 -n kasten-io --reuse-values \
  --set logging.retention.rotateCount=12 \
  --set logging.retention.maxFileSize=2G

A healthy week in the life

Nothing below is a product feature — it is a rhythm assembled from this module's maintenance guidance. The daily items take minutes; the monthly and quarterly ones decide whether a bad day goes well.

  1. 1
    Daily
    Read the dashboard: any application that moved to non-compliant, and any failed action.
  2. 2
    Weekly
    Confirm the KDR policy is running to schedule, and check catalog storage space against the 50% mark.
  3. 3
    Monthly
    Test restores rather than waiting for a disaster — in the same namespace, a different namespace, and a different cluster — and test the KDR process itself.
  4. 4
    Quarterly
    Plan the next upgrade hop, and review the supported Kubernetes and OpenShift matrix against the cluster's roadmap.
  • Monitoring configuration is reviewed as the deployment evolves — the right metrics, alerts for new issues.
  • Alerts exist for failed actions and for catalog volume used space, the two conditions the guide calls out.
  • The KDR passphrase is retrievable by someone other than you, from a passphrase provider rather than a personal note. Name that second person or team in the runbook — it is a decision your team makes explicitly, not a default the product supplies.
  • The upgrade path is known before the upgrade window opens, from the System Information page or the upgrade primer.
Knowledge check · 06

Check your understanding

Six questions on the maintenance duties covered in this module. Each one has a single best answer, and every option explains itself.

0%
Complete the knowledge check to see your score.
Recap · 07

What you covered

Day-two ownership of Veeam Kasten, from the upgrade calendar to the catalog that has to outlive the cluster.

01
Planning an upgrade inside the four-version support window, with at least 50% free catalog storage, using the System Information page or the upgrade primer to find the path
02
Keeping pace with the Kubernetes and OpenShift versions Veeam Kasten supports, and sequencing cluster upgrades against product upgrades
03
Monitoring Veeam Kasten in three layers — dashboard compliance states, the built-in Prometheus instance and its action metrics, and your own monitoring stack — plus the two alerts to create first
04
Collecting diagnostics in order: dashboard, support logs from System Information, the debug bundle, the platform checks, then the support case
05
Protecting Veeam Kasten itself with the KDR policy: choosing a mode for your storage, an immutable location profile, a passphrase you can retrieve, and the rebuild path back to a working catalog
06
Housekeeping: what the garbage collector cleans, why retirement may not free space right away, log retention, and a daily-to-quarterly maintenance rhythm

Next: Module 05 turns from the platform to the work you do with it — building and scheduling policies, the restore paths, access control, and the daily administration routine.