12 เครื่องมือ Debug Kubernetes เจ๋งๆ ที่ควรต้องมีติดมือไว้

การ Debug Kubernetes อาจเป็นงานยากสำหรับใครหลายๆคน อาจใช้เวลานานในการจะหาสาเหตุของบางปัญหา แต่ถ้าเรามีเครื่องมือดี ๆ อยู่ในมือ มันก็จะช่วยให้เราทำงานกับ Kubernetes ได้ง่ายขึ้น วันนี้ผมจะมาแชร์เครื่องมือที่นิยมที่จะมาช่วยทั้งการแก้ปัญหา, ตรวจสอบประสิทธิภาพ และตรวจจับข้อบกพร่องต่าง ๆ ของ Kubernetes มาลองดูกันครับ 1. kubectl debug CLI ที่ช่วยให้เราสามารถสร้าง ephemeral container เข้าไปยัง Pod ที่กำลังทำงานอยู่ หรือสร้าง Pod จำลองที่ต้องการโดยเปลี่ยน attribute บางอย่างเช่น entrypoint, image version ยกตัวอย่างสถานการณ์ที่เราอยากนำเครื่องมือ network troubleshooting เช่น ping, traceroute, nc, tcpdump ไปช่วย investigate ปัญหา network ของ Pod application กับปลายทาง ก็สามารถรันคำสั่ง: kubectl debug app-Pod -it —image=nicolaka/netshoot Document 2. kubectl top CLI สำหรับดูการใช้งาน resource (CPU/Memory) ของแต่ละ Pod หรือแต่ละ Node (ต้องมี Metrics Server ทำงานอยู่บน cluster ที่เราต้องการตรวจสอบด้วย) ตัวอย่าง: kubectl top node kubectl top pod Document 3. Ktop Kubectl plugin สำหรับดูการใช้งาน resource เช่นเดียวกับ kubectl top แต่จะสรุปข้อมูล insight บางอย่างเพิ่มเติมและปรับวิธีการแสดงผลให้ดูง่ายขึ้น ตัวอย่าง: kubectl ktop --namespace cloudation101 Github 4. Kube-capacity Kubectl plugin ที่รวมผลลัพท์ระหว่าง kubectl top และ kubectl describe เพื่อให้เราเห็น request, limit รวมถึง utilization ของ resource ต่างๆ บน Kubernetes cluster ผ่านแสดงผลในหน้าเดียว ตัวอย่าง: kubectl resource-capacity --util Github 5. Netshoot Docker image และ Kubectl plugin สำหรับ troubleshoot ปัญหาที่เกี่ยวกับ container networking เช่น latency, routing, DNS resolving, firewall, ARPs ยกตัวอย่างสถานการณ์ที่ใช้บ่อยๆ: การดู latency หรือทดสอบ networking performance ระหว่าง container/host ( iperf ) การ analysis network packet ( tcpdump ) การ scanning port (nmap) monitor container metric (CPU, memory, network, I/O) แบบ real-time (ctop) Github 6. Kubetab   Kubectl plugin สำหรับสร้าง proxy ที่ Kubernetes service เพื่อ intercept หรือ tab request ที่จะถูก forward ไปยัง Pod เหมือนเวลาเราใช้ BurpSuite หรือ Zap ในการ tab request ระหว่าง browser และ server หลักการทำงานคือจะทำการรัน proxy container (เริ่มต้นใช้ MITMProxy)ในรูปแบบของ sidecar และคอย intercept request ก่อนส่งต่อไปยัง application container ยกตัวอย่างสถานการณ์ที่ใช้บ่อยๆ: Security testing : capture และ modify HTTP request ก่อนที่จะลองส่งไปยัง Pod Developer debugging : ใช้สำหรับตรวจสอบดู connection request ที่มีปัญหาในระหว่างการ request ไปยัง service ตัวอย่าง: kubectl tap on app-service -p443 --https --browser Document 7. Kubeshark CLI สำหรับ capture real-time traffic ทั้ง API Call และข้อมูลที่รับส่งกันใน Kubernetes cluster (เหมือน TCPDump หรือ Wireshark สำหรับ Kubernetes) จุดเด่นคือ มี UI Console ให้กดดูได้อย่างสะดวก ตัวอย่าง: kubeshark tap --set headless=true Github 8. Kubectl-trace Kubectl plugin ที่ทำให้เราส่ง bpftrace script เข้าไปรันบน node เพื่อ probe ข้อมูลจาก Linux kernel โดยตรงทั้ง Userspace (uprobe) และ kernel space (kprobe) ไม่จำเป็นต้องติดตั้งอะไรเพิ่มเติม โดยจะ run Pod "trace-runner" บน node ที่ต้องการ และรัน bpftrace เพื่อ compile script เป็น eBPF byte-code จากนั้นติดตั้งลงไปใน Linux kernel เพื่อ probe ข้อมูลตามที่เราต้องการ ยกตัวอย่าง use case: Trace ปัญหา OOM killed ดูการทำงานของ CPU Scheduler เพื่อตรวจสอบการ throttle CPU ตรวจสอบหาการ deadlocks ของ running process ตรวจสอบหาทำงานของ disk ว่าเกิดจากไฟล์ไหน process ใดที่ช้า Github 9. Inspektor-gadget Kubectl plugin สำหรับ probe ข้อมูลต่างๆ Linux kernel ด้วยความสามารถของ eBPF เช่นเดียวกับ “Kubectl-trace” แต่ที่แตกต่างจาก Kubectl-trace คือ Inspektor-gadget จะ pack bpf script ต่างๆมาให้แล้ว ไม่จำเป็นต้องมาเข้าใจ มาเขียน script ทำให้สามารถเรียกใช้งานแบบง่ายๆผ่าน plugin ได้เลย ตัวอย่าง: kubectl gadget run trace_exec:latest kubectl gadget run trace_open:latest -n default -c myapp Document 10. kubectl tree Kubectl plugin สำหรับแสดง dependency หรือความสัมพันธ์ระหว่าง resource ต่างๆ เช่น ตรวจสอบว่าภายใต้ deployment มี replicaset และ Pod ใดบ้าง รวมถึงสถานะของแต่ละ Pod ภายใต้ deployment นั้นๆด้วย ตัวอย่าง: kubectl tree deployment nginx Github 11. kubectl spy CLI สำหรับดูการเปลี่ยนแปลงของ resource ต่างๆบน Kubernetes แบบ real-time ยกตัวอย่างสถานการณ์ที่ใช้บ่อยๆ: ตรวจสอบสถานะการ rollout deployment ตรวจสอบการเปลี่ยนแปลง Pod status ตรวจสอบการเปลี่ยนแปลง IP Endpoint ของ service Github 12. K8sGPT CLI สำหรับสแกนข้อมูลและวิเคราะห์ปัญหาต่างๆบน Kubernetes cluster ร่วมกับ AI Model พร้อมแนะนำวิธีการแก้ไขแต่ละปัญหา โดยเริ่มต้นใช้ “OpenAI” สำหรับการวิเคราะห์ข้อมูล แต่เราสามารถเปลี่ยนเป็น model อื่นๆได้ เช่น ollama , bedrock, Gemini, Azure OpenAI หรือจะเป็น local model ของเราเองก็ได้เช่นกัน Github สุดท้ายแล้วเครื่องมือเหล่านี้เป็นแค่ตัวช่วยให้เราจัดการ Kubernetes ได้สะดวกมากขึ้นนะครับ ซึ่งสิ่งสำคัญที่สุดคือเราต้องเข้าใจการทำงานของ Kubernetes ก่อน แล้วเลือกใช้เครื่องมือให้เหมาะกับสถานการณ์ ถึงจะถือว่าเป็นการจัดการ Kubernetes ได้อย่างมีประสิทธิภาพ

