มีคำถามว่าหากเราพัฒนาแอพพลิเคชันด้วย Kubernetes และเก็บข้อมูลอยู่ใน S3 จะเลือกพัฒนาแอพพลิเคชันเป็น ReplicaSet ต่อตรงกับ S3 หรือทำเป็น StatefulSet ต่อกับ PVC (Persistence Volume Claim) แบบไหนจะดีกว่ากัน จึงได้สรุปข้อดีข้อเสียไว้ดังนี้
1. ความแตกต่าง
ความแตกต่างด้านส่วนประกอบซอฟต์แวร์จะเป็นดังนี้

รูปภาพ 1 การใช้งาน StatefulSet กับ PVC

รูปภาพ 2 การใช้งาน ReplicaSet กับ Storage S3 โดยตรง
จากภาพจะเห็นว่ามีข้อดีข้อเสียแตกต่างกันดังนี้
2. StatefulSet ทำงานกับ PVC
StatefulSet ทำงานกับ PVC มีข้อดีข้อเสียดังนี้
ข้อดี
- โปรแกรมเมอร์เขียนง่าย ใช้แค่ File API ตามปกติ
- แอพพลิเคชันไม่ขึ้นกับ Storage Technology ทำให้เปลี่ยนจาก S3 ไปเป็น Storage แบบอื่นได้อีกในอนาคต
ข้อเสีย
- Deployment ซับซ้อน ต้องเขียนส่วน PVC
- Infra Admin ต้องทำ PV และทำ Storage Class ไว้ด้วย
- Infra Admin ต้องทำ Retention Policy ให้กับ PV ด้วย
3. ReplicaSet ทำงานกับ S3 โดยตรง
ReplicaSet ทำงานกับ S3 โดยตรง มีข้อดีข้อเสียดังนี้
ข้อดี
- Deployment ไม่ซับซ้อนไม่ต้องเขียนส่วน PVC
- Infra Admin ไม่ต้องทำ PV และ Storage Class
- Infra Admin ไม่ต้องทำ Retention Policy แต่ต้องไปบริหารจัดการ S3 ตามปกติ
ข้อเสีย
- โปรแกรมเมอร์ต้องเรียนรู้ S3 API ทั้งส่วน Authentication และ Read/Write Bucket
- แอพพลิเคชันขึ้นกับ Storage Technology ทำให้เปลี่ยนจาก S3 ไปเป็น Storage แบบอื่นได้ยาก ถ้าจะเปลี่ยนต้องเป็น API เดียวกัน
4. แนวทางการเลือกใช้
เนื่องจากผลกระทบกับแต่ละบทบาทที่เกี่ยวข้องแตกต่างกัน หากในทีมงานมีแต่โปรแกรมเมอร์แต่ไม่มี Infrastructure Engineer ที่จะมาดำเนินการดูแลเรื่อง PV กับ PVC เราควรจะใช้วิธีการต่อตรงกับ S3 แต่หากมี Infrastructure Engineer ที่เชี่ยวชาญดูและให้เราควรที่จะเลือกใช้วิธีการต่อผ่าน PVC ซึ่งจะทำให้เราไม่ขึ้นกับเทคโนโยลีของ Storage และเปลี่ยนได้ในอนาคต
