Multiple inline command with pipe

[ux_image id=”410″ margin=”0px 0px 30px 0px”]

เรื่องมีอยู่ว่า…

เวลาใช้คำสั่ง kubectl มันมักจะเป็นคำสั่งแบบ 1 ต่อ 1 ตัวอย่าง เช่น

  • kubectl logs pod ….
  • kubectl delete pod …
  • kubectl exec -it …
  • อื่นๆ ที่ไม่ใช่ kubectl ก็มี

ปัญหาของผมคือ เวลาเรา delete pod มันจะสร้าง pod ใหม่ที่เป็น random name ให้เรา
ทีนี้เวลาเราจะ logs pod นั้นก็ต้อง get pods ก่อน เพื่อหาชื่อ แล้วค่อย logs ซึ่งมันเสียเวลามากอะ ต้อง copy paste copy paste

ตัวอย่าง ความยุ่งยาก 555

  • kubectl get pods
    สมมติได้ชื่อ cs02-confirm-sender-dev-kbank-686df864b4-k52fd
  • kubectl delete pod cs02-confirm-sender-dev-kbank-686df864b4-k52fd
  • kubectl get pods
    สมมติได้ชื่อ cs02-confirm-sender-dev-bbl-7f459b9444-7k6w6
  • kubectl logs cs02-confirm-sender-dev-bbl-7f459b9444-7k6w6

ดูสิๆ มันยาวไป ลองทำสั้นๆดูนะ

[code lang="bash"]kubectl delete pod (kubectl get pods | grep "cs02" | awk '{print $1}' | head -n 1)
kubectl logs (kubectl get pods | grep "cs02" | awk '{print $1}' | head -n 1)[/code]

วิธีคือ อ่านจากใจวงเล็บก่อน จากนั้นอ่านจากซ้ายไปขวา เช่น
kubectl get pods | grep “cs02” คือ | grep ชื่อที่เราต้องการ
จากนั้น awk ‘{print $1}’ คือ เอาแค่ตัวแรกสุด
head -n 1 คือ เอาตัวบนสุดจ้า