การจัดเก็บข้อมูลถาวรไว้บนโนดใดโนดหนึ่งของ Kubernetes Cluster มีความเสี่ยงที่ข้อมูลจะสูญหายหากโนดที่ใช้เก็บข้อมูลล้มเหลว อย่างไรก็ตาม ในกรณีที่ระบบงานมีความทนทานต่อการสูญหายของข้อมูล เช่น เป็นระบบแบบกระจาย (distributed system) เป็นระบบที่มีคุณสมบัติเกี่ยวกับการทำสำเนาข้อมูล (replication) หรือเป็นระบบทดสอบ อาจจะพิจารณาเลือกใช้วิธีเก็บข้อมูลถาวรไว้บนโนดใดโนดหนึ่ง โดยใช้คุณสมบัติ Local Persistent Volumes ของ Kubernetes ก็ได้
อย่างไรก็ตาม การใช้คุณสมบัติ Local Persistent Volumes มีขั้นตอนที่ค่อนข้างยุ่งยาก ดังนี้
- (ทำครั้งเดียว) ผู้ดูแลคลัสเตอร์สร้าง
StorageClass
สำหรับการจัดเก็บข้อมูลบน local storage - ผู้ดูแลคลัสเตอร์จัดเตรียมที่ว่างและสร้างโฟลเดอร์บนโนดที่จะใช้จัดเก็บข้อมูล เช่น
/mnt/data
- ผู้ดูแลคลัสเตอร์สร้าง
PersistentVolume
โดยระบุชื่อโนด และโฟลเดอร์ที่จะใช้จัดเก็บข้อมูล - ผู้ใช้งานสร้าง
PersistentVolumeClaim
ให้ Pod หรือ Deployment ที่จะใช้ที่จัดเก็บข้อมูล
ซึ่งจะเห็นได้ว่าผู้ดูแลคลัสเตอร์จำเป็นต้องเข้ามามีบทบาททุกครั้งที่มีความต้องการใช้ที่จัดเก็บข้อมูลถาวร อาจจะส่งผลให้เกิดความล่าช้าในกระบวนการติดตั้งระบบได้
จึงเป็นที่มาของการใช้ Local Path Provisioner เพื่อจัดสรรที่จัดเก็บข้อมูลถาวรภายใน Kubernetes Cluster โดยอัตโนมัติ
การติดตั้ง
สามารถติดตั้งได้โดยใช้คำสั่งด้านล่าง ทั้งนี้ ควรเปลี่ยนหมายเลขรุ่น (v0.0.24
) ให้เป็นรุ่นปัจจุบัน โดยสามารถดูหมายเลขรุ่นล่าสุดได้จาก หน้า release ของ Local Path Provisioner
kubectl apply -f https://raw.githubusercontent.com/rancher/local-path-provisioner/v0.0.24/deploy/local-path-storage.yaml
เมื่อติดตั้งเสร็จแล้ว สามารถดูได้โดยใช้คำสั่ง kubectl -n local-path-storage get pod
ตามตัวอย่างด้านล่าง
$ kubectl -n local-path-storage get pod
NAME READY STATUS RESTARTS AGE
local-path-provisioner-d744ccf98-xfcbk 1/1 Running 0 7m
การใช้งาน
เมื่อติดตั้งเสร็จแล้ว ผู้ใช้สามารถสร้าง PersistentVolumeClaim
โดยระบุ spec.storageClassName
ให้เป็น local-path
ตามตัวอย่างไฟล์ pvc.yaml
ด้านล่าง
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: local-path-pvc
spec:
accessModes:
- ReadWriteOnce
storageClassName: local-path
resources:
requests:
storage: 128Mi
เมื่อใช้คำสั่ง kubectl create -f pvc.yaml
แล้วรอสักพัก จะพบว่า PersistentVolume
จะถูกสร้างขึ้นมาโดยอัตโนมัติ โดยที่ผู้ดูแลคลัสเตอร์ไม่ต้องเข้ามามีส่วนร่วม
$ kubectl get pv
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
pvc-bc3117d9-c6d3-11e8-b36d-7a42907dda78 2Gi RWO Delete Bound default/local-path-pvc local-path 4s
ทั้งนี้ ผู้ดูแลคลัสเตอร์สามารถใช้คำสั่ง kubectl -n local-path-storage logs -f -l app=local-path-provisioner
เพื่อดูประวัติการสร้าง PersistentVolume
ได้
Pingback: การติดตั้ง Rook Ceph บน Kubernetes Cluster - ศูนย์เทคโนโลยีสารสนเทศและการสื่อสาร