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ể:
- maxSize đã đạt giới hạn
- Không đủ tài nguyên trên cloud provider
- 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ể:
- Có pods quan trọng chạy trên nodes mà không thể di chuyển đi được
- Thiết lập scale-down-utilization-threshold quá thấp
- scale-down-delay-after-add/delete chưa hết thời gian
- 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