Autoscaling in Kubernetes: Why doesn't the Horizontal Pod Autoscaler work for me?

Bài tóm tắt Expedia 2020 3. Quy mô lớn Độ khó: Trung bình

Expedia · 2020 · 3. Quy mô lớn · Độ khó: Trung bình — bài gốc

Bài hướng dẫn (ví dụ minh hoạ, không phải số liệu production của Expedia), phần cuối của một series ba bài; lấy từ bản Wayback (Medium chặn crawler). Ý chính: bật HPA không đồng nghĩa có autoscaling chạy được.

Bối cảnh

  • Chủ ứng dụng ở Expedia bật HPA theo tài liệu (ví dụ: scale khi CPU trung bình quá 80%) rồi thấy nó "không chạy". Series đặt bốn tiêu chí cho autoscaling: reliability, efficiency, responsiveness, resilience; bài này chỉ ra mỗi tiêu chí kéo theo một đánh đổi.

Thay đổi chính (các vấn đề và cách chỉnh)

  • Target utilization: luôn có độ trễ từ lúc vượt ngưỡng tới lúc pod mới nhận traffic; điều kiện là độ trễ đó phải ngắn hơn thời gian từ ngưỡng tới 100% CPU. Hạ target (80% → 40%) cho thêm thời gian gấp ba, nhưng cần gấp đôi số pod cho cùng tải: target cao thì rủi ro, target thấp thì đắt.
  • Spike ngắn bị bỏ sót: HPA không nhận sự kiện mà poll metrics-server (ví dụ 15 giây), metrics-server lại trả giá trị trung bình theo cửa sổ (ví dụ 30 giây) và trung bình qua mọi pod. Spike vài giây, hay một pod 90% trong ba pod, không đẩy trung bình qua 80%. Chỉnh: tăng độ phân giải metric (tốn tài nguyên cluster) hoặc dùng Burstable QoS (limits cao hơn requests nhiều lần; không bảo đảm có tài nguyên, dễ bị evict hơn).
  • Phản ứng chậm: 30–45 giây phát hiện, cộng thời gian khởi động: tải image, khởi tạo, readiness probe với initialDelaySeconds đặt quá dài. Chỉnh: image nhỏ, khởi tạo ngắn (có thể đánh đổi hiệu năng lúc chạy), delay readiness sát thực tế.
  • Scale không giới hạn: bot traffic gấp 100 lần làm HPA nhân app lên 100 lần: tốn gấp 100 lần cho traffic vô giá trị và chiếm tài nguyên của app khác trên cluster (Cluster Autoscaler cũng có trễ và giới hạn số node). Chỉnh: đặt maxReplicas từ số liệu (ví dụ 30 ngày tối đa khoảng 7 pod → đặt 10, không phải 100); đổi lại không chịu được đột biến thật vượt mức đó.

Bài học cho SWE

  • Autoscaler là một vòng điều khiển có độ trễ ở mọi khâu (thu metric, poll, khởi động); phải đo độ trễ tổng và so với thời gian hệ chịu được (Tự động hoá vận hành và auto-remediation).
  • Target utilization là núm vặn giữa rủi ro và chi phí; maxReplicas là trần chi phí và cũng là bảo vệ cluster dùng chung (Chi phí hạ tầng và build vs buy).
  • Metric trung bình theo cửa sổ che mất spike; chọn metric và độ phân giải theo hình dạng tải.

Liên quan