About this scenario
The legacy namespace was deleted and never goes away: it still shows Terminating. Its Pods are gone, but something inside it is still there.
The team that ran the backup operator in legacy uninstalled it before deleting the namespace. Other teams still use Backups.
Find what holds the namespace and let it finish.
Objectives
- Find what the namespace waits for
- Find the object that holds it
- The legacy namespace is gone
- The Backup CRD stays installed
What you'll practice
- A namespace finishes deleting only when everything in it is gone. An object with a finalizer waits for its controller to remove it.
- When the controller is gone, nobody removes the finalizer. Removing it by hand skips the cleanup it stood for, so check what it was meant to do (here, deleting snapshots) and do that first if it matters.
- The namespace's conditions tell you which resource types and finalizers are left, so you don't have to search every API.
- Uninstall an operator after deleting the objects it manages, not before.
How the playground works
The cluster runs entirely in your browser: a simulated API server, scheduler, kubelets and controllers, with virtual nodes in three zones. kubectl output follows the real formats, errors use the real messages, and the add-ons (CSI storage, Traefik, Envoy Gateway, cert-manager, Flux, Argo CD) behave like their real counterparts for the common paths. It's a simulation, so some behavior is simplified. Your progress is saved in this browser.