Kubernetes Persistent Volumes (PV)
Introduction
Kubernetes Persistent Volumes (PV) เป็นฟีเจอร์ที่ช่วยให้สามารถจัดการข้อมูลที่ต้องการเก็บรักษาในระยะยาว โดยไม่ขึ้นกับการทำงานของ Pod และการจัดการข้อมูลนี้สามารถแยกออกจาก Pod และ Node ได้ เพื่อให้ข้อมูลมีความเสถียรและปลอดภัยในกรณีที่ Pod ถูกลบหรือย้าย
Key Concepts
-
Persistent Volume (PV):
- PV คือแหล่งข้อมูลที่ถูกสร้างขึ้นจากแหล่งเก็บข้อมูลภายนอก เช่น NFS, Cloud Storage หรือ Volume แบบดั้งเดิมที่มีอยู่ในโฮสต์ Kubernetes
- PV เป็นทรัพยากรที่สามารถจัดสรรได้ในคลัสเตอร์ Kubernetes ซึ่งสามารถใช้ร่วมกันโดยหลายๆ Pod
-
Persistent Volume Claim (PVC):
- PVC คือคำร้องขอจากผู้ใช้หรือแอปพลิเคชันให้ใช้ Persistent Volume
- PVC ระบุขนาด, ชนิดของการเข้าถึงข้อมูล (Access Mode), และลักษณะของ Storage ที่ต้องการ
-
Storage Class:
- Storage Class ใช้ในการกำหนดประเภทของ PV และวิธีการจัดสรร PV
- Storage Class สามารถกำหนดว่า PV จะใช้ Storage แบบใด เช่น SSD, HDD หรือ Cloud Provider ต่าง ๆ
-
Access Modes:
ReadWriteOnce (RWO): สามารถเข้าถึงได้จากโหนดเดียวและสามารถเขียนได้ReadOnlyMany (ROX): สามารถเข้าถึงได้จากหลายๆ โหนด แต่ไม่สามารถเขียนได้ReadWriteMany (RWX): สามารถเข้าถึงได้จากหลายๆ โหนดและสามารถเขียนได้
-
Reclaim Policy:
Retain: ปล่อยให้ PV อยู่ในสภาพเดิมเมื่อ PVC ถูกลบRecycle: ทำการลบข้อมูลใน PV เมื่อ PVC ถูกลบDelete: ลบ PV และข้อมูลทั้งหมดเมื่อ PVC ถูกลบ
Working with Persistent Volumes
Creating a Persistent Volume
การสร้าง Persistent Volume (PV) ใน Kubernetes สามารถทำได้ด้วยการกำหนดค่าในไฟล์ YAML ดังนี้:
apiVersion: v1
kind: PersistentVolume
metadata:
name: my-pv
spec:
capacity:
storage: 10Gi
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Retain
storageClassName: standard
hostPath:
path: "/mnt/data"
ในตัวอย่างนี้:
capacity: กำหนดขนาดของ VolumeaccessModes: กำหนดโหมดการเข้าถึง (เช่นReadWriteOnce)persistentVolumeReclaimPolicy: กำหนดการจัดการ PV หลังจาก PVC ถูกลบ (เช่นRetain)hostPath: กำหนดแหล่งข้อมูลในโฮสต์ที่ PV จะใช้
Creating a Persistent Volume Claim (PVC)
หลังจากที่สร้าง PV แล้ว ผู้ใช้สามารถสร้าง PVC ที่จะร้องขอการใช้ PV ได้:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: my-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Gi
storageClassName: standard
ในตัวอย่างนี้:
accessModes: กำหนดโหมดการเข้าถึงที่ต้องการresources.requests.storage: กำหนดขนาดของ Volume ที่ต้องการstorageClassName: ระบุชื่อของ Storage Class ที่ใช้
Binding PVC to PV
เมื่อ PVC ถูกสร้างขึ้น, Kubernetes จะทำการจับคู่ PVC กับ PV ที่มีขนาดและคุณสมบัติตรงกันโดยอัตโนมัติ
Mounting PVC in a Pod
เมื่อ PV ถูกผูกกับ PVC แล้ว, สามารถทำการเชื่อมโยง PVC เข้ากับ Pod โดยใช้ volumeMounts และ volumes ดังนี้:
apiVersion: v1
kind: Pod
metadata:
name: volume-example
spec:
containers:
- name: myapp
image: myapp-image
volumeMounts:
- mountPath: /data
name: my-volume
volumes:
- name: my-volume
persistentVolumeClaim:
claimName: my-pvc
ในตัวอย่างนี้:
persistentVolumeClaim.claimName: ระบุชื่อของ PVC ที่ต้องการใช้
Reclaiming Persistent Volumes
Kubernetes สามารถจัดการกับ PV ที่ถูกลบหรือไม่ถูกใช้งานได้โดยใช้ reclaimPolicy:
Retain: PV จะไม่ถูกลบ และสามารถนำกลับมาใช้ใหม่ได้Recycle: ระบบจะทำการลบข้อมูลและเตรียม PV ให้พร้อมใช้งานใหม่Delete: ระบบจะทำการลบทั้ง PV และข้อมูลใน PV
Conclusion
Kubernetes Persistent Volumes (PV) ช่วยให้การจัดการข้อมูลระยะยาวใน Kubernetes เป็นเรื่องง่าย โดยการใช้ PV และ PVC คุณสามารถแยกการจัดการข้อมูลออกจาก Pod และจัดเก็บข้อมูลที่มีความยืดหยุ่นและปลอดภัย การเลือกใช้ PV และการตั้งค่า storageClass ช่วยให้ระบบของคุณสามารถขยายตัวได้อย่างง่ายดายและมีประสิทธิภาพ