ข้ามไปเนื้อหาหลัก
คอนเทนเนอร์· ~12 นาที· อัปเดตล่าสุด

Volumes — ที่เก็บข้อมูลของ Pod

ephemeral vs persistent และทำไม container ต้องมี volume

พื้นฐานที่ควรรู้: โดยธรรมชาติแล้ว Container ถูกออกแบบมาให้ "ทำลายทิ้งได้เสมอ" (Ephemeral) แปลว่าไฟล์ใดๆ ที่ถูกเขียนลงไปใน Container จะหายไปทันทีที่ Container ถูกรีสตาร์ท หากแอปพลิเคชันจำเป็นต้องเก็บข้อมูลบางอย่างไว้ (เช่น ไฟล์รูปภาพ, แคช) จะต้องมีวิธีเก็บข้อมูลไว้ภายนอก Container

Volume เหมือนลิ้นชักส่วนตัว

ระบบไฟล์ในตัว container เหมือนกระดาษทด — ฉีกทิ้งเมื่อ container ตาย · Volume เหมือนลิ้นชักที่ต่อเข้ากับ Pod ข้อมูลอยู่รอดแม้ container ในนั้น restart

จำจากบทแรก: container เป็น ephemeral — เขียนไฟล์ไว้ในตัวมันจะหายเมื่อ restart · Volume คือที่เก็บที่ผูกกับ Pod เพื่อให้ข้อมูลอยู่รอดและแชร์ระหว่าง container ใน Pod เดียวกันได้

  • emptyDir — โฟลเดอร์ว่างที่อยู่คู่ Pod หายเมื่อ Pod ถูกลบ เหมาะ cache/scratch แชร์ระหว่าง container
  • hostPath — mount โฟลเดอร์จาก node (ระวัง! ผูกกับเครื่อง ไม่ portable)
  • persistentVolumeClaim — ขอที่เก็บถาวรจากระบบ storage (บทถัดไป) — วิธีมาตรฐานของงานจริง
  • configMap / secret — mount ค่าตั้งค่า/ความลับเป็นไฟล์ก็ถือเป็น volume ชนิดหนึ่ง

สรุป Key Takeaways

  • ไฟล์ในตัว container หายเมื่อ restart — ต้องใช้ Volume ถ้าอยากให้อยู่รอด
  • emptyDir อยู่คู่ Pod (หายเมื่อ Pod ลบ) · PVC = ถาวรจริง
  • ConfigMap/Secret ที่ mount เป็นไฟล์ก็เป็น volume ชนิดหนึ่ง

คำถามที่พบบ่อย

emptyDir กับ hostPath ต่างกันยังไง ใช้ตอนไหน

emptyDir = พื้นที่ชั่วคราวอายุเท่า pod (แชร์ไฟล์ระหว่าง container ใน pod, พื้นที่ทำงานชั่วคราว) ส่วน hostPath = mount โฟลเดอร์ของ node จริง — อันตรายและผูก pod กับเครื่อง ใช้เฉพาะงาน system-level (log agent) โดยทั่วไปเลี่ยง hostPath ใน production

ข้อมูลใน container หายตอนไหนบ้าง

Layer เขียนได้ของ container หายทุกครั้งที่ container restart — emptyDir อยู่รอด restart แต่หายเมื่อ pod ถูกลบ/ย้ายเครื่อง — ข้อมูลที่ต้องอยู่ถาวรจริงต้องใช้ PersistentVolume เท่านั้น จำสามระดับนี้แล้วจะเลือก volume ถูกประเภท

อ่านจบแล้วอย่าลืมทำเครื่องหมาย