Ngừng đoán già đoán non chi phí Kubernetes: Hướng dẫn thực tế về Kubecost

DevOps tutorial - IT technology blog
DevOps tutorial - IT technology blog

“Hộp đen” hóa đơn Kubernetes

Chạy microservices trên Kubernetes là một bước tiến về khả năng mở rộng, nhưng thường là một “thảm họa” đối với bộ phận tài chính. Nếu bạn sử dụng AWS, GCP, hoặc Azure, hóa đơn hàng tháng của bạn thường chỉ hiển thị một khoản tổng cho các thực thể EC2 hoặc VM. Vấn đề là gì? Nhà cung cấp cloud của bạn không hề biết chuyện gì đang xảy ra bên trong cluster. Bạn có thể thấy hóa đơn 5.000 USD cho một cluster duy nhất, nhưng không thể biết chính xác đội ngũ hay microservice nào đã tiêu tốn ngân sách đó.

Tôi đã từng chứng kiến các đội ngũ DevOps dành hàng giờ mỗi tháng để đối chiếu bảng tính thủ công nhằm giải trình chi phí. Các thẻ (tag) cloud thông thường thất bại ở đây vì một node duy nhất thường chứa hàng chục pod khác nhau từ nhiều dự án. Nếu không có khả năng hiển thị chi tiết, bạn sẽ rơi vào “trò chơi đoán ngân sách” nơi không ai chịu trách nhiệm về việc lãng phí tài nguyên. Kubecost giải quyết vấn đề này bằng cách ánh xạ chi phí hạ tầng trực tiếp vào các khái niệm gốc của Kubernetes như namespaces, deployments và labels.

Các khái niệm cốt lõi: Ánh xạ chi phí vào Pod

Kubecost không chỉ dự đoán. Nó lấy dữ liệu giá thực tế từ nhà cung cấp cloud và kết hợp với các chỉ số sử dụng tài nguyên từ Prometheus. Nó xem xét khoảng cách giữa những gì bạn yêu cầu (request) và những gì bạn thực sự sử dụng.

Bốn trụ cột trong phân bổ chi phí

Để có cái nhìn rõ ràng về chi tiêu, Kubecost phân loại chi phí thành bốn nhóm chính:

  • Compute: Chi phí CPU và RAM được cấp phát cho các container của bạn.
  • Storage: Chi tiêu gắn liền với Persistent Volume Claims (PVCs), bao gồm cả các phân tầng SSD hiệu suất cao.
  • Network: Truyền tải dữ liệu giữa các zone, region và internet công cộng. Đây thường là nơi ẩn náu của các chi phí “bất ngờ”, chẳng hạn như hóa đơn 1.200 USD cho lưu lượng truy cập liên vùng mà bạn không hề hay biết.
  • Efficiency Score: Đây là tỷ lệ giữa mức sử dụng thực tế so với mức yêu cầu. Nếu bạn yêu cầu 8GB RAM nhưng ứng dụng chỉ dùng ổn định ở mức 500MB, Kubecost sẽ đánh dấu đó là 93% chi phí bị lãng phí.

Bạn có thể tổng hợp các chi phí này ngay lập tức. Cho dù bạn cần xem chi tiêu theo Namespace cho các cluster đa người dùng hoặc theo Controller để xem một Deployment cụ thể có đang “ngốn” tiền hay không, dữ liệu luôn sẵn sàng chỉ với một cú nhấp chuột.

Thực hành: Triển khai Kubecost

Cài đặt Kubecost chỉ mất khoảng năm phút. Tôi khuyên bạn nên sử dụng Helm chart vì nó đóng gói sẵn Prometheus và Grafana, giúp bạn tiết kiệm công sức cấu hình thủ công.

1. Chuẩn bị

Đảm bảo ngữ cảnh (context) kubectl của bạn đã được đặt đúng cluster. Bạn sẽ cần cài đặt Helm cục bộ để quản lý việc triển khai.

# Thêm repository của Kubecost
helm repo add kubecost https://kubecost.github.io/cost-analyzer/
helm repo update

2. Lệnh cài đặt

Chúng ta sẽ sử dụng một namespace kubecost riêng biệt để giữ cho cluster sạch sẽ. Nếu bạn đang dùng EKS hoặc GKE, Kubecost sẽ tự động phát hiện giá node thông qua API hóa đơn của nhà cung cấp cloud.

