
Kubernetes รุ่นแรก ๆ เป็นแพลตฟอร์มการจัดการคอนเทนเนอร์ที่ออกแบบมาเพื่อรองรับแอปพลิเคชันที่ไม่มีสถานะ (stateless applications) ซึ่งไม่จำเป็นต้องจัดเก็บข้อมูลถาวร แต่ในทางปฏิบัติ มีแอปพลิเคชันจำนวนมากที่ต้องจัดเก็บข้อมูลถาวร เช่น ฐานข้อมูล เซิร์ฟเวอร์จัดเก็บไฟล์ ฯลฯ โดยผู้พัฒนา Kubernetes ก็เล็งเห็นถึงปัญหานี้ จึงได้เพิ่มคุณสมบัติสำหรับจัดการข้อมูลแบบถาวร เช่น Persistent Volumes (PVs), Persistent Volume Claims (PVCs), StatefulSet, ฯลฯ เข้ามาเพื่อให้การจัดการเกี่ยวกับการจัดเก็บข้อมูลแบบถาวรบน Kubernetes Cluster มีความยืดหยุ่นและใช้งานได้สะดวกขึ้น
Kubernetes Cluster บนบริการคลาวด์ (on-cloud) มักจะมีบริการที่จัดเก็บข้อมูลแบบถาวรให้อยู่แล้ว โดยผู้ใช้บริการสามารถระบุชนิดของที่จัดเก็บข้อมูลที่ต้องการได้ในขณะที่สร้าง PersistentVolumeClaim
แต่สำหรับ Kubernetes Cluster ในองค์กร (on-premise) ผู้ดูแลคลัสเตอร์จะต้องจัดการที่จัดเก็บข้อมูลแบบถาวรด้วยตนเอง หรือติดตั้งซอฟต์แวร์สำหรับช่วยจัดการ โดยวิธีการที่พบเห็นได้ทั่วไปได้แก่
- จัดการที่จัดเก็บข้อมูลแบบถาวรด้วยตนเอง
- ใช้ซอฟต์แวร์ประเภท Provisioner
- ติดตั้งระบบจัดเก็บข้อมูลแบบกระจาย (distributed storage system) ในคลัสเตอร์
จัดการที่จัดเก็บข้อมูลแบบถาวรด้วยตนเอง
สำหรับวิธีนี้ ทุกครั้งที่มีการสร้าง PersistentVolumeClaim
ในภายใน Kubernetes Cluster ผู้ดูแลคลัสเดตอร์จะต้องเป็นผู้จัดหาที่จัดเก็บข้อมูล และสร้าง PersistentVolume
สำหรับที่จัดเก็บข้อมูลที่จัดเตรียมไว้ โดยอาจจะจัดหาที่จัดเก็บข้อมูลในโนดใดโนดหนึ่งของคลัสเตอร์ (local path) หรืออุปกรณ์จัดเก็บข้อมูลภายนอกผ่านโพรโทคอล NFS/iSCSI ตามความเหมาะสม
ใช้ซอฟต์แวร์ประเภท Provisioner
วิธีนี้เกิดจากการนำแนวคิด dynamic volume provisioning มาประยุกต์ใช้งาน โดยให้มี Pod หนึ่งในคลัสเตอร์ที่ทำหน้าที่ตรวจจับการสร้าง PersistentVolumeClaim
ในคลัสเตอร์ หากตรวจพบว่าตรงตามเงื่อนไข จึงสร้าง PersistentVolume
ให้โดยอัตโนมัติ ทำให้ผู้ดูแลคลัสเตอร์ไม่ต้องดำเนินการด้วยตนเอง ตัวอย่างซอฟต์แวร์ประเภท Provisioner ได้แก่
- Local Path Provisioner จัดหาที่จัดเก็บข้อมูลในโนดใดโนดหนึ่งของคลัสเตอร์ (local path) โดยอัตโนมัติ
- Kubernetes NFS Subdir External Provisioner จัดหาที่จัดเก็บข้อมูลใน NFS Server ภายนอก โดยจะสร้างโฟลเดอร์ย่อยขึ้นมาสำหรับจัดเก็บข้อมูลสำหรับแต่ละ
PersistentVolumeClaim
โดยอัตโนมัติ
ติดตั้งระบบจัดเก็บข้อมูลแบบกระจายในคลัสเตอร์
การติดตั้งระบบจัดเก็บข้อมูลแบบกระจาย (distributed storage system) ในคลัสเตอร์ ทำให้สามารถใช้ที่จัดเก็บข้อมูลของโนดภายในคลัสเตอร์ได้ โดยข้อมูลจะมีความทนทานกว่าการจัดเก็บข้อมูลในโนดใดโนดหนึ่ง เนื่องจากข้อมูลถูกกระจายอยู่ในหลายโนด อย่างไรก็ตาม ระบบจัดเก็บข้อมูลแบบกระจายในคลัสเตอร์มีความซับซ้อนสูง จึงควรวิเคราะห์ผลดีผลเสีย และวางแผนให้รอบคอบก่อนที่จะพิจารณาใช้งาน
ปัจจุบันมีระบบจัดเก็บข้อมูลแบบกระจายที่พัฒนามาสำหรับติดตั้งบน Kubernetes Cluster ซึ่งแต่ละระบบก็มีข้อดีและข้อจำกัดแตกต่างกันออกไป ตัวอย่างระบบจัดเก็บข้อมูลแบบกระจายที่สามารถทำงานบน Kubernetes Cluster ได้ เช่น