Lộ trình
Cloud Native Computing FoundationAssociateTuần 3: Kiến trúc & bảo mậtBài 17 / 30

Ngày 17: Logging & Debug

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

Debug Pod bằng signal ladder: phase/conditions, events, logs hiện tại/previous, exec, probes, owner và dependency; giữ evidence trước khi restart hoặc sửa manifest.

đọ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

Debug Pod bằng signal ladder: phase/conditions, events, logs hiện tại/previous, exec, probes, owner và dependency; giữ evidence trước khi restart hoặc sửa manifest.

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

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

  • Luyện dùng kubectl logs -f, kubectl exec để debug
  • Thực hành debug 1 Pod lỗi giả lập
Instructor walkthrough

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

Scenario xuyên suốt

Một Pod lỗi có thể do image pull, init, process crash, probe, config, permission hoặc dependency. Chỉ chạy `logs -f` hoặc `exec` mà không xác định container/phase khiến điều tra thiếu dữ kiện và dễ xóa mất evidence.

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ế
  • Debug bắt đầu từ context/namespace/target và scope, sau đó phase/conditions/reason/events để chọn signal kế tiếp.
  • `kubectl logs` cần đúng Pod/container; `--previous` cần khi container restart, `-f` dùng để quan sát live nhưng không thay thế snapshot/timestamp.
  • `kubectl exec` chỉ chạy được khi container đang running; dùng để kiểm tra process/env/file/DNS/localhost theo permission, không để biến exec thành sửa production mù.
  • Events có retention và không phải application logs; correlate timestamps với container logs, probe results, owner/controller và Service/dependency.

Signal ladder để debug

context/target → phase/conditions → describe/events → logs current/previous → exec read-only → owner/config/dependency → minimal fix → verify. Events cho scheduler/kubelet/probe; logs cho process/app; exec cho state bên trong khi container Running. Correlate timestamp và container name.

Preserve evidence

Snapshot output trước restart/delete. logs -f quan sát live nhưng nên thêm timestamps/tail; --previous giải thích crash đã xảy ra. Exec không chạy được ở container chưa start và không nên dùng để sửa file/đọc secret. Sau remediation kiểm tra Ready/restart/rollout/endpoints và ghi timeline.

Bài tập

Dựng năm Pod failure fixtures, áp dụng signal ladder, tạo worksheet evidence/root cause/fix/rollback, rồi replay variant. Cleanup lab và redact sensitive output.

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 pods -n ckad-day17 -o wide
kubectl describe pod POD_NAME -n ckad-day17
kubectl get events -n ckad-day17 --sort-by=.lastTimestamp
kubectl logs POD_NAME -n ckad-day17 -c CONTAINER_NAME --timestamps --tail=100
kubectl logs POD_NAME -n ckad-day17 -c CONTAINER_NAME --previous --timestamps --tail=100
kubectl exec POD_NAME -n ckad-day17 -c CONTAINER_NAME -- sh -c "id; cat /proc/1/cmdline; ls -la /tmp"
kubectl get pod POD_NAME -n ckad-day17 -o jsonpath="{.status.containerStatuses[*]} {.status.conditions}{"\n"}"
Hands-on lab

Thực hành theo scenario

  1. Tạo namespace `ckad-day17` với Pod fixtures: command crash, readiness fail, wrong ConfigMap key, multi-container sidecar issue và dependency timeout. Ghi expected symptom/owner.
  2. Dùng ladder: current-context → `get pod -o wide` → describe/conditions/events → logs từng container/current+previous → exec read-only checks → owner/manifest/dependency. Ghi command đầu tiên có giá trị.
  3. Dùng `logs -f --timestamps` trong một terminal và events/conditions ở terminal khác; lưu evidence snapshot trước khi sửa. Nếu Pod không Running, giải thích vì sao exec không phù hợp.
  4. Sửa minimal trong lab, theo dõi restart/readiness/rollout/endpoint và tạo variant đổi container name/config key/probe/dependency. So sánh logs vs events vs exec evidence.
  5. Cleanup fixtures/namespace và redact tokens/config values; không `exec` curl secret, không restart/delete Pod trước khi lưu evidence, không dùng `kubectl logs -f` vô thời hạn.
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:

  • Signal ladder/context/container target đúng.
  • Current/previous logs, events, conditions có timestamp evidence.
  • Exec dùng đúng lúc và read-only check phù hợp.
  • Root cause/remediation/recovery có variant.
  • Timeline/secret redaction/cleanup đầy đủ.
Transfer to exam / production

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

CKAD debug task: đọc phase/events trước, chọn đúng container với `-c`, dùng `--previous` khi restart và exec chỉ khi container Running. Sau fix kiểm tra conditions, logs, endpoint/rollout; đừng chỉ thấy command không lỗi.

Checkpoint · 3 phút

Kiểm tra nhanh

Câu hỏi: Container vừa restart và hiện đang Running nhưng log hiện tại không giải thích crash trước đó. Lệnh nào có giá trị nhất?

Kết thúc bài

Checklist trước khi sang Ngày 2