# Tạo namespace
kubectl create namespace kubecost

# Cài đặt bộ phân tích
helm install kubecost kubecost/cost-analyzer \
    --namespace kubecost \
    --set kubecostToken="Ym9ncy5idW5ueUBleGFtcGxlLmNvbQ=="

Lưu ý: Mặc dù token là tùy chọn cho phiên bản miễn phí, nhưng it giúp mở khóa thêm các tính năng cộng đồng và các bản cập nhật.

3. Xem Dashboard

Đợi khoảng hai phút để các pod khởi tạo. Bạn có thể truy cập giao diện người dùng (UI) ngay lập tức bằng cách sử dụng port-forwarding mà không cần thiết lập các quy tắc Ingress hoặc LoadBalancer phức tạp.

kubectl port-forward --namespace kubecost deployment/kubecost-cost-analyzer 9090

Truy cập http://localhost:9090. Trong một môi trường production, dashboard này đã giúp chúng tôi tìm thấy một staging namespace tiêu tốn 400 USD mỗi tháng chỉ vì lỗi rò rỉ bộ nhớ (memory leak) trong một sidecar log. Chúng tôi đã phát hiện ra nó trong vài phút, chứ không phải vài tháng.

4. Tìm kiếm các giải pháp tối ưu nhanh

Khi dữ liệu đã được đổ về, hãy chuyển đến tab “Savings”. Kubecost sẽ tìm kiếm các cơ hội tối ưu dễ dàng, chẳng hạn như:

  • Right-sizing: Nó có thể gợi ý giảm yêu cầu CPU từ 2.0 xuống 0.5 dựa trên dữ liệu lịch sử của 7 ngày.
  • Workload không sử dụng: Nó xác định các pod không nhận được bất kỳ yêu cầu mạng nào trong nhiều ngày nhưng vẫn đang tiêu thụ tài nguyên.
  • Spot Instances: Nó tính toán số tiền bạn sẽ tiết kiệm được bằng cách chuyển các workload môi trường dev không quan trọng sang các node ưu tiên (preemptible nodes).

Nâng cao: Kết nối hóa đơn Cloud thực tế

Giá niêm yết công khai hiếm khi là con số bạn thực sự phải trả. Để đạt được độ chính xác 100%, bạn nên kết nối Kubecost với AWS Cost and Usage Report (CUR) hoặc GCP Billing export. Điều này cho phép công cụ tính toán dựa trên các mức chiết khấu doanh nghiệp cụ thể và Reserved Instances của bạn.

Cấu hình thường bao gồm việc tạo một secret cloud-integration.json. Dưới đây là một template AWS tiêu chuẩn:

{
    "aws": {
        "athenaBucketName": "billing-data-prod",
        "athenaRegion": "us-east-1",
        "athenaDatabase": "athenacurdb",
        "athenaTable": "k8s_usage",
        "projectID": "123456789012"
    }
}

Việc tích hợp dữ liệu này sẽ biến Kubecost từ một công cụ giám sát thành một “nguồn sự thật” về tài chính. Nó đảm bảo các con số bạn trình bày với CFO khớp với số tiền chuyển khoản thực tế vào cuối tháng.

Lời kết: Xây dựng văn hóa FinOps

Quản lý chi phí Kubernetes không chỉ là cắt giảm ngân sách. Đó là về việc hiểu được tỷ suất hoàn vốn (ROI) của hạ tầng. Khi bạn có thể chứng minh cho các bên liên quan thấy rằng một tính năng cụ thể tốn 200 USD mỗi tháng để vận hành, cuộc hội thoại sẽ chuyển từ “tại sao hóa đơn lại cao?” sang “giá trị của tính năng này có xứng đáng với chi phí bỏ ra không?”

Khả năng hiển thị là bước đầu tiên hướng tới trách nhiệm giải trình. Hãy bắt đầu bằng cách kiểm tra các báo cáo hiệu quả hàng tuần. Bạn có thể sẽ thấy rằng một vài tinh chỉnh nhỏ đối với các yêu cầu tài nguyên có thể mang lại lợi ích gấp mười lần thời gian bỏ ra để cài đặt. Nếu bạn chưa xem xét chi phí ở cấp độ pod, hãy chạy lệnh cài đặt Helm đó ngay hôm nay—bạn có thể sẽ ngạc nhiên với những gì đang ẩn giấu trong cluster của mình.

Share: