Terraform vs Crossplane: IaC vs Kubernetes-Native Infrastructure
| Feature | Terraform | Crossplane |
|---|---|---|
| Paradigm | Imperative plan/apply | Kubernetes-native declarative |
| State | External state file | Kubernetes etcd |
| Reconciliation | Manual terraform apply | Continuous (controller loop) |
| Language | HCL | Kubernetes YAML/CRDs |
| Drift correction | Detect only (plan) | Auto-corrects |
| Multi-cloud | Yes (providers) | Yes (providers) |
| Composability | Modules | Compositions + XRDs |
When to Use Terraform
- Team knows HCL and has existing Terraform codebases
- You need to manage resources outside Kubernetes
- One-time provisioning is sufficient (no continuous reconciliation needed)
- Complex provider ecosystem requirements
When to Use Crossplane
- Your platform is Kubernetes-centric
- You want infrastructure to self-heal (continuous reconciliation)
- You are building an internal developer platform with self-service
- You want a single control plane for apps and infrastructure
Can You Use Both?
Yes. A common pattern: Terraform provisions the base infrastructure (VPCs, Kubernetes clusters, IAM) and Crossplane manages application-level resources (databases, caches, queues) from within Kubernetes.
My Recommendation
If your organization is heavily invested in Kubernetes and building an IDP, Crossplane is worth adopting for application-level infrastructure. Keep Terraform for foundational infrastructure that changes infrequently.
Book a consultation to design your infrastructure management strategy.