0

Bài 12. Vì sao dữ liệu Database biến mất sau khi Pod restart?

"Tôi chỉ restart Pod thôi mà... sao dữ liệu trong database lại biến mất?"

Đây là một trong những câu hỏi khiến rất nhiều người mới học Kubernetes bối rối.

Hãy cùng xem chuyện gì đã xảy ra.


Một tình huống quen thuộc

Giả sử bạn triển khai MySQL lên Kubernetes.

MySQL Pod
┌──────────────────────┐
│ mysql                │
│                      │
│ /var/lib/mysql       │
│   customers          │
│   orders             │
└──────────────────────┘

Bạn tạo vài bảng dữ liệu.

Mọi thứ đều hoạt động bình thường.

Nhưng sau đó bạn chạy:

kubectl delete pod mysql

Kubernetes nhanh chóng tạo lại một Pod mới.

Bạn mở MySQL lên...

Database rỗng!

Toàn bộ dữ liệu đã biến mất.

Tại sao?


1. Pod chỉ là "ngôi nhà tạm"

Điều quan trọng cần nhớ là:

Pod được thiết kế để có thể bị xóa và tạo lại bất cứ lúc nào.

Khi Pod bị xóa, toàn bộ filesystem bên trong Pod cũng bị xóa theo.

Pod cũ
┌──────────────┐
│ Database     │
│ Data         │
└──────────────┘
      │
      ▼
 Pod bị xóa

      │
      ▼

Pod mới
┌──────────────┐
│ Database     │
│ Empty        │
└──────────────┘

Pod mới không kế thừa dữ liệu của Pod cũ.


2. Vậy dữ liệu nên được lưu ở đâu?

Thay vì lưu dữ liệu bên trong Pod, Kubernetes khuyến khích bạn lưu dữ liệu ở một nơi độc lập với Pod.

Đó chính là Volume.

           Volume
      ┌──────────────┐
      │ Database     │
      │ Files        │
      └──────┬───────┘
             │
      ┌──────▼───────┐
      │    Pod       │
      └──────────────┘

Bây giờ nếu Pod bị xóa:

  • Volume vẫn còn.
  • Pod mới chỉ cần gắn lại Volume.
  • Dữ liệu vẫn được giữ nguyên.

3. Volume giống như chiếc USB

Bạn có thể hình dung:

  • Pod giống như một chiếc laptop.
  • Volume giống như một chiếc USB.

Nếu laptop hỏng, bạn mua laptop mới.

Chỉ cần cắm lại USB, dữ liệu vẫn còn nguyên.

Đó cũng chính là cách Kubernetes bảo vệ dữ liệu.


Tổng kết

Hãy nhớ một nguyên tắc rất quan trọng khi làm việc với Kubernetes:

Pod là tạm thời. Dữ liệu thì không nên như vậy.

Nếu dữ liệu quan trọng, đừng lưu trực tiếp trong Pod.

Hãy lưu nó trên Volume.


Ở bài tiếp theo...

Chúng ta đã biết Volume giúp dữ liệu không bị mất.

Nhưng một câu hỏi mới xuất hiện:

Volume được tạo ở đâu? Ai quản lý nó? Và làm sao nhiều Pod có thể sử dụng cùng một vùng lưu trữ?

Đó chính là lúc chúng ta tìm hiểu về Persistent Volume (PV)Persistent Volume Claim (PVC).

Hy vọng sau bài này, bạn sẽ không còn bất ngờ khi thấy Pod sống lại nhưng dữ liệu thì "biến mất" nữa. Sang bài tiếp theo, chúng ta sẽ khám phá cách Kubernetes lưu trữ dữ liệu một cách bền vững với PV và PVC.


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í