Mar 30, 2025 - 19:24
 0
12 เครื่องมือ Debug Kubernetes เจ๋งๆ ที่ควรต้องมีติดมือไว้

การ Debug Kubernetes อาจเป็นงานยากสำหรับใครหลายๆคน อาจใช้เวลานานในการจะหาสาเหตุของบางปัญหา แต่ถ้าเรามีเครื่องมือดี ๆ อยู่ในมือ มันก็จะช่วยให้เราทำงานกับ Kubernetes ได้ง่ายขึ้น วันนี้ผมจะมาแชร์เครื่องมือที่นิยมที่จะมาช่วยทั้งการแก้ปัญหา, ตรวจสอบประสิทธิภาพ และตรวจจับข้อบกพร่องต่าง ๆ ของ Kubernetes มาลองดูกันครับ

1. kubectl debug
CLI ที่ช่วยให้เราสามารถสร้าง ephemeral container เข้าไปยัง Pod ที่กำลังทำงานอยู่ หรือสร้าง Pod จำลองที่ต้องการโดยเปลี่ยน attribute บางอย่างเช่น entrypoint, image version
ยกตัวอย่างสถานการณ์ที่เราอยากนำเครื่องมือ network troubleshooting เช่น ping, traceroute, nc, tcpdump ไปช่วย investigate ปัญหา network ของ Pod application กับปลายทาง ก็สามารถรันคำสั่ง:

  • kubectl debug app-Pod -it —image=nicolaka/netshoot

