The scenario below is built from real patterns we see on production clusters — a forced upgrade, a CVE backlog, and the overlap between them. Numbers are illustrative.
Use Case
Findings
The checkout-api Deployment uses autoscaling/v2beta2 for its HorizontalPodAutoscaler — removed in 1.26, so the upgrade to 1.31 will silently drop autoscaling. The same workload's image carries a critical OpenSSL CVE with a fix available. It blocks the upgrade and is your top security exposure.
Rebuild on the patched base image and migrate the HPA to autoscaling/v2. Retires a critical CVE and an upgrade blocker in a single deploy.
payments-worker is managed by an operator declaring a deprecated CRD version that won't serve on 1.31. Tier-C runtime signals confirm the deprecated API is actually being called. The worker image also carries several high-severity package CVEs with fixes available.
Bump the operator to a release that serves the current CRD version, and pull the patched worker image in the same rollout.
auth-service still ships networking.k8s.io/v1beta1 Ingress objects — removed long before 1.31 — and the pod runs as root with a critical CVE in a base library. Public-facing and unowned: no owner label, no PodDisruptionBudget.
Migrate Ingress to networking.k8s.io/v1, rebuild on the patched image, drop root, and add an owner label + PDB.
11 CronJobs still declared as batch/v1beta1 — removed in 1.25. They'll stop scheduling the moment the cluster crosses the version line. Aggregated by kind so you see every namespace affected, not just a sample.
Update the manifests to batch/v1 (spec is compatible) and re-apply. Pure manifest change, no image rebuild.
5 production Deployments run a single replica with no PodDisruptionBudget. The node drains that happen during a version upgrade will take them fully offline — exactly when you can least afford it.
Scale to ≥2 replicas and add a PDB with minAvailable: 1 before you start the rolling upgrade.
7 workloads pull :latest — unpinned and unscannable for drift — and 4 request 8Gi memory limits against a p95 usage under 900Mi, wasting scheduling headroom. Right-sizing flags them HIGH on limit, fine on CPU.
Pin images to a digest or semver tag, and bring memory limits down toward observed p95 + headroom.
Example outcome: the team fixed the three workloads that carried both a critical CVE and an upgrade blocker first, then completed the version upgrade with a much smaller blast radius.Illustrative scenario — not a customer quote
Also Identified
["*"] verbs to a default ServiceAccountOne read-only Helm install · first report in under an hour · secret values & images never leave your cluster
Connect your cluster