⚡ ~/naveed Interview Prep
⚡ Portfolio Home ✍️ Engineering Blog Deep Dives 🎯 Interview Hub 1,000+ Scenarios ☸️ Kubernetes Mastery Hub 24 Modules 🎮 DevOps Arcade & Quizzes Subnet Blitz ⚡ 🗺️ DevOps Roadmaps PDFs & Guides 🤖 Morpheus Analysis AI Quant ↗ 🛠️ Developer Tools Utilities 🧪 Labs & Experiments 📄 Interactive CV & Certs 🔗 All Links & Socials ⚡ Join The Dispatch (Weekly SRE Newsletter) →
← Back to All Platform Engineering & IDP Interview Questions Scenario 29 of 50 in Platform Engineering & IDP
Senior Platform Engineer Platform Engineering Control Planes & Crossplane Control Plane Upgrades
🎯 Target Role / Context: Senior Platform Engineer Interview · Control Plane Lifecycle

Q: Crossplane releases a major breaking upgrade for provider-aws (v0.40 -> v1.0.0 with Upjet architecture), deprecating older API groups (`rds.aws.crossplane.io/v1alpha1` -> `rds.aws.upjet.crossplane.io/v1beta1`). How do you execute this provider upgrade across production clusters without deleting active cloud databases?

Safely executing major version upgrades of Crossplane cloud providers without causing controller reconciliation downtime or resource deletion.

#Crossplane #Kubernetes #AWS Provider #API Migration #Platform Engineering
🎙️ Candidate Opening & Architectural Context
"Crossplane provider upgrades that alter API groups cannot be performed with a naive Helm upgrade. Doing so causes the Kubernetes API server to reject deprecated CRDs, or causes the new controller to treat existing AWS resources as untracked, creating orphan or duplicate resources."
Advertisement
⚡ Recommended Practice Lab

Want to master this scenario in a live sandbox? KodeKloud's CKA & CKAD Hands-On Certification Track covers this exact problem with hands-on terminal drills.

🛠️ Production Runbook & Step-by-Step Resolution

1

Pause Reconciliation on All Managed Resources

Before upgrading the provider, apply the `crossplane.io/paused: true` annotation across all managed resources to prevent active reconciliation during controller swap.

kubectl annotate instances.rds.aws.crossplane.io --all crossplane.io/paused=true
2

Deploy New Upjet Provider Alongside Legacy Provider

Install the new Upjet provider package alongside the old provider. Migrate Composite Resources (Compositions) to generate the new API group (`upjet.crossplane.io`), ensuring the `crossplane.io/external-name` matches the existing AWS resource identifier exactly.

apiVersion: pkg.crossplane.io/v1
kind: Provider
metadata:
  name: provider-aws-rds-upjet
spec:
  package: xpkg.upbound.io/upbound/provider-aws-rds:v1.2.0
Advertisement
3

Migrate State and Remove Legacy Provider

Remove the pause annotation on the new resource, confirm that the Upjet controller detects the existing AWS resource via its external name and enters `Ready: True`, then cleanly decommission the legacy provider package.

Pro Tip: Critical Guardrail: Always verify that `spec.deletionPolicy: Orphan` is active on every resource before migrating providers.
💡 The Senior SRE Gold Nugget (Key Architectural Takeaway)
"Upgrade Crossplane providers safely by pausing reconciliation, deploying the new provider in parallel, anchoring to existing external-names, and maintaining Orphan deletion policies."
⚡ 60-Second Elevator Pitch Talking Points
  • Pause Crossplane resource reconciliation using crossplane.io/paused annotations prior to provider upgrades.
  • Ensure the new provider compositions match the exact existing external-name to adopt cloud infrastructure.
  • Enforce deletionPolicy: Orphan across all resources to protect live production cloud assets.
Advertisement
Want more Platform Engineering & IDP scenarios?
Explore our complete collection of scenario-based Platform Engineering & IDP interview runbooks.
Browse All Platform Engineering & IDP Questions →