Lộ trình
Cloud Native Computing FoundationAssociateTuần 4: Tối ưu & vận hànhBài 23 / 30

Ngày 23: Troubleshooting Node

Thời lượng: 45 phút
Mục tiêu: 2 nhiệm vụ chính
Tiến độ lộ trình
ckangày 23
hoàn thành23 / 30 bài
Bối cảnh bài học

Troubleshoot Node NotReady bằng lớp kiểm tra từ API/conditions đến kubelet, container runtime, CNI, disk/memory pressure và khả năng schedule.

đọc hiểuthực hànhcheckpoint
Bài giảng hôm nay

Học hiểu, rồi mới thực hành

Troubleshoot Node NotReady bằng lớp kiểm tra từ API/conditions đến kubelet, container runtime, CNI, disk/memory pressure và khả năng schedule.

Bắt đầu đọc bài giảng

Nhiệm vụ bài học hôm nay

  • Luyện xử lý Node NotReady
  • Kiểm tra kubelet, container runtime khi node lỗi
Instructor walkthrough

Bài giảng chi tiết: từ bài toán đến bằng chứng

Scenario xuyên suốt

Pod trên một node đồng loạt lỗi nhưng người học chỉ restart Pod hoặc xóa node. Bài học luyện phân biệt node NotReady, pressure, kubelet/runtime và network failure; bảo vệ workload bằng cordon/drain có kế hoạch và xác minh phục hồi.

01Đọc bài toán

Xác định actor, workload, constraint và trạng thái cuối cần đạt.

02Vẽ luồng / boundary

Chỉ ra request, dependency, identity và failure domain trước khi chọn công cụ.

03Chọn và thực hành

Thay đổi nhỏ nhất trong lab cô lập; command nào cũng phải nói rõ nó kiểm tra điều gì.

04Kiểm chứng / recovery

Đối chiếu trạng thái thực tế, tạo một failure variant và ghi cách hoàn tác.

Cách nối lý thuyết với thực tế
  • Node `Ready` là tổng hợp signal từ kubelet/conditions; `NotReady` cần đọc reason/message, heartbeat, taints và last transition time.
  • Kubelet, container runtime, CNI, filesystem/inode, memory/PID pressure và certificate/time drift tạo symptom khác nhau; không suy luận từ một status duy nhất.
  • Control-plane có thể reachable dù node unhealthy; kiểm tra API view, node describe, events và workload placement trước khi chạy lệnh trên host.
  • Cordon là containment để ngăn Pod mới schedule; drain là voluntary eviction có PDB/DaemonSet/local data/capacity implications, không phải remediation mặc định.

Node troubleshooting theo lớp

Bắt đầu từ API view: node phase/conditions, reason/message, taints, allocatable/capacity và events. Sau đó xem Pod trên node, kube-system, kubelet/runtime/CNI và resource pressure.

Signal Hypothesis cần kiểm tra Evidence
Ready=False/Unknown kubelet heartbeat, service, certificate/time describe node, conditions, kubelet logs
Disk/Memory/PIDPressure filesystem/inode, eviction, capacity conditions, events, host metrics/logs
runtime errors CRI/socket/image/sandbox system Pod/events/runtime logs
network errors CNI/route/IPAM/kube-proxy CNI Pod/logs, Pod events, request path

Containment và recovery

Cordon trước khi điều tra dài nếu cần ngăn workload mới. Drain chỉ sau khi kiểm tra replicas, PDB, DaemonSet, local data và capacity; không dùng force như cách xóa symptom. Sau remediation: node Ready, không còn pressure, system Pods healthy, workload rescheduled/Available, rồi uncordon và ghi proof.

Terminal reference

Command list và cách dùng

Chạy từng lệnh theo đúng thứ tự. Trước các lệnh có thể tạo hoặc thay đổi tài nguyên, hãy kiểm tra profile, account và region.

Commands · read-only checkpoints
kubectl get nodes -o wide
kubectl describe node NODE_NAME
kubectl get events --all-namespaces --field-selector=involvedObject.kind=Node --sort-by=.lastTimestamp
kubectl get pods -A -o wide --field-selector=spec.nodeName=NODE_NAME
kubectl get pods -n kube-system -o wide
kubectl get pdb -A -o wide
journalctl -u kubelet --since="15 min ago" --no-pager
Hands-on lab

Thực hành theo scenario

  1. Xác nhận context và inventory node; tạo workload lab nhiều replica/PDB nếu có cluster cô lập. Ghi baseline Ready, allocatable, conditions, taints, kubelet/runtime version và system Pods.
  2. Mô phỏng hoặc phân tích ba scenario: kubelet stopped/heartbeat stale, disk/memory/PID pressure, runtime/CNI failure. Nếu không có quyền host, dùng fixture/events hoặc read-only evidence và ghi rõ limitation.
  3. Chạy `kubectl get nodes -o wide`, `describe node`, node conditions/taints/events, system Pod status và workload distribution; sau đó đối chiếu kubelet journal/runtime health/CNI logs trên đúng node nếu được phép.
  4. Containment: cordon node lỗi nếu cần; đánh giá PDB, replicas, local data và capacity trước drain. Remediate dependency nhỏ nhất, theo dõi Ready/system Pods/workload, rồi uncordon chỉ khi post-check đạt.
  5. Ghi timeline, expected state, command output và rollback. Cleanup marker/workload lab; không xóa Node object, reboot host, reset kubeadm hoặc force drain nếu chưa có owner/backup.
Evidence checkpoint

Kiểm chứng kết quả

Không coi lệnh chạy thành công là đủ. Hãy đối chiếu output với trạng thái mong đợi:

  • Đọc đúng Ready condition/reason/taint và phân biệt node symptom với workload symptom.
  • Có baseline và evidence từ node describe/events/system Pods/kubelet-runtime khi khả dụng.
  • Phân biệt kubelet, runtime, CNI và resource pressure bằng failure matrix.
  • Cordon/drain/uncordon có PDB, capacity, local-data và rollback safety.
  • Post-check xác nhận node Ready, system Pods, workload availability và cleanup/owner.
Transfer to exam / production

Bẫy thường gặp và trade-off

Khi node NotReady, đừng bắt đầu bằng delete node. Lấy `describe node` và conditions/events trước; xác định kubelet/runtime/network/resource signal. Sau maintenance nhớ `uncordon` và kiểm tra workload đã Available.

Checkpoint · 3 phút

Kiểm tra nhanh

Câu hỏi: Node chuyển NotReady nhưng API server vẫn hoạt động. Bước đầu tiên có giá trị nhất là gì?

Kết thúc bài

Checklist trước khi sang Ngày 2