KubernetesTẬP 010⏱️ Đọc ~2 phút

Deployment vs StatefulSet: Khi Nào Dùng Gì Cho Ứng Dụng?

Trong Kubernetes, cả Deployment và StatefulSet đều là các Controller dùng để quản lý vòng đời của Pod. Nhưng nếu bạn cố tình mang một cơ sở dữ liệu như PostgreSQL hoặc MongoDB...

Deployment vs StatefulSet: Khi Nào Dùng Gì Cho Ứng Dụng?

Trong Kubernetes, cả Deployment và StatefulSet đều là các Controller dùng để quản lý vòng đời của Pod. Nhưng nếu bạn cố tình mang một cơ sở dữ liệu như PostgreSQL hoặc MongoDB triển khai bằng Deployment, bạn đang tự chôn một quả bom nổ chậm trong hệ thống lưu trữ dữ liệu của mình.


1. Bảng so sánh bản chất kỹ thuật

Tiêu chí Deployment StatefulSet
Mục đích sinh ra Quản lý ứng dụng không lưu trạng thái (Stateless Apps) Quản lý ứng dụng có lưu trạng thái (Stateful Apps)
Định danh Pod Ngẫu nhiên, có thể thay thế bất kỳ lúc nào (web-67df9-xyz) Cố định, tuần tự và dự đoán được (db-0, db-1, db-2)
Thứ tự khởi tạo/xoá Khởi tạo đồng thời song song, xoá ngẫu nhiên Khởi tạo tuần tự từ 0 ➔ 1 ➔ 2; xoá ngược từ 2 ➔ 1 ➔ 0
Gắn kết ổ đĩa (Storage) Chia sẻ chung 1 PVC hoặc không dùng PVC Mỗi Pod có 1 PVC riêng biệt qua volumeClaimTemplates
Mạng & DNS Dùng Service ClusterIP cân bằng tải ngẫu nhiên Dùng Headless Service, mỗi Pod có bản ghi DNS riêng

2. Vì sao cơ sở dữ liệu bắt buộc phải dùng StatefulSet?

Hãy tưởng tượng một cụm MySQL Master-Slave gồm 3 node:
1. Định danh duy nhất: Node mysql-0 luôn được cấu hình là Master (nhận lệnh Write), còn mysql-1 và mysql-2 là Slave (chỉ Read). Với Deployment, Pod bị chết sẽ sinh ra một Pod mới với tên ngẫu nhiên, phá vỡ toàn bộ cấu hình sao chép (Replication).
2. Khôi phục dữ liệu toàn vẹn: Khi mysql-1 bị chết và sinh lại, StatefulSet đảm bảo nó được gắn chính xác vào Volume ổ đĩa cũ (pvc-mysql-1), không bao giờ bị gắn nhầm sang dữ liệu của node khác.
3. Địa chỉ mạng ổn định: Các node slave có thể kết nối tới master qua địa chỉ DNS cố định: mysql-0.mysql-service.default.svc.cluster.local.


3. Quy tắc vàng khi lựa chọn

  • Chọn Deployment: Web frontend (React/Vue/Astro), API Backend (NestJS, Django, Spring Boot, Gin), Worker xử lý hàng đợi.
  • Chọn StatefulSet: Database (PostgreSQL, MySQL), Message Broker có lưu ổ đĩa (Kafka, RabbitMQ clustered), Distributed Storage (Cassandra, Elasticsearch, Redis Cluster).
🎬 VIDEO REEL THỰC CHIẾN (TÓM TẮT 60 GIÂY)

Bóc Tách Trực Quan: Deployment vs StatefulSet: Khi Nào Dùng Gì Cho Ứng Dụng?

Xem video mô phỏng động trực quan nguyên lý hoạt động và thao tác lệnh thực tế để nắm trọn vẹn kiến thức chỉ trong 60 giây.