ข้ามไปเนื้อหาหลัก
คอนเทนเนอร์· ~15 นาที

StatefulSet — workload ที่มี identity (+ Lab)

ฐานข้อมูล/คิวที่แต่ละ Pod ต้องมีชื่อและ storage คงที่

เปรียบเทียบให้เห็นภาพ

Deployment ปฏิบัติกับ Pod เหมือนพนักงานชั่วคราวที่สลับกันได้ (ใครก็ได้) · StatefulSet เหมือนพนักงานที่มีโต๊ะประจำและชื่อประจำ — Pod-0, Pod-1, Pod-2 มีลำดับและ storage เป็นของตัวเองไม่สลับกัน

งานที่มี state (ฐานข้อมูล, Kafka, Redis cluster) ต้องการ 3 อย่างที่ Deployment ให้ไม่ได้: ชื่อ/ลำดับคงที่, storage ติดตัวแต่ละ Pod, และการสร้าง/ลบตามลำดับ · StatefulSet ให้ครบ

แต่ละ Pod มีชื่อคงที่ + PVC ของตัวเอง ไม่สลับกัน

web-0ชื่อคงที่
pvc-0storage ติดตัว
web-1ชื่อคงที่
pvc-1storage ติดตัว
web-2ชื่อคงที่
pvc-2storage ติดตัว

สร้างตามลำดับ 0→1→2 · Pod สร้างใหม่ได้ PVC เดิมกลับมา

StatefulSet: แต่ละ Pod มีชื่อคงที่ (web-0, web-1) + PVC เป็นของตัวเอง ไม่สลับกัน
  • ชื่อคงที่ — Pod ชื่อ <name>-0, -1, -2 ตามลำดับ (ไม่สุ่มเหมือน Deployment)
  • storage ติดตัว — แต่ละ Pod ได้ PVC ของตัวเอง ที่ผูกกลับมาแม้ Pod สร้างใหม่
  • ลำดับ — สร้าง 0→1→2, ลบ 2→1→0 (สำคัญกับ cluster ที่มี leader/follower)
  • มักคู่กับ Headless Service (clusterIP: None) เพื่อให้เข้าถึงแต่ละ Pod ตรง ๆ ด้วยชื่อ

สรุป Key Takeaways

  • StatefulSet = workload ที่ต้องมี identity คงที่ + storage ติดตัว + ลำดับ (DB, Kafka, Redis)
  • Pod มีชื่อคงที่ (name-0/1/2) และ PVC ของตัวเองที่ผูกกลับมา
  • มักคู่กับ Headless Service · stateless ทั่วไปยังใช้ Deployment
  • พิจารณา managed DB ของ cloud ก่อนรัน DB เองบน K8s
อ่านจบแล้วอย่าลืมทำเครื่องหมาย