Volumes — ที่เก็บข้อมูลของ Pod
ephemeral vs persistent และทำไม container ต้องมี volume
พื้นฐานที่ควรรู้: โดยธรรมชาติแล้ว Container ถูกออกแบบมาให้ "ทำลายทิ้งได้เสมอ" (Ephemeral) แปลว่าไฟล์ใดๆ ที่ถูกเขียนลงไปใน Container จะหายไปทันทีที่ Container ถูกรีสตาร์ท หากแอปพลิเคชันจำเป็นต้องเก็บข้อมูลบางอย่างไว้ (เช่น ไฟล์รูปภาพ, แคช) จะต้องมีวิธีเก็บข้อมูลไว้ภายนอก Container
ระบบไฟล์ในตัว 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 ถูกประเภท

