Từ Code đến System

Kubernetes

[Kubernetes] Phần 8: Khái niệm Statefulset

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ó ReplicateSetDeployment?

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ới nginx 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.
  • Ứ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 ..

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.

Nguồn

https://collabnix.github.io/kubelabs/StatefulSets101/#what-is-statefulset-and-how-is-it-different-from-deployment

Leave a Reply