Kubectl Cheatsheet (ฉบับใช้งานจริง)
รวมคำสั่งที่ System Admin และ DevOps ใช้บ่อยที่สุด ไม่ใช่แค่ท่องจำ แต่สอดแทรก Use Case (สถานการณ์จริง) ว่าแต่ละคำสั่งเอาไปกู้ชีพแอปพลิเคชันยังไง
ตรวจสอบสถานะ (Viewing)
Scenario จำลองสถานการณ์:
👨💻 ตื่นเช้ามาเปิดคอม สิ่งแรกที่ต้องทำคือเช็คว่าระบบล่มไหม มี Pod ตัวไหนสถานะกลายเป็น CrashLoopBackOff หรือเปล่า
$ kubectl get podsดูรายชื่อ Pod ใน Namespace ปัจจุบัน
ใช้ตอนไหน? — ใช้ดูภาพรวมว่า Pod ทั้งหมดสถานะเป็น "Running" (1/1) หรือไม่
$ kubectl get pods -Aดู Pod ทั้งหมดในทุก Namespace
ใช้ตอนไหน? — บางทีเพื่อนรันแอปไว้ Namespace อื่นแล้วหาไม่เจอ คำสั่งนี้จะกวาดหาให้หมด
NAMESPACE NAME READY STATUS RESTARTS default frontend-pod 1/1 Running 0 kube-system coredns-xyz 1/1 Running 0
$ kubectl get nodesดูสถานะของเครื่องเซิร์ฟเวอร์ (Node)
ใช้ตอนไหน? — เวลาเห็น Pod ค้างอยู่สถานะ "Pending" นานๆ ต้องมาเช็คว่า Node เรา Ready และมีที่ว่างพอไหม
เจาะลึก (Debugging & Troubleshooting)
Scenario จำลองสถานการณ์:
🚨 จู่ๆ แจ้งเตือนดังว่า "เว็บล่ม!" คุณต้องรีบหาสาเหตุให้เจอภายใน 5 นาที ว่าเป็นที่โค้ดพัง หรือคลัสเตอร์เต็ม
$ kubectl describe pod <name>ดูรายละเอียดเชิงลึก (Event, Error, Scheduler)
ใช้ตอนไหน? — เวลา Pod สร้างไม่สำเร็จ (ImagePullBackOff) คำสั่งนี้จะบอกชัดเจนเลยว่า "ลืมใส่รหัสผ่านดึง Image" หรือ "พิมพ์ชื่อ Image ผิด"
$ kubectl logs -f <name>ดู Log แบบเรียลไทม์ (เหมือน tail -f)
ใช้ตอนไหน? — นักพัฒนาเพิ่งอัปโค้ดขึ้นไปแล้วบอกว่า "บั๊กนิดหน่อย" คุณเลยต้องมานั่งดู Log ไหลสดๆ ตอน User กดปุ่มเพื่อหา Error Exception
$ kubectl top podsดูการใช้ CPU / RAM
ใช้ตอนไหน? — แอปอืดผิดปกติ พอพิมพ์คำสั่งนี้ปุ๊บ อ๋อ... Pod ตัวนี้กิน RAM ไป 99% นี่เอง
สร้างและจัดการ (Imperative / Declarative)
Scenario จำลองสถานการณ์:
🚀 ถึงเวลา Deploy ฟีเจอร์ใหม่ขึ้น Production คุณมีไฟล์ YAML ที่เขียนเตรียมไว้แล้ว
$ kubectl apply -f app.yamlสร้างหรืออัปเดตทรัพยากรตามไฟล์ YAML
ใช้ตอนไหน? — ท่ามาตรฐานที่สุด! ไม่ว่าจะเป็นสร้างใหม่ หรือแก้โค้ดมาแล้วจะควบรวมของใหม่เข้ากับของเก่า ก็ใช้แค่คำสั่งนี้ (Idempotent)
$ kubectl delete pod <name>ลบ Pod ทิ้ง (เพื่อบังคับให้สร้างใหม่)
ใช้ตอนไหน? — บางทีแอปค้าง (Deadlock) ขี้เกียจหาเหตุผล แค่สั่งลบ Pod ทิ้ง เดี๋ยว ReplicaSet จะปั้น Pod ตัวใหม่ที่สะอาดๆ ขึ้นมาแทนทันทีแบบอัตโนมัติ
เข้าแทรกแซง (Interacting)
Scenario จำลองสถานการณ์:
🕵️♂️ แผนก QA บอกว่า "เข้าหน้าเว็บไม่ได้" แต่คุณดู Log แล้วแอปทำงานปกติ คุณเลยต้องมุดเข้าไปดูด้วยตาตัวเอง
$ kubectl exec -it <pod_name> -- /bin/shมุดเข้าไปใน Shell ของ Pod
ใช้ตอนไหน? — เข้าไปเช็คว่าข้างในมีไฟล์ Config ครบไหม หรือลอง ping หา Database ดูว่าเครือข่ายเชื่อมต่อได้จริงหรือเปล่า
/usr/src/app # cat config.json /usr/src/app # ping db.local
$ kubectl port-forward svc/<svc_name> 8080:80ดึง Port มาผูกกับ localhost ของเรา
ใช้ตอนไหน? — อยากเปิดดูเว็บผ่านเบราว์เซอร์ในเครื่องเรา (localhost:8080) แต่ไม่ต้องเปิด Port ออก Public Internet ให้ใครรู้ ปลอดภัยสุดๆ
สเกลและการปล่อยของ (Scaling & Rollout)
Scenario จำลองสถานการณ์:
📈 กำลังจะมีแคมเปญ 11.11 คนน่าจะเข้าเว็บเยอะมาก ต้องเตรียมขยายเซิร์ฟเวอร์ และถ้ามีอะไรผิดพลาด ต้องถอยกลับได้ทันที
$ kubectl scale deployment web --replicas=10ปรับจำนวน Pod เป็น 10 ตัวทันที
ใช้ตอนไหน? — ไม่ต้องแก้ไฟล์ YAML ให้เสียเวลา สั่งเพิ่มเซิร์ฟเวอร์รับโหลดจาก 2 เป็น 10 เครื่องภายในเสี้ยววินาที
$ kubectl rollout undo deployment/webถอยกลับ (Rollback) ไปเวอร์ชั่นก่อนหน้า
ใช้ตอนไหน? — เพิ่ง Deploy ระบบจ่ายเงินเวอร์ชั่น 2.0 ไปเมื่อกี้แล้วบั๊ก ลูกค้าจ่ายเงินไม่ได้! ไม่ต้องหาจุดแก้ สั่ง Undo ถอยกลับไปเวอร์ชั่น 1.9 ทันที
Pro Tip (สำหรับคนใช้ Mac / Linux)
คุณสามารถตั้ง alias เพื่อพิมพ์คำสั่งให้สั้นลงได้ ด้วยการนำโค้ดด้านล่างไปใส่ในไฟล์ ~/.bashrc หรือ ~/.zshrc:
คราวนี้แทนที่จะพิมพ์ kubectl get pods ก็เหลือแค่พิมพ์ k get pods ได้เลย!

