Crossplane: Khi IaC Gặp Kubernetes — Liệu Có Thay Thế Được Terraform?

Terraform Đã Làm Tốt, Nhưng Có Một Vấn Đề
Terraform thống trị mảng Infrastructure as Code suốt gần một thập kỷ. HCL (HashiCorp Configuration Language) quen thuộc, hệ sinh thái hơn 3000 provider, workflow plan → apply dễ hiểu. Nhưng năm 2023, HashiCorp đổi license từ MPL sang BUSL — một cú sốc khiến nhiều team phải tìm đường rẽ nhánh (OpenTofu ra đời từ đó).
Nhưng license không phải vấn đề duy nhất. Terraform là công cụ standalone, chạy ngoài cluster. State file quản lý tập trung, cần remote backend để locking. Và quan trọng nhất: Terraform không "sống" cùng infrastructure — nó chỉ chạy khi gọi lệnh.
Trong khi đó, Kubernetes đã trở thành nền tảng triển khai mặc định. Vậy câu hỏi đặt ra: tại sao không dùng chính Kubernetes để quản lý infrastructure?
Đó chính xác là những gì Crossplane làm. Và tháng 11/2025, Crossplane đã chính thức CNCF graduation — cùng đẳng cấp với Kubernetes, Prometheus, Helm.
Crossplane Là Gì?
Crossplane là một Kubernetes operator — cài nó vào cluster, và nó biến cluster thành một control plane để provision cloud infrastructure. Thay vì chạy terraform apply, dùng kubectl apply để tạo RDS database, S3 bucket, hay IAM role.
apiVersion: rds.aws.upbound.io/v1beta1
kind: Instance
metadata:
name: my-database
spec:
forProvider:
region: ap-southeast-1
dbInstanceClass: db.t3.micro
engine: postgres
allocatedStorage: 20
masterUsername: admin
passwordSecretRef:
name: db-password
key: password
namespace: crossplane-system
Và thế là sẽ có một RDS instance — được quản lý bởi Kubernetes control loop, liên tục reconcile để đảm bảo trạng thái thực tế khớp với cấu hình mong muốn.
Điểm khác biệt cốt lõi: Control Plane vs CLI Tool
- Terraform: Chạy lệnh → Terraform so sánh state file với thực tế → tạo/kill resource. Xong việc thì Terraform "ngủ" cho đến lần chạy sau.
- Crossplane: Khai báo resource YAML → Crossplane liên tục theo dõi và điều chỉnh. Nếu ai đó xóa S3 bucket bằng tay? Crossplane tự tạo lại.
Đây là sự khác biệt giữa imperative runs và continuous reconciliation.
CNCF Graduation: Cột Mốc Quan Trọng
Tháng 11/2025, Crossplane trở thành dự án graduated trong CNCF — mức trưởng thành cao nhất, bên cạnh Kubernetes, Prometheus, Envoy. Để đạt được điều này, Crossplane đã:
- Có hơn 3000 contributor từ 480+ công ty
- Hơn 70 public adopters bao gồm Nike, Nokia, Grafana, NASA, SAP, IBM
- Hoàn thành 2 security audit toàn diện
- Đạt OpenSSF Best Practices badge
- Phát hành hơn 100 releases với LTS policy rõ ràng
- Xếp hạng #13/231 CNCF projects về số lượng PR author — top 10%
Con số này không phải marketing — nó là tín hiệu cho thấy Crossplane đã sẵn sàng cho production.
Crossplane vs Terraform: Khi Nào Dùng Cái Nào?
1. Cách tiếp cận
| Terraform | Crossplane | |
|---|---|---|
| Kiến trúc | CLI standalone | Kubernetes operator |
| Ngôn ngữ | HCL | YAML |
| State | State file tập trung | etcd (qua K8s API) |
| Reconciliation | Theo lần chạy | Liên tục |
| License | BUSL | Apache 2.0 |
| Hệ sinh thái | 3000+ provider | Đang phát triển nhanh |
2. Workflow developer
Terraform: Viết HCL → terraform plan → review → terraform apply → merge PR. Cần CI/CD pipeline để automation, cần remote state backend (S3 + DynamoDB, Terraform Cloud). Cần quản lý state locking để tránh race condition.
Crossplane: Viết YAML → kubectl apply → done. Không cần pipeline riêng, không cần state file, không cần locking. K8s tự lo hết.
Với developer đã quen Kubernetes, Crossplane giảm cognitive load đáng kể. Một API (kubectl) cho cả app và infra.
3. Khi nào dùng Crossplane?
- Team đã có Kubernetes cluster và quen với hệ sinh thái K8s
- Đang xây dựng internal developer platform (IDP)
- Muốn developer tự provision resource mà không cần biết Terraform
- Cần continuous reconciliation (tự động sửa drift)
- Muốn open-source thực sự (Apache 2.0, không lo license thay đổi)
4. Khi nào vẫn nên dùng Terraform?
- Bạn quản lý infrastructure ở level foundational (VPC, IAM, EKS cluster)
- Team không dùng Kubernetes hoặc không muốn vận hành cluster
- Bạn cần provider ecosystem trưởng thành (3000+ provider)
- Bạn đã đầu tư nhiều vào Terraform module và workflow hiện tại
- Bạn cần
terraform planđể review thay đổi trước khi apply
5. Giải pháp hybrid: Dùng cả hai
Pattern phổ biến nhất hiện nay không phải là "chọn một" mà là dùng cả hai cho đúng việc:
- Terraform provision foundational infrastructure: VPC, subnets, IAM roles, EKS cluster, security groups
- Crossplane quản lý tài nguyên bên trong cluster: RDS databases, S3 buckets, cache clusters, message queues, service accounts
Đây là pattern được Upbound (công ty đứng sau Crossplane) khuyến nghị, và được nhiều team production áp dụng.
Composition: Sức Mạnh Thực Sự Của Crossplane
Terraform có module, Crossplane có Composition. Đây là tính năng cho phép định nghĩa abstract API riêng cho infrastructure:
apiVersion: apiextensions.crossplane.io/v1
kind: Composition
metadata:
name: postgres-instance
spec:
compositeTypeRef:
apiVersion: database.example.com/v1alpha1
kind: XPostgreSQL
resources:
- base:
apiVersion: rds.aws.upbound.io/v1beta1
kind: Instance
spec:
forProvider:
engine: postgres
dbInstanceClass: db.t3.micro
allocatedStorage: 20
...
Sau đó, developer chỉ cần:
apiVersion: database.example.com/v1alpha1
kind: PostgreSQL
metadata:
name: my-app-db
spec:
size: small
backupRetention: 7
Crossplane tự động "biên dịch" request đơn giản này thành RDS instance với đầy đủ security group, subnet group, parameter group — theo policy do platform team định nghĩa.
Đây chính là nền tảng của platform engineering: platform team định nghĩa "paved road", developer đi trên đó mà không cần biết chi tiết hạ tầng.
Hạn Chế Và Lưu Ý
Không có công cụ nào hoàn hảo. Crossplane có những điểm cần cân nhắc:
- Debugging khó hơn: Khi resource không provision được, log nằm trong pod Crossplane — không phải lúc nào cũng dễ tìm
- Learning curve: Cần biết Kubernetes trước khi học Crossplane. YAML verbose hơn HCL
- Composition overhead: Với team nhỏ, việc viết Composition cho từng loại resource có thể là over-engineering
- Provider coverage: Dù đang phát triển nhanh, số lượng provider vẫn ít hơn Terraform đáng kể
- Drift detection: Crossplane tự sửa drift (tốt), nhưng đôi khi cần biết drift xảy ra trước khi nó được sửa (cần tooling bổ sung)
Takeaway Cho Developer
Takeaway cho developer đang transition sang DevOps/SA:
- Crossplane không thay thế Terraform — ít nhất là không trong 1-2 năm tới. Nhưng nó đang định nghĩa lại cách chúng ta nghĩ về IaC
- Học Crossplane nếu làm platform engineering hoặc team dùng Kubernetes nặng
- Giữ Terraform nếu quản lý multi-cloud foundational infrastructure hoặc team không dùng Kubernetes
- Pattern hybrid (Terraform cho foundation + Crossplane cho workload resources) là pragmatic choice cho hầu hết team hiện nay
- CNCF graduation là tín hiệu mạnh: Crossplane đã sẵn sàng production, không phải "cool toy" nữa
Một câu hỏi đáng suy nghĩ: team đã dùng Kubernetes để deploy app, vậy tại sao chưa dùng nó để provision infrastructure?
Bài viết được hỗ trợ bởi AI (Amy 🌸). Nội dung đã được kiểm duyệt bởi tác giả.
Related Posts
GitOps: Deploy Bằng Git Thay Vì Click Chuột
Mọi thay đổi trên production đều bắt đầu từ một git commit. Không SSH vào server, không chạy script tay. GitOps biến Git thành single source of truth cho infrastructure.
Terraform Cho Developer: IaC Không Khó Như Nghĩ
Đã bao giờ click-click trên AWS Console rồi quên mất đã tạo gì? Terraform giải quyết chính xác vấn đề đó. Hướng dẫn từ zero cho developer.
AI Đang Viết Infrastructure Code Nhanh Hơn — Nhưng Ai Kiểm Soát?
AI giúp viết Terraform, CloudFormation chỉ trong vài giây. Nhưng tốc độ tạo code không đi kèm với khả năng kiểm soát — đây là rủi ro mà hầu hết team DevOps đang bỏ qua.