ข้ามไปเนื้อหาหลัก
Kubernetes

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:

alias k=kubectl

คราวนี้แทนที่จะพิมพ์ kubectl get pods ก็เหลือแค่พิมพ์ k get pods ได้เลย!