ยินดีต้อนรับสู่ วันที่ 5: Pod Lifecycle, Logs และการวินิจฉัยปัญหา (Diagnostics)!
วันนี้เราจะมาทำความเข้าใจวงจรชีวิตของ Pod (Pod Lifecycle) เรียนรู้วิธีการสตรีม Logs แบบเรียลไทม์ และฝึกจำลองสถานการณ์เมื่อเกิดข้อผิดพลาดเพื่อวินิจฉัยและแก้ไขปัญหาผ่าน Headlamp UI และ CLI ครับ
ช่วงที่ 1: สรุปแนวคิดสถาปัตยกรรม
เข้าใจ 4 สถานะหลักของ Pod Lifecycle และ 2 เสาหลักของการวินิจฉัยปัญหา: Logs (stdout/stderr) และ Events
ช่วงที่ 2: การลงมือปฏิบัติจริง (5 ขั้นตอน)
สร้างแอปส่ง log สตรีมผ่าน CLI & UI จำลอง error แบบ ImagePullBackOff และแก้ปัญหาด้วยปุ่ม Delete บน UI
สรุปแนวคิดและสถาปัตยกรรม (5–10 นาที)
Pod Lifecycle Phases (วงจรชีวิตของ Pod)
Pod ใน Kubernetes จะเปลี่ยนสถานะตามขั้นตอนการทำงานดังนี้:
การวินิจฉัยปัญหา (Diagnostics: Logs vs Events)
เมื่อ Pod ค้างอยู่ในสถานะผิดปกติ เช่น ImagePullBackOff หรือ CrashLoopBackOff เราจะใช้ 2 แหล่งข้อมูลคู่กัน:
ขั้นตอนลงมือปฏิบัติจริง (15–20 นาที)
เปิด Terminal แล้วรัน Pod ที่ใช้ Image busybox ซึ่งจะรันลูปพิมพ์ข้อความออกมาทุกๆ 2 วินาที:
kubectl run log-producer --image=busybox -- sh -c "while true; do echo 'Processing batch task...'; sleep 2; done"
pod/log-producer created และสถานะจะเปลี่ยนเป็น Running
ทดลองใช้คำสั่งสตรีม Logs แบบเรียลไทม์ผ่าน Terminal โดยใส่แฟล็ก -f (follow):
kubectl logs -f log-producer
Processing batch task... ไหลออกมาเรื่อยๆ กดแป้นพิมพ์ Ctrl + C เพื่อหยุดสตรีม
เปิด Headlamp เพื่อทดลองใช้ฟังก์ชันดูบันทึกของคอนเทนเนอร์แบบ Graphic:
- เปิด Headlamp UI ขึ้นมา (ผ่าน http://localhost:8080 หรือ Headlamp Desktop)
- ไปที่เมนูด้านซ้าย Workloads > Pods แล้วคลิกเลือก Pod ชื่อ log-producer
- คลิกเข้าไปที่แถบ Logs (หรือไอคอนเอกสาร/บันทึกด้านบน)
- สังเกต Logs ที่ไหลลงมาอย่างต่อเนื่อง ทดลองเปิดสวิตช์ Auto-scroll และพิมพ์คำว่า
batchในช่องตัวกรอง (Filter) เพื่อค้นหาข้อความเฉพาะ
สร้าง Pod ใหม่โดยจงใจพิมพ์ชื่อ Image ที่ไม่มีอยู่จริงบน Registry (invalid-image-name) เพื่อจำลองปัญหาคลาสสิกของ Kubernetes:
kubectl run failing-pod --image=invalid-image-name
ดูการแจ้งเตือนความผิดพลาดบน UI และสั่งเคลียร์ Pod ที่มีปัญหา:
- สังเกตสถานะของ
failing-podบน Headlamp UI ซึ่งจะเปลี่ยนเป็น ErrImagePull หรือ ImagePullBackOff (แสดงเป็นแท็กเตือนสีแดง/ส้ม) - คลิกเข้าไปที่ failing-pod แล้วเลื่อนลงไปดูที่แถบ Events เพื่ออ่านสาเหตุที่แท้จริง (คุณจะเห็นข้อความแจ้งเตือน เช่น
Failed to pull image ... manifest unknown) - ลบ Pod ที่มีปัญหานี้ออก โดยคลิกที่ ไอคอนถังขยะ (Delete) บริเวณมุมขวาบนของหน้า Headlamp UI และกดยืนยัน
- สลับกลับมาที่ Terminal แล้วรันคำสั่งตรวจสอบ:
kubectl get pods
failing-pod หายไปจากระบบแล้ว โดยเหลือเพียง log-producer (หรือ Pod อื่นๆ ที่สร้างไว้ก่อนหน้า) แสดงว่าการสั่งลบผ่าน Web UI มีผลสมบูรณ์
ลองทำตามขั้นตอนแล้วแจ้งผลได้เลยครับว่าพบบันทึก Logs และข้อผิดพลาดบน UI ชัดเจนหรือไม่! เมื่อทำเสร็จเรียบร้อย เราก็ผ่านสัปดาห์แรก (Days 1–5) ของ Level 1 แล้ว พร้อมไปต่อใน วันที่ 6: Deployments, Rolling Updates และการ Rollback ได้ทันทีครับ!