Hướng Dẫn Kiểm Tra và Debug Cluster Autoscaler Qua ConfigMap

Tài liệu này cung cấp hướng dẫn chi tiết giúp khách hàng tự kiểm tra hoạt động của Cluster Autoscaler bằng cách phân tích các ConfigMap liên quan.

Giới thiệu về Cluster Autoscaler

Cluster Autoscaler là tính năng tự động điều chỉnh kích thước của cụm Kubernetes dựa trên nhu cầu sử dụng thực tế. Công cụ này sẽ tự động tăng hoặc giảm số lượng node khi:

  • Tăng thêm node: Khi pods không thể chạy trên bất kỳ node hiện tại nào do thiếu tài nguyên
  • Giảm bớt node: Khi một hoặc nhiều node có tải thấp liên tục trong một khoảng thời gian đáng kể

Các bước để kiểm tra như sau:

Bước 1: Truy xuất ConfigMap của Cluster Autoscaler

Cách lấy configmap trạng thái

kubectl describe cm -n kube-system cluster-autoscaler-status -n kube-system

Giải thích ý nghĩa các trường cấu hình quan trọng

ConfigMap trạng thái (cluster-autoscaler-status)

status:
----
Cluster-autoscaler status at 2020-02-04 19:51:50.326683568 +0000 UTC:
Cluster-wide:
  Health: Healthy (ready=2 unready=0 notStarted=0 longNotStarted=0 registered=2 longUnregistered=0)
  LastProbeTime: 2020-02-04 19:51:50.324437686 +0000 UTC m=+9022588.836540262
  LastTransitionTime: 2019-10-23 09:36:25.741087445 +0000 UTC m=+64.253190008
  ScaleUp: NoActivity (ready=2 registered=2)
  LastProbeTime: 2020-02-04 19:51:50.324437686 +0000 UTC m=+9022588.836540262
  LastTransitionTime: 2019-10-23 09:36:25.741087445 +0000 UTC m=+64.253190008
  ScaleDown: NoCandidates (candidates=0)
  LastProbeTime: 2020-02-04 19:51:50.324437686 +0000 UTC m=+9022588.836540262
  LastTransitionTime: 2019-10-23 09:36:25.741087445 +0000 UTC m=+64.253190008
  Events: none

Ý nghĩa các trường:

  • Health: Tình trạng tổng thể của Cluster Autoscaler, hiển thị số lượng node sẵn sàng (ready) và không sẵn sàng (unready)
  • ScaleUp: Trạng thái hoạt động tăng node, “NoActivity” nghĩa là hiện không có hoạt động tăng node nào
  • ScaleDown: Trạng thái giảm node, “NoCandidates” nghĩa là không có node nào phù hợp để giảm
  • LastProbeTime: Thời điểm kiểm tra gần nhất
  • LastTransitionTime: Thời điểm chuyển trạng thái gần nhất
  • Events: Các sự kiện liên quan đến Cluster Autoscaler

Bước 2: Nhận diện dấu hiệu bất thường

1. Vấn đề về trạng thái Health

Dấu hiệu:

  • Trạng thái Health không phải là “Healthy
  • Số lượng node ready không khớp với số lượng node trong cụm.

Kiểm tra:

kubectl describe cm -n kube-system cluster-autoscaler-status | grep Health

2. Vấn đề về hoạt động ScaleUp/ScaleDown

Dấu hiệu:

  • Trạng thái ScaleUp cho thấy không có hoạt động nhưng pods đang chờ do thiếu tài nguyên
  • Trạng thái ScaleDown là “TooSoon” hoặc các giá trị lỗi khác

Kiểm tra:

kubectl describe cm -n kube-system cluster-autoscaler-status | grep -A 3 ScaleUp
kubectl describe cm -n kube-system cluster-autoscaler-status | grep -A 3 ScaleDown

3. Vấn đề về thời gian chuyển trạng thái

Dấu hiệu:

  • LastTransitionTime không được cập nhật trong thời gian dài
  • Khoảng cách giữa LastProbeTime và LastTransitionTime quá lớn

Kiểm tra:

kubectl describe cm -n kube-system cluster-autoscaler-status | grep -A 1 LastTransitionTime

Bước 3: Ví dụ minh họa thực tế về các lỗi phổ biến

Ví dụ 1: Cluster không tự động tăng node mặc dù đã có pods chờ

Trạng thái ConfigMap:

ScaleUp: NoActivity (ready=3 registered=3)

Pods đang chờ:

bashkubectl get pods NAME READY STATUS RESTARTS AGE nginx-7b8d74cc45-1qp2w 0/1 Pending 0 5m nginx-7b8d74cc45-2xsrf 0/1 Pending 0 5m

Nguyên nhân có thể:

  1. maxSize đã đạt giới hạn
  2. Không đủ tài nguyên trên cloud provider
  3. Lỗi xác thực với cloud provider (Thường không xảy ra nếu không tự ý xoá app credential)

Khắc phục:

Ví dụ 2: Cluster không tự động giảm node mặc dù có nodes sử dụng thấp

Trạng thái ConfigMap:

ScaleDown: NoCandidates (candidates=0) hoặc 
ScaleDown: NoCandidates (candidates=1)

Kiểm tra mức sử dụng node:

kubectl top nodes

Nguyên nhân có thể:

  1. Có pods quan trọng chạy trên nodes mà không thể di chuyển đi được
  2. Thiết lập scale-down-utilization-threshold quá thấp
  3. scale-down-delay-after-add/delete chưa hết thời gian
  4. Bị dính lỗi liên quan đến cloud-provider ID

Kiểm tra và khắc phục:

kubectl get nodes -o yaml | grep providerID

Nếu kết quả ra providerID: bizflycloud://<khoảng trắng> ⇒ Node đó bị lỗi trong quá trình provisioning, tuy không ảnh hưởng việc chạy workload nhưng gây ảnh hưởng đến cluster-autoscaler