Document

2. kubectl top
CLI สำหรับดูการใช้งาน resource (CPU/Memory) ของแต่ละ Pod หรือแต่ละ Node (ต้องมี Metrics Server ทำงานอยู่บน cluster ที่เราต้องการตรวจสอบด้วย)
ตัวอย่าง:

kubectl top node

kubectl top pod

Document

3. Ktop
Kubectl plugin สำหรับดูการใช้งาน resource เช่นเดียวกับ kubectl top แต่จะสรุปข้อมูล insight บางอย่างเพิ่มเติมและปรับวิธีการแสดงผลให้ดูง่ายขึ้น

ตัวอย่าง:
kubectl ktop --namespace cloudation101

Github

4. Kube-capacity
Kubectl plugin ที่รวมผลลัพท์ระหว่าง kubectl top และ kubectl describe เพื่อให้เราเห็น request, limit รวมถึง utilization ของ resource ต่างๆ บน Kubernetes cluster ผ่านแสดงผลในหน้าเดียว

ตัวอย่าง:
kubectl resource-capacity --util

Github

5. Netshoot
Docker image และ Kubectl plugin สำหรับ troubleshoot ปัญหาที่เกี่ยวกับ container networking เช่น latency, routing, DNS resolving, firewall, ARPs

ยกตัวอย่างสถานการณ์ที่ใช้บ่อยๆ:

  • การดู latency หรือทดสอบ networking performance ระหว่าง container/host ( iperf )
  • การ analysis network packet ( tcpdump )
  • การ scanning port (nmap)
  • monitor container metric (CPU, memory, network, I/O) แบบ real-time (ctop)

Github

6. Kubetab
  Kubectl plugin สำหรับสร้าง proxy ที่ Kubernetes service เพื่อ intercept หรือ tab request ที่จะถูก forward ไปยัง Pod เหมือนเวลาเราใช้ BurpSuite หรือ Zap ในการ tab request ระหว่าง browser และ server
หลักการทำงานคือจะทำการรัน proxy container (เริ่มต้นใช้ MITMProxy)ในรูปแบบของ sidecar และคอย intercept request ก่อนส่งต่อไปยัง application container

ยกตัวอย่างสถานการณ์ที่ใช้บ่อยๆ:

  • Security testing : capture และ modify HTTP request ก่อนที่จะลองส่งไปยัง Pod
  • Developer debugging : ใช้สำหรับตรวจสอบดู connection request ที่มีปัญหาในระหว่างการ request ไปยัง service

ตัวอย่าง:
kubectl tap on app-service -p443 --https --browser

Document

