Debug lỗi đồng bộ hóa Crossplane và phân tích nguyên nhân
Khi Crossplane không tự động tạo hoặc cập nhật tài nguyên hạ tầng (Managed Resources), nguyên nhân thường nằm ở trạng thái "NotSynced" hoặc "ConfigurationError". Bước đầu tiên là xác định trạng thái của Custom Resource (CR) trong namespace.
Để xem chi tiết trạng thái và lý do lỗi, ta cần truy vấn trực tiếp vào đối tượng Crossplane.
kubectl get managedresource -n -o yaml | grep -A 20 "conditions"
Kết quả mong đợi: Bạn sẽ thấy mảng "conditions" với trường "reason" mô tả lỗi chính xác (ví dụ: "ExternalProvisioningFailed", "ConnectionDetailsNotReady").
Nếu trạng thái cho biết lỗi từ phía provider (AWS, GCP, Azure), cần xem log của controller quản lý provider đó. Controller thường chạy trong namespace "crossplane-system".
kubectl logs -l control-plane=crossplane -n crossplane-system --tail=50
Kết quả mong đợi: Dòng log cuối cùng chứa thông báo lỗi chi tiết về API call thất bại hoặc thiếu permission IAM/Role từ phía cloud provider.
Trường hợp lỗi liên quan đến việc không tìm thấy Composition, hãy kiểm tra log của "composition-controller".
kubectl logs -l control-plane=crossplane --selector=control-plane=composition -n crossplane-system --tail=50
Kết quả mong đợi: Thông báo "Composition not found" hoặc lỗi khớp (matching) giữa Claims và Composition.
Để debug sâu hơn, bạn có thể bật chế độ debug cho Crossplane bằng cách cập nhật ConfigMap "crossplane".
cat
Sau khi áp, cần restart deployment của Crossplane để áp dụng cấu hình mới.
kubectl rollout restart deployment/crossplane -n crossplane-system
Kết quả mong đợi: Log của Crossplane sẽ hiển thị chi tiết từng bước thực thi (trace), bao gồm cả request và response từ provider.
Verify kết quả: Chạy lại command kubectl describe cho resource bị lỗi và xem trường "External Status" có chứa thông tin debug chi tiết hay không.
Phân tích logs Backstage và ArgoCD khi quy trình tự động bị lỗi
Khi quy trình tự động từ Backstage tạo môi trường bị lỗi, điểm gãy thường xảy ra ở 2 vị trí: Backstage không gửi được yêu cầu hoặc ArgoCD không thể sync repository.
Đầu tiên, kiểm tra log của pod Backstage để xem lỗi trong quá trình xử lý template (Scaffolder).
kubectl logs -l app=backstage -n backstage --tail=100 | grep -i "error\|exception"
Kết quả mong đợi: Các dòng log chỉ ra lỗi trong bước "createRepository" hoặc "publishRepository", thường do lỗi cấu hình Git hoặc Webhook.
Nếu Backstage hoạt động tốt nhưng môi trường không được tạo, lỗi nằm ở ArgoCD. Cần xem trạng thái của Application trong ArgoCD.
kubectl get application -n argocd -o json | jq '.items[] | select(.status.sync.status == "Failed") | {name: .metadata.name, message: .status.message}'
Kết quả mong đợi: Danh sách các application bị lỗi kèm theo thông báo ngắn gọn về nguyên nhân (ví dụ: "source not found", "prune disabled").
Để xem chi tiết lỗi sync của một application cụ thể, truy cập trực tiếp vào log của controller ArgoCD.
kubectl logs -l app.kubernetes.io/name=argocd-server -n argocd --tail=50
Kết quả mong đợi: Log chi tiết về quá trình fetch manifest, validate YAML và apply lên cluster, chỉ ra lỗi cụ thể ở resource nào.
Nếu lỗi liên quan đến việc ArgoCD không nhận được sự kiện từ Git (webhook), kiểm tra log của ArgoCD repo server.
kubectl logs -l app.kubernetes.io/name=argocd-repo-server -n argocd --tail=50
Kết quả mong đợi: Thông báo về việc webhook không được kích hoạt hoặc lỗi xác thực SSH/Git.
Verify kết quả: Chạy lệnh kubectl get application và kiểm tra trường "Sync Status" đã chuyển sang "Synced" sau khi khắc phục lỗi.
Tối ưu hiệu năng: Cache template và giảm thời gian khởi tạo môi trường
Thời gian khởi tạo môi trường thường chậm do quá trình scaffolding từ Backstage phải clone repo mới và ArgoCD phải sync từ đầu.
Để tối ưu, hãy sử dụng cơ chế cache cho template Backstage bằng cách lưu trữ các artifact (template, plugin) vào một container registry nội bộ.
docker build -t /backstage-templates:latest ./backstage/templates
Sau đó, cấu hình Backstage để tải template từ registry thay vì clone từ Git mỗi lần.
cat
Kết quả mong đợi: Backstage sẽ tải template từ GCS/registry nhanh hơn nhiều so với clone Git.
Đối với ArgoCD, tối ưu bằng cách bật tính năng "Prune" và "SelfHeal" để giảm thời gian sửa lỗi thủ công, đồng thời sử dụng "App of Apps" pattern để quản lý cấu trúc.
cat
Kết quả mong đợi: ArgoCD tự động xóa resource thừa và tự sửa lỗi khi cấu hình thay đổi, giảm thời gian can thiệp.
Để giảm thời gian khởi tạo Crossplane, hãy sử dụng "Composition" với các resource đã được pre-provision hoặc sử dụng "External Resource" để tránh tạo lại từ đầu.
cat
Kết quả mong đợi: Crossplane tạo resource nhanh hơn do giảm số lượng patch và tối ưu hóa cấu trúc Composition.
Verify kết quả: Chạy script tạo môi trường mới và đo thời gian từ lúc bấm "Create" đến khi môi trường sẵn sàng (Ready).
Chiến lược backup và restore cho dữ liệu metadata của Backstage và GitOps
Dữ liệu quan trọng nhất của hệ thống là metadata trong Git (source code, config) và database của Backstage (plugin data, user preferences).
Đối với Git, chiến lược là backup tự động repository vào một bucket object storage (S3/GCS) định kỳ.
cat
Kết quả mong đợi: Một CronJob sẽ chạy mỗi ngày lúc 2 giờ sáng để backup toàn bộ repository vào S3.
Đối với Backstage, cần backup database PostgreSQL (hoặc MySQL) mà Backstage đang sử dụng.
cat
Kết quả mong đợi: Database của Backstage được dump và nén, sau đó đẩy lên S3 mỗi ngày.
Để restore, tạo một script đơn giản để khôi phục từ backup gần nhất.
aws s3 cp /backstage/db-backup-$(date -d "yesterday" +%F).sql.gz - | gunzip | psql -h -U
Kết quả mong đợi: Database Backstage được khôi phục về trạng thái của ngày hôm qua.
Verify kết quả: Chạy lệnh backup thủ công và kiểm tra file trong S3 bucket, sau đó thử restore trên môi trường test.
Lộ trình mở rộng: Tích hợp monitoring và CI/CD pipeline tự động
Để hệ thống Platform Engineering trở nên trưởng thành, cần tích hợp monitoring để theo dõi hiệu năng và CI/CD để tự động hóa deployment.
Đầu tiên, triển khai Prometheus và Grafana để thu thập metrics từ Crossplane, ArgoCD và Backstage.
cat
Kết quả mong đợi: Prometheus sẽ bắt đầu scrape metrics từ Crossplane và ArgoCD.
Tạo dashboard Grafana để hiển thị trạng thái sync của ArgoCD và số lượng resource của Crossplane.
kubectl apply -f https://raw.githubusercontent.com/prometheus-community/helm-charts/main/charts/grafana/dashboards/argocd.json
Kết quả mong đợi: Dashboard Grafana xuất hiện với các biểu đồ theo thời gian thực về trạng thái của hệ thống.
Đối với CI/CD, tích hợp GitHub Actions hoặc GitLab CI để tự động trigger pipeline khi có commit vào nhánh main.
cat
Kết quả mong đợi: Khi push code lên GitHub, pipeline tự động chạy và sync ứng dụng lên cluster.
Để mở rộng thêm, có thể tích hợp alerting qua Slack/PagerDuty khi có sự cố.
cat
Kết quả mong đợi: Prometheus Rule được tạo, khi có lỗi sẽ kích hoạt alert và gửi thông báo đến kênh Slack/PagerDuty.
Verify kết quả: Trigger một lỗi giả lập (ví dụ: xóa một resource trong cluster) và kiểm tra xem alert có được kích hoạt và gửi thông báo hay không.
Điều hướng series:
Mục lục: Series: Series: Xây dựng hệ thống Platform Engineering nội bộ với Crossplane, Backstage và GitOps trên hạ tầng Kubernetes để tự động hóa môi trường Dev
« Phần 6: Quản lý vòng đời môi trường và phân quyền RBAC