1. Crossplane 作为 IDP 基础设施层的工程实践中 Composition/XRD 定义自定义 API、Provider 生态以及与 Terraform 的取舍(声明式与命令式、drift detection、state 管理)
如何将 Crossplane 作为 IDP 基础设施层的工程实践落地,包括用 Composition/XRD 定义自定义 API、利用 Provider 生态,以及与 Terraform 在声明式 vs 命令式、drift detection 和 state 管理上的取舍?
- XRD(Composite Resource Definition)与 Composition 定义自定义 API 的机制
- Provider 生态:官方与社区 Provider 如何对接云厂商与既有资源
- Crossplane 与 Terraform 在声明式、漂移检测、状态管理上的本质差异
Crossplane 是"Kubernetes 原生的基础设施编排器",它把云资源建模为 Kubernetes 的 CRD(自定义资源)。工程做法是:用复合资源定义(Composite Resource Definition, XRD)声明一个自定义 API(如 Database、VPC),并写 Composition 把该复合资源映射为具体的 Provider 配置(如 AWS 的 RDS、VPC),开发者只需 apply 一个 Database 对象即可获得完整环境。Provider 生态(provider-aws、provider-gcp、provider-azure 及社区 Provider)负责把 CRD 翻译成云 API 调用。与 Terraform 相比,Crossplane 是声明式、持续纠偏(reconcile loop)的:它常驻运行,持续把实际状态拉回期望状态,天然具备 drift detection;而 Terraform 是命令式/计划式(plan/apply)的,状态存储在 state 文件(远程或本地)中,漂移需要手动 terraform plan 才发现。Crossplane 把状态保存在 Kubernetes 对象 status 中,与 GitOps 工作流天然融合,但复杂逻辑与 provider 覆盖度往往不如 Terraform 成熟。
两者的取舍本质是"持续纠偏的声明式"对"计划执行的命令式"。Crossplane 的优势在于与 Kubernetes 生态、GitOps、RBAC 无缝集成,且由集群管理状态无需 state 文件;Terraform 的优势在于生态成熟、provider 丰富、可插拔执行。IDP 场景下若强调"开发者自助 + 平台治理",Crossplane 更贴合;若依赖既有 Terraform 资产,则常采用 provider-terraform 或混合方案。
kubectl get providers
kubectl get composite.resource.definitions
kubectl get xrd