Skip to content

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

Karify98 & Amy 🌸·
Cover Image for 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 planapply 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 runscontinuous 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