0

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)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

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí