Giải cứu ngân sách: Di chuyển Azure Functions sang Kubernetes miễn phí với GCP!
Lê Lân
0
Dự Án Di Cư Azure Functions và Container Apps Sang Kubernetes: Hiệu Quả, Tiết Kiệm Và Hiện Đại Hóa
Mở Đầu
Trong bối cảnh công nghệ chuyển đổi nhanh chóng và nhu cầu tối ưu hóa chi phí ngày càng cao, việc di chuyển hệ thống từ nền tảng này sang nền tảng khác một cách mượt mà mà không phải thay đổi mã nguồn trở thành bài toán khó đối với nhiều doanh nghiệp. Trong dự án gần đây, tôi đã thực hiện thành công việc chuyển mọi Azure Functions và Container Apps sang Kubernetes, tận dụng toàn bộ các tài nguyên miễn phí từ GCP thông qua tín dụng cloud, đồng thời giữ nguyên cấu trúc code gốc và nâng cao hiệu quả vận hành.
Bài viết này sẽ phân tích chi tiết thách thức, giải pháp, quy trình và kết quả đạt được trong dự án này. Bạn cũng sẽ được tìm hiểu về kiến trúc GitOps với ArgoCD và Blueprints, cùng cách kết hợp KEDA để giữ được khả năng mở rộng tự động theo kiểu serverless — một xu hướng hiện đại trong công nghệ đám mây.
🎯 Thách Thức
Khách hàng sử dụng Azure Functions Premium và Azure Container Apps với chi phí dao động khoảng £6.000 mỗi tháng. Tuy nhiên, tín dụng Azure của họ đang gần hết, gây áp lực về mặt kinh phí.
Stack ứng dụng của họ dựa trên sự kiện Storage Blob kích hoạt xử lý file. Mục tiêu chính được đặt ra:
Giảm đáng kể chi phí vận hành
Không sửa đổi code Azure Functions đang có
Xây dựng kiến trúc đa đám mây, cloud-agnostic
Sử dụng tối đa tài nguyên miễn phí và tín dụng GCP
Duy trì trải nghiệm serverless với khả năng tự động mở rộng
Điểm mấu chốt: Giữ nguyên code nhưng nâng cao hiệu quả và giảm chi phí đến mức tối đa bằng cách chuyển đổi nền tảng hạ tầng.
🛠️ Giải Pháp Triển Khai
1. Di chuyển sang Kubernetes với KEDA
Lựa chọn chính là sử dụng Kubernetes để chạy container của Azure Functions và Container Apps. Đặc biệt, sử dụng KEDA (Kubernetes Event-driven Autoscaling) làm bộ điều khiển mở rộng dựa trên sự kiện. KEDA được Microsoft dùng chính để auto scale Azure Functions nên rất phù hợp để đảm bảo tính serverless trong kiến trúc mới.
2. Áp dụng Terraform và GitOps với ArgoCD
Toàn bộ hạ tầng cloud (cluster Kubernetes, mạng VPC, NAT Gateway, Helm chart, ArgoCD, External Secrets...) được provision tự động bằng Terraform. Đặc biệt, quản lý cấu hình triển khai ứng dụng theo mô hình GitOps qua ArgoCD dạng App of Apps, giúp dễ dàng kiểm soát, tái tạo môi trường và audit.
3. Container hóa Azure Functions
Để giữ nguyên code gốc, chỉ cần tạo Dockerfile bản dựng chức năng mà không sửa đổi một dòng code .NET nào. Ví dụ Dockerfile:
FROM mcr.microsoft.com/dotnet/sdk:8.0 AS installer-env
Do các lý do tích hợp hệ thống cũ, Storage Blob vẫn duy trì trên Azure nhưng chi phí chỉ dưới £10/tháng vì chỉ phục vụ lưu trữ đơn thuần, còn phần compute thì chuyển hoàn toàn sang GKE.
Lợi ích chính: Không phải thay đổi mã, sử dụng các tài nguyên miễn phí, đồng thời giảm chi phí cực kỳ hiệu quả.
✅ Quy Trình Dự Án
Container hóa và triển khai ban đầu trên Azure AKS
Tạo cluster AKS thử nghiệm
Cài đặt ArgoCD theo mô hình App of Apps
Tích hợp KEDA với Azure Storage Queue
Sử dụng blueprint GitOps để quản lý manifest
Di chuyển hoàn toàn sang GCP GKE và vận hành không chi phí
Mô phỏng và nhân bản toàn bộ hạ tầng trên GKE
Tận dụng tín dụng GCP để tiết kiệm chi phí
KEDA kích hoạt trực tiếp từ Azure Blob Storage bằng ScaledObject cấu hình blobTrigger
Kiểm soát và tự động mở rộng
KEDA kết hợp với GKE Cluster Autoscaler đảm bảo auto scale linh hoạt
ArgoCD và GitOps giúp triển khai nhất quán, versioning dễ dàng
Hình minh họa tổng quan kiến trúc
💡 GitOps Blueprints Là Gì?
Khái niệm
GitOps Blueprints là các mẫu cấu hình, tài nguyên tái sử dụng được, version hóa trong Git, giúp thao tác triển khai ứng dụng và hạ tầng trên Kubernetes trở nên dễ dàng, có kiểm soát và nhất quán qua các môi trường (dev, staging, production).
Tại sao dùng Blueprints?
Tiết kiệm thời gian tái dùng cấu trúc
Dễ dàng mở rộng hoặc thay đổi môi trường
Tăng tính reproducibility và audit
Phù hợp với môi trường đa cloud (Azure, GCP, AWS)
Công cụ hỗ trợ
ArgoCD (App of Apps, ApplicationSet)
Terraform cho cấp độ hạ tầng
Helm Chart, Kustomize cho khai báo manifest linh hoạt
📁 Cấu Trúc Repository GitOps Blueprints
Thư mục
Mục đích
terraform/hub
Terraform code cho môi trường HUB
terraform/workloads
Terraform môi trường workloads (TF Workspaces)
gitops/applicationsets
ArgoCD ApplicationSets hạ tầng infrastructure
gitops/helm-chart
Helm chart generic template
gitops/kustomize/infrastructure
Overlay cấu hình cụ thể từng môi trường
Hình ví dụ ứng dụng App of Apps trong ArgoCD:
🔄 ScaledObject Với KEDA
ScaledObject là custom resource định nghĩa cách mở rộng dựa trên trigger sự kiện. Ví dụ để KEDA lắng nghe Azure Blob Storage trigger: