Phần 3 - Quản lý cấu hình
1. ConfigMap - Tách cấu hình khỏi ứng dụng
Một ứng dụng thường cần nhiều thông tin cấu hình như:
- URL của API
- Tên database
- Mức log (
DEBUG,INFO,...)
Nếu ghi trực tiếp các giá trị này vào source code (hard-code), mỗi lần thay đổi cấu hình bạn sẽ phải build lại image và deploy lại ứng dụng.
ConfigMap giúp lưu trữ các cấu hình dưới dạng key-value và cho phép Pod sử dụng chúng thông qua Environment Variables hoặc Volume.
Ghi nhớ: ConfigMap dùng để lưu dữ liệu cấu hình không nhạy cảm.
2. Secret - Lưu thông tin nhạy cảm
Một số thông tin không nên lưu trong Git hoặc ConfigMap, ví dụ:
- Mật khẩu Database
- API Key
- JWT Secret
- TLS Certificate
Kubernetes cung cấp Secret để quản lý các dữ liệu này.
Về cách sử dụng, Secret gần giống ConfigMap: Pod có thể đọc dưới dạng Environment Variables hoặc Volume.
Ghi nhớ: Secret dùng cho dữ liệu nhạy cảm, không phải cấu hình thông thường.
3. Volume - Dữ liệu sống lâu hơn Container
Container có filesystem tạm thời (Ephemeral).
Điều đó có nghĩa là khi Pod bị xóa hoặc tạo lại, mọi dữ liệu ghi bên trong container cũng sẽ biến mất.
Ví dụ:
- Upload file
- SQLite Database
- Cache
- Log
Đều có thể mất sau khi Pod restart.
Volume là thư mục được mount vào Pod để dữ liệu có thể được chia sẻ giữa các container trong cùng Pod hoặc tồn tại lâu hơn container.
Ghi nhớ: Không phải mọi Volume đều lưu trữ lâu dài. Một số loại Volume vẫn bị xóa khi Pod bị xóa.
4. Persistent Volume (PV) & Persistent Volume Claim (PVC)
Để dữ liệu tồn tại ngay cả khi Pod bị xóa, Kubernetes tách Storage khỏi Pod.
Có hai thành phần chính:
- Persistent Volume (PV): tài nguyên lưu trữ thực tế trong Cluster.
- Persistent Volume Claim (PVC): yêu cầu sử dụng một phần tài nguyên lưu trữ.
Pod không làm việc trực tiếp với PV mà chỉ cần khai báo PVC. Kubernetes sẽ tự kết nối PVC với PV phù hợp.
Ghi nhớ: PV là ổ đĩa, còn PVC là yêu cầu sử dụng ổ đĩa.
5. StorageClass - Tự động cấp phát Storage
Nếu phải tạo PV thủ công mỗi lần cần lưu trữ, việc quản lý sẽ rất tốn công.
StorageClass giúp Kubernetes tự động tạo Persistent Volume khi có PVC mới.
Quy trình hoạt động:
- Pod yêu cầu PVC.
- PVC tham chiếu tới một StorageClass.
- StorageClass tự động tạo PV.
- PVC được bind với PV.
- Pod sử dụng PVC để lưu dữ liệu.
Nhờ đó, người dùng chỉ cần tạo PVC, còn việc cấp phát ổ đĩa sẽ được Kubernetes thực hiện tự động.
Ghi nhớ: StorageClass chính là cơ chế Dynamic Provisioning của Kubernetes.
Tổng kết
| Thành phần | Vai trò |
|---|---|
| ConfigMap | Lưu cấu hình không nhạy cảm |
| Secret | Lưu thông tin nhạy cảm |
| Volume | Lưu dữ liệu trong vòng đời của Pod hoặc chia sẻ giữa các container |
| Persistent Volume (PV) | Tài nguyên lưu trữ trong Cluster |
| Persistent Volume Claim (PVC) | Yêu cầu sử dụng tài nguyên lưu trữ |
| StorageClass | Tự động tạo Persistent Volume khi cần |
Ý tưởng cốt lõi: Kubernetes khuyến khích tách biệt ứng dụng, cấu hình và dữ liệu. Ứng dụng được đóng gói trong Image, cấu hình được quản lý bằng ConfigMap hoặc Secret, còn dữ liệu được lưu trên Volume/PV để đảm bảo không bị mất khi Pod thay đổi.
BÌNH LUẬN