หมวดหมู่: Web

kubernetes: Podkubernetes: Pod

Pod คือหน่วยที่เล็กที่สุดและเรียบง่ายที่สุดใน Kubernetes ครับ ถ้าให้เปรียบเทียบง่าย ๆ ให้คิดว่า Kubernetes เป็นเหมือนเรือขนส่งสินค้าขนาดใหญ่ ตัว Pod ก็คือ “ตู้คอนเทนเนอร์” 1 ตู้นั่นเอง

โดยปกติแล้ว ใน 1 Pod มักจะมีแค่ 1 แอปพลิเคชัน (1 Container) รันอยู่ข้างใน แต่ในบางกรณี มันสามารถมีหลาย Container อยู่ร่วมกันได้ ถ้าแอปพลิเคชันเหล่านั้นจำเป็นต้องทำงานประสานกันอย่างใกล้ชิด


3 คุณสมบัติสำคัญของ Pod ที่ควรรู้

เมื่อ Container มาอยู่ร่วมกันใน Pod เดียวกัน พวกมันจะมีพฤติกรรมเหมือนเป็นเครื่องคอมพิวเตอร์เครื่องเดียวกันทันที

  • ใช้ IP เดียวกัน (Shared Network)
    ทุก Container ใน Pod จะแชร์ Network Namespace ร่วมกัน หมายความว่าพวกมันสามารถคุยกันเองได้ง่าย ๆ ผ่าน localhost และพอร์ตที่ต่างกัน
  • ใช้ที่เก็บข้อมูลร่วมกันได้ (Shared Storage/Volumes)
    เราสามารถตั้งค่าให้ Container ใน Pod เข้าถึงโฟลเดอร์เดียวกันเพื่อแชร์ไฟล์หรือข้อมูลระหว่างกันได้
  • เกิด-ตายพร้อมกัน (Lifecycle)
    Pod มีวงจรชีวิตของมันเอง ถ้า Pod ถูกลบหรือย้ายไปเครื่องอื่น Container ทุกตัวที่อยู่ข้างในนั้นก็จะถูกลบและสร้างใหม่พร้อมกันทั้งหมด

รูปแบบการใช้งาน Pod (1 Container vs. Multi-Container)

เพื่อให้เห็นภาพชัดเจนขึ้น ลองดูความแตกต่างของการจัดวาง Container ใน Pod ครับ

  1. แบบยอดนิยม: One-container-per-Pod
    เป็นท่ามาตรฐาน (Standard) ที่ใช้กันทั่วไป 90% ของระบบ คือ 1 Pod มีแค่ 1 Container เช่น Pod ของ Web App, Pod ของ API Base เผื่อเวลาอยากขยายระบบ (Scale) ก็แค่สั่งเพิ่มจำนวน Pod นี้นับเป็นตัวๆ ไปเลย
  2. แบบขั้นสูง: Multi-container Pod
    ใช้เมื่อมี Container รอง (เรียกว่า Sidecar Container) มาช่วยงาน Container หลัก โดยที่มันต้องอยู่ด้วยกันตลอดเวลา แยกกันไม่ได้
    ตัวอย่างจริง
    Container หลักทำหน้าที่รัน Web Application ส่วน Container รอง (Sidecar) ทำหน้าที่คอยดึง Log ของ Web App ส่งไปเก็บไว้ที่ระบบส่วนกลาง (เช่น Elasticsearch) สองตัวนี้จึงต้องมัดรวมกันอยู่ใน Pod เดียวกัน

ข้อควรระวัง: Pod เป็นสิ่ง “ชั่วคราว” (Ephemeral)

เรื่องนี้สำคัญมากครับ Pod ใน Kubernetes ถูกออกแบบมาให้พร้อม “ตาย” ได้ตลอดเวลา ถ้าเครื่อง Server (Node) ที่มันรันอยู่พัง ตัว Pod ก็จะตายไปเลย และ Kubernetes จะไปสั่งสร้าง Pod ตัวใหม่ขึ้นมาทดแทนให้โดยอัตโนมัติ

ดังนั้น

  1. อย่าเซฟข้อมูลสำคัญไว้ใน Pod ตรง ๆ เพราะถ้า Pod ตาย ข้อมูลจะหายทันที (ต้องใช้ Kubernetes Volumes ช่วยเก็บข้อมูลถาวร)
  2. เรามักจะไม่สร้าง Pod เดี่ยว ๆ ขึ้นมาใช้งานเอง แต่จะสั่งงานผ่านตัวคุมที่เรียกว่า Deployment หรือ ReplicaSet เพื่อให้มันคอยดูแลและสั่งงอก Pod ใหม่ให้เราเวลามันพังครับ

อ่านเพิ่มเติม