Bài 13. Persistent Volume và Persistent Volume Claim hoạt động như thế nào?
"Ở bài trước, chúng ta đã biết Volume giúp dữ liệu không bị mất khi container khởi động lại. Nhưng nếu cả Pod bị xóa và được tạo lại trên một Node khác thì sao? Dữ liệu sẽ nằm ở đâu?"
Đó chính là lúc Persistent Volume (PV) và Persistent Volume Claim (PVC) xuất hiện.
Vấn đề
Hãy tưởng tượng bạn triển khai một ứng dụng MySQL trên Kubernetes.
MySQL Pod
│
▼
Volume
Ban đầu mọi thứ hoạt động bình thường.
Nhưng một ngày, Node gặp sự cố và Kubernetes tạo một Pod mới ở Node khác.
Node A Node B
MySQL Pod ✘ -----> MySQL Pod
Nếu dữ liệu chỉ nằm trên ổ đĩa của Node A, Pod mới sẽ không còn dữ liệu nữa.
Đây là điều chúng ta không bao giờ muốn với Database.
1. Persistent Volume là gì?
Persistent Volume (PV) là một vùng lưu trữ tồn tại độc lập với Pod.
Nó có thể là:
- SSD trên Cloud
- AWS EBS
- Azure Disk
- Google Persistent Disk
- NFS
- NAS
- SAN
Điều quan trọng là:
Dù Pod có bị xóa, dữ liệu trong PV vẫn còn.
Pod
│
▼
Persistent Volume
Pod chỉ sử dụng PV, chứ không sở hữu nó.
2. Persistent Volume Claim là gì?
Thay vì yêu cầu trực tiếp một ổ đĩa cụ thể, Pod sẽ gửi một "đơn xin cấp phát dung lượng".
Đó chính là Persistent Volume Claim (PVC).
Ví dụ:
"Tôi cần một ổ đĩa 10GB."
Kubernetes sẽ tìm một PV phù hợp và kết nối hai bên.
Pod
│
▼
PVC
│
▼
PV
Bạn có thể hình dung:
- PV = Căn hộ
- PVC = Hợp đồng thuê
- Pod = Người thuê
Người thuê không cần biết căn hộ ở đâu, chỉ cần có nơi để ở.
3. Luồng hoạt động
Pod
│
▼
PVC
│
▼
Persistent Volume
│
▼
Physical Storage
Khi Pod được tạo lại, chỉ cần gắn lại PVC là dữ liệu vẫn còn nguyên.
4. Tại sao phải tách PV và PVC?
Việc tách riêng mang lại nhiều lợi ích:
- Ứng dụng không cần biết ổ đĩa nằm ở đâu.
- Có thể thay đổi loại lưu trữ mà không sửa ứng dụng.
- Quản trị viên và lập trình viên có thể làm việc độc lập.
Đây là một trong những ý tưởng quan trọng của Kubernetes: tách biệt hạ tầng và ứng dụng.
Tổng kết
Chỉ cần nhớ một sơ đồ đơn giản:
Pod
│
▼
PVC
│
▼
PV
│
▼
Storage
- PV là vùng lưu trữ thật.
- PVC là yêu cầu sử dụng vùng lưu trữ đó.
- Pod chỉ cần gắn PVC để đọc và ghi dữ liệu.
Nhờ vậy, dữ liệu vẫn được giữ an toàn ngay cả khi Pod bị xóa hoặc chuyển sang một Node khác.
Bài tiếp theo
Trong bài này, chúng ta giả sử Persistent Volume đã tồn tại sẵn.
Nhưng trong thực tế, ai sẽ tạo PV? Có phải quản trị viên phải tạo thủ công mỗi lần ứng dụng cần thêm dung lượng?
Câu trả lời là không.
Ở bài tiếp theo, chúng ta sẽ tìm hiểu StorageClass – cơ chế giúp Kubernetes tự động tạo Persistent Volume chỉ với một yêu cầu từ ứng dụng. Đây là mảnh ghép cuối cùng để xây dựng hệ thống lưu trữ hiện đại trên Kubernetes.
All rights reserved