ป้ายกำกับ: Ephemeral

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 ใหม่ให้เราเวลามันพังครับ

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