7. Kubeshark
CLI สำหรับ capture real-time traffic ทั้ง API Call และข้อมูลที่รับส่งกันใน Kubernetes cluster (เหมือน TCPDump หรือ Wireshark สำหรับ Kubernetes) จุดเด่นคือ มี UI Console ให้กดดูได้อย่างสะดวก

ตัวอย่าง:
kubeshark tap --set headless=true

Github

8. Kubectl-trace
Kubectl plugin ที่ทำให้เราส่ง bpftrace script เข้าไปรันบน node เพื่อ probe ข้อมูลจาก Linux kernel โดยตรงทั้ง Userspace (uprobe) และ kernel space (kprobe) ไม่จำเป็นต้องติดตั้งอะไรเพิ่มเติม โดยจะ run Pod "trace-runner" บน node ที่ต้องการ และรัน bpftrace เพื่อ compile script เป็น eBPF byte-code จากนั้นติดตั้งลงไปใน Linux kernel เพื่อ probe ข้อมูลตามที่เราต้องการ

ยกตัวอย่าง use case:

  • Trace ปัญหา OOM killed
  • ดูการทำงานของ CPU Scheduler เพื่อตรวจสอบการ throttle CPU
  • ตรวจสอบหาการ deadlocks ของ running process
  • ตรวจสอบหาทำงานของ disk ว่าเกิดจากไฟล์ไหน process ใดที่ช้า

Github

9. Inspektor-gadget
Kubectl plugin สำหรับ probe ข้อมูลต่างๆ Linux kernel ด้วยความสามารถของ eBPF เช่นเดียวกับ “Kubectl-trace” แต่ที่แตกต่างจาก Kubectl-trace คือ Inspektor-gadget จะ pack bpf script ต่างๆมาให้แล้ว ไม่จำเป็นต้องมาเข้าใจ มาเขียน script ทำให้สามารถเรียกใช้งานแบบง่ายๆผ่าน plugin ได้เลย

ตัวอย่าง:

  • kubectl gadget run trace_exec:latest
  • kubectl gadget run trace_open:latest -n default -c myapp

Document

10. kubectl tree
Kubectl plugin สำหรับแสดง dependency หรือความสัมพันธ์ระหว่าง resource ต่างๆ เช่น ตรวจสอบว่าภายใต้ deployment มี replicaset และ Pod ใดบ้าง รวมถึงสถานะของแต่ละ Pod ภายใต้ deployment นั้นๆด้วย

ตัวอย่าง:
kubectl tree deployment nginx

Github

11. kubectl spy
CLI สำหรับดูการเปลี่ยนแปลงของ resource ต่างๆบน Kubernetes แบบ real-time

ยกตัวอย่างสถานการณ์ที่ใช้บ่อยๆ:

  • ตรวจสอบสถานะการ rollout deployment
  • ตรวจสอบการเปลี่ยนแปลง Pod status
  • ตรวจสอบการเปลี่ยนแปลง IP Endpoint ของ service

Github

12. K8sGPT
CLI สำหรับสแกนข้อมูลและวิเคราะห์ปัญหาต่างๆบน Kubernetes cluster ร่วมกับ AI Model พร้อมแนะนำวิธีการแก้ไขแต่ละปัญหา โดยเริ่มต้นใช้ “OpenAI” สำหรับการวิเคราะห์ข้อมูล แต่เราสามารถเปลี่ยนเป็น model อื่นๆได้ เช่น ollama , bedrock, Gemini, Azure OpenAI หรือจะเป็น local model ของเราเองก็ได้เช่นกัน

Github

สุดท้ายแล้วเครื่องมือเหล่านี้เป็นแค่ตัวช่วยให้เราจัดการ Kubernetes ได้สะดวกมากขึ้นนะครับ ซึ่งสิ่งสำคัญที่สุดคือเราต้องเข้าใจการทำงานของ Kubernetes ก่อน แล้วเลือกใช้เครื่องมือให้เหมาะกับสถานการณ์ ถึงจะถือว่าเป็นการจัดการ Kubernetes ได้อย่างมีประสิทธิภาพ