- Volumes
- Volumes ถาวร (Persistent)
- คลาสพื้นที่เก็บข้อมูล (Storage Classes)
- การทำแอพแบบถาวร (Persistent)
เมื่อทำแอพในสภาพแวดล้อม Kubernetes ส่วนประกอบที่สำคัญอย่างหนึ่งคือพื้นที่เก็บข้อมูล Kubernetes เสนอตัวเลือกมากมายในการจัดการพื้นที่เก็บข้อมูลและบำรุงรักษาข้อมูล แม้ว่า Pod จะไม่มีอยู่แล้วก็ตาม ในการทำเช่นนี้ Kubernetes ใช้โครงสร้างที่เรียกว่า Volume Volume คือไดเร็กทอรีซึ่งอาจมีข้อมูลบางอย่างอยู่ในนั้น ซึ่งคอนเทนเนอร์ในพ็อดสามารถเข้าถึงได้ ไดเร็กทอรีนี้เป็นส่วนหนึ่งของระบบไฟล์บนโหนดที่คอนเทนเนอร์ทำงานอยู่
1. Volumes
วอลุ่ม (Volumes) เป็นวิธีที่ดีที่สุดในการคงข้อมูลไว้ใน Kubernetes และเป็นส่วนสำคัญเมื่อทำแอพที่ต้องการข้อมูลถาวร ในขณะที่ Docker ยังให้แนวคิดเกี่ยวกับวอลุ่ม Kubernetes Volume มีอายุการใช้งานที่ยาวนานกว่า Docker หนึ่ง อยู่รอดได้จากการรีสตาร์ท Pod
Kubernetes รองรับ Volumes หลายประเภท: NFS, iSCSI, Glusterfs, Ceph, Cinder, Flocker เป็นต้น คุณสมบัติที่สำคัญของ Volumes คือสามารถติดตั้งกับคอนเทนเนอร์จำนวนเท่าใดก็ได้ใน Pod ซึ่งสนับสนุนพื้นที่เก็บข้อมูลที่ใช้ร่วมกันระหว่างคอนเทนเนอร์
ไดรฟ์ข้อมูลประเภทง่ายๆ ประเภทหนึ่งคือไดรฟ์ข้อมูล emptyDir
ซึ่งสร้างขึ้นเมื่อ Pod ถูกกำหนดให้กับโหนดหนึ่ง และคงอยู่จนกว่า Pod จะทำงานบนโหนดนั้น ไดรฟ์ข้อมูล emptyDir
นำเสนอวิธีง่ายๆ ในการแบ่งปันข้อมูลระหว่างคอนเทนเนอร์ในพ็อด
2. Volumes ถาวร (Persistent)
แม้ว่า Volumes จะมอบโซลูชันสำหรับการจัดเก็บข้อมูลใน Pod เดียว แต่จะเชื่อมโยงกับวงจรชีวิตของ Pod นี่คือที่มาของ Persistent Volumes (PVs) Persistent Volume คือส่วนของพื้นที่จัดเก็บในคลัสเตอร์ที่ได้รับการจัดเตรียมโดยผู้ดูแลระบบหรือจัดเตรียมแบบไดนามิกโดยใช้ Storage Classes
PV เป็นทรัพยากรในคลัสเตอร์เช่นเดียวกับโหนด และประกอบด้วยข้อมูลจำเพาะและสถานะ ซึ่งมีข้อมูลตามเวลาจริงเกี่ยวกับวอลุ่ม PV เป็นวิธีสำหรับผู้ดูแลระบบในการรวมทรัพยากรหน่วยเก็บข้อมูลและสรุปรายละเอียดของโครงสร้างพื้นฐานหน่วยเก็บข้อมูลพื้นฐานจากผู้ใช้
ผู้ใช้สามารถใช้ PV เหล่านี้ในคลัสเตอร์ Kubernetes ผ่าน Persistent Volume Claims (PVC) การอ้างสิทธิ์ Volumes แบบต่อเนื่องเป็นการร้องขอพื้นที่เก็บข้อมูลโดยผู้ใช้ เช่นเดียวกับที่ Pod เป็นการร้องขอทรัพยากร CPU และ RAM เมื่อสร้าง PVC แล้ว Kubernetes controlplane จะมองหา PV ที่ตรงกับคำขอและเชื่อมโยงเข้าด้วยกัน
สิ่งสำคัญคือต้องทราบว่า PV ไม่ใช่เนมสเปซ ซึ่งหมายความว่ามีอยู่ในคลัสเตอร์ Kubernetes ทั้งหมด ในทางกลับกัน PVCs เป็นเนมสเปซและผู้ใช้สามารถร้องขอได้ภายในเนมสเปซเฉพาะ
3. คลาสพื้นที่เก็บข้อมูล (Storage Classes)
คลาสพื้นที่จัดเก็บช่วยให้ผู้ดูแลระบบสามารถอธิบาย “classes” ของพื้นที่จัดเก็บที่พวกเขาเสนอให้ นี่คือระดับนามธรรมที่ซ่อนรายละเอียดของแพลตฟอร์มพื้นที่เก็บข้อมูลพื้นฐาน ไม่ว่าจะเป็น AWS EBS, Azure Disk, Google Persistent Disk หรือ SSD ในเครื่อง หรือแพลตฟอร์มพื้นที่เก็บข้อมูลอื่นๆ คลาสพื้นที่เก็บข้อมูลแต่ละคลาสประกอบด้วยรายละเอียดของผู้จัดเตรียม พารามิเตอร์ และนโยบายการเรียกคืน
ผู้ใช้สามารถใช้ Storage Class เพื่อจัดสรร PV แบบไดนามิก เมื่อ PVC ระบุ a storageClassName
ระบบจะใช้คลาสนั้นเพื่อจัดเตรียม PV ใหม่แบบไดนามิกสำหรับ PVC
4. การทำแอพแบบถาวร (Persistent)
เรามาแสดงแนวคิดเหล่านี้ด้วยการทำแอพถาวร พิจารณาเว็บแอปพลิเคชันง่ายๆ ที่บันทึกข้อมูลผู้ใช้ หากไม่มีที่เก็บข้อมูลถาวร ข้อมูลใดๆ ที่บันทึกไว้จะสูญหายหาก Pod ขัดข้องหรือถูกยกเลิก การใช้โซลูชันพื้นที่เก็บข้อมูล Kubernetes ทำให้เราสามารถทำแอพถาวรที่เก็บรักษาข้อมูลได้
ขั้นแรก เราต้องสร้าง Persistent Volume ต่อไปนี้เป็นไฟล์ YAML อย่างง่ายที่อธิบาย Persistent Volume:
apiVersion: v1
kind: PersistentVolume
metadata:
name: my-pv-volume
spec:
storageClassName: manual
capacity:
storage: 1Gi
accessModes:
- ReadWriteOnce
hostPath:
path: "/mnt/data"
ไฟล์ YAML นี้อธิบาย Persistent Volume ที่มี my-pv-volume
ความจุ 1Gi ที่ใช้ manual
Storage Class ตั้งค่าเป็น ReadWriteOnce
ซึ่งหมายความว่าไดรฟ์ข้อมูลสามารถติดตั้งเป็นแบบอ่าน-เขียนได้ด้วยโหนดเดียว
ต่อไป เราต้องสร้าง Persistent Volume Claim เพื่อขอ Persistent Volume ที่เราเพิ่งสร้างขึ้น:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: my-pv-claim
spec:
storageClassName: manual
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
การอ้างสิทธิ์ไดรฟ์ข้อมูลแบบต่อเนื่องนี้ระบุชื่อ my-pv-claim
คำขอพื้นที่เก็บข้อมูลจาก manual
คลาสพื้นที่เก็บข้อมูลที่มีความจุ 1Gi และการเข้าถึง ReadWriteOnce
ตอนนี้ เราสามารถสร้าง Pod ที่ใช้ Persistent Volume Claim สำหรับพื้นที่เก็บข้อมูลได้:
apiVersion: v1
kind: Pod
metadata:
name: my-pv-pod
spec:
volumes:
- name: my-pv-storage
persistentVolumeClaim:
claimName: my-pv-claim
containers:
- name: my-pv-container
image: nginx
ports:
- containerPort: 80
volumeMounts:
- mountPath: "/usr/share/nginx/html"
name: my-pv-storage
ชื่อพ็อดนี้เมานต์ my-pv-pod
Persistent Volume Claim my-pv-claim
ไปยังไดเร็กทอรีภายในคอนเทนเนอร์ ข้อมูลใดๆ ที่เขียนลง /usr/share/nginx/html
ใน Pod จะถูกจัดเก็บไว้ใน Persistent Volume และได้รับการดูแลตลอดการรีสตาร์ท Pod
ไฟล์ YAML สำหรับ PV, PVC และ Pod สามารถสร้างและนำไปใช้กับคลัสเตอร์ Kubernetes ได้ด้วยคำสั่ง kubectl apply -f <filename>
เมื่อทำความเข้าใจและใช้แนวคิดพื้นที่เก็บข้อมูลของ Kubernetes คุณจะสามารถทำแอพที่รักษาข้อมูลได้อย่างต่อเนื่อง แม้ในสภาพแวดล้อมแบบไดนามิกและแบบกระจาย สิ่งนี้ทำให้สามารถทำแอพที่แข็งแกร่งและยืดหยุ่นซึ่งสามารถทนต่อความล้มเหลวและการหยุดชะงักโดยไม่สูญเสียข้อมูล