1. Tổng quan
Statefulset được sử dụng để quản trị một hoặc nhiều Pod.
Vậy tại sao lại cần Statefulset
khi đã có ReplicateSet
, Deployment
?
2. Sự khác biệt giữa Statefulset và ReplicateSet
Để hiểu rõ ta cần bắt đầu lại tự khái niệm:
- Ứng dụng dạng
stateless
:- Các ứng dụng stateless thường là các service dụng
nginx, apache
hoặc chạy dạng HTTP Request. Gọi là stateless app vì mỗi request tớinginx hoặc apache
chúng sẽ độc lập với nhau. - VD: Gửi HTTP tới Backend API, mỗi API sẽ độc lập không ảnh hưởng tới các API khác.
- Các ứng dụng stateless thường là các service dụng
- Ứng dụng dạng
stateful
:- Các ứng dụng stateful thường là các service dạng database, điển hình nhất là
mariadb, mysql
. - VD: Các database như
mariadb hoặc mysql
sẽ gặp phải vấn đề chỉ có thể ghi trên 1 node và ghi trên nhiều node. - Và các database dạng
mysql, mariadb
không thể scale hàng loạt bởi lý do cơ chế master slave, cơ chế ghi 1 đọc nhiều node ..
- Các ứng dụng stateful thường là các service dạng database, điển hình nhất là
Qua đó, Deployment phù hợp hơn cho các ứng dụng dạng stateless, khi mà pod có thể sinh ra và mất đi linh hoạt
Statefulset
sinh ra khi phải quản lý pod chặt chẽ, ví dụ triển khai cụm mariadb master slave 3 node trên k8s.
3. Khái niệm headless Service
Thông thường khi tạo deployment, expose service ra bên ngoài chúng ta sẽ khởi tạo một Service để load-balance traffic xuống các Pod.
Vậy, đặt câu hỏi “Có cách để chúng ta có thể truy cập trực tiếp các Pod IP thông qua DNS endpoint nội bộ?”
Để giải quyết bài toán này, k8s sinh ra khái niệm “Headless Service”. Với Headless Service, chúng ta có thể kết nối trực tiếp với Pods.
Ví dụ, điển hình nhất cần sử dụng Headless Service
là bài toán triển khai database trong k8s.
VD: Triển khai cụm database 3 node Master Slave Mariadb dạng Statefulset
, thì việc đọc ghi chỉ thực hiện trên 1 node Master. Với trường này ta sẽ sử dụng Headless service
.
Leave a Reply