Triển khai (Deployment) vs StatefulSet trong Kubernetes

0 0 0

Người đăng: Kubernetes

Theo Viblo Asia

Việc lựa chọn giữa Deployment và StatefulSet trong Kubernetes sẽ ảnh hưởng đến cách ứng dụng của bạn hoạt động, mở rộng và khôi phục khi gặp sự cố. Cả hai đều là controller để quản lý pod, nhưng phục vụ cho các trường hợp sử dụng khác nhau. Trong hướng dẫn này, bạn sẽ học được các điểm khác biệt chính, xem các ví dụ thực tế và nhận lời khuyên về thời điểm nên sử dụng từng loại.

Yêu cầu kiến thức trước

Bạn cần có:

  • Hiểu biết cơ bản về các khái niệm Kubernetes (pods, services, controllers)
  • Có quyền truy cập vào một cụm Kubernetes để thử nghiệm thực hành (tùy chọn)

Deployment là gì?

Deployment quản lý các ứng dụng không trạng thái (stateless). Nó đảm bảo rằng một số lượng bản sao (replica) của pod luôn chạy. Deployment rất lý tưởng cho các workload mà mỗi pod có thể thay thế cho nhau, như máy chủ web hoặc backend API.

Đặc điểm chính:

  • Các pod giống hệt nhau và có thể thay thế cho nhau
  • Hỗ trợ cập nhật cuốn chiếu (rolling update) và rollback
  • Dễ dàng mở rộng hoặc thu nhỏ
  • Không có danh tính mạng cố định hay lưu trữ lâu dài theo mặc định

Ví dụ:

apiVersion: apps/v1
kind: Deployment
metadata: name: web-deployment
spec: replicas: 3 selector: matchLabels: app: web template: metadata: labels: app: web spec: containers: - name: web image: nginx:1.25

StatefulSet là gì?

StatefulSet quản lý các ứng dụng có trạng thái (stateful) cần danh tính mạng ổn định và lưu trữ lâu dài. Mỗi pod trong StatefulSet có một tên duy nhất và ổn định, và có thể gắn với volume lưu trữ riêng biệt.

Đặc điểm chính:

  • Mỗi pod có một danh tính duy nhất, ổn định (ví dụ: app-0, app-1)
  • Hỗ trợ triển khai và mở rộng theo thứ tự
  • Mỗi pod có thể có volume lưu trữ riêng biệt
  • Phù hợp với database, hàng đợi (queue) và các ứng dụng dạng cụm (clustered)

Ví dụ:

apiVersion: apps/v1
kind: StatefulSet
metadata: name: db-statefulset
spec: serviceName: 'db' replicas: 3 selector: matchLabels: app: db template: metadata: labels: app: db spec: containers: - name: db image: postgres:16 volumeMounts: - name: db-data mountPath: /var/lib/postgresql/data volumeClaimTemplates: - metadata: name: db-data spec: accessModes: ['ReadWriteOnce'] resources: requests: storage: 10Gi

So sánh nhanh các điểm khác biệt

image.png

Minh họa

Deployment (không trạng thái):

[web-abc123] [web-def456] [web-ghi789]

StatefulSet (có trạng thái):

[db-0] [db-1] [db-2]

Khi nào nên dùng loại nào?

Dùng Deployment cho:

  • Máy chủ web
  • API không trạng thái
  • Background worker

Dùng StatefulSet cho:

  • Database (PostgreSQL, MongoDB, v.v.)
  • Bộ nhớ đệm phân tán
  • Ứng dụng cần danh tính ổn định và lưu trữ lâu dài

Bước tiếp theo

Hãy thử triển khai cả Deployment và StatefulSet trên cụm Kubernetes của bạn để thấy được sự khác biệt thực tế. Hãy khám phá cách hoạt động của cập nhật cuốn chiếu, mở rộng quy mô và khởi động lại pod đối với từng controller.

Khi workload của bạn phát triển, việc hiểu rõ những mô hình này sẽ giúp bạn thiết kế hệ thống ổn định và dễ bảo trì hơn.

Cảm ơn các bạn đã theo dõi!

Bình luận

Bài viết tương tự

- vừa được xem lúc

Deploying A Containerized Web Application On Kubernetes

1. Overview. Kubernetes is an open source project (available on kubernetes.io) which can run on many different environments, from laptops to high-availability multi-node clusters; from public clouds to on-premise deployments; from virtual machines to bare metal.

0 0 70

- vừa được xem lúc

Kubernetes - Học cách sử dụng Kubernetes Namespace cơ bản

Namespace trong Kubernetes là gì. Tại sao nên sử dụng namespace.

0 0 126

- vừa được xem lúc

[Kubernetes] Kubectl và các command cơ bản

Mở đầu. Kubectl là công cụ quản trị Kubernetes thông qua giao diện dòng lệnh, cho phép bạn thực thi các câu lệnh trong Kubernetes cluster.

0 0 69

- vừa được xem lúc

Triển khai EFK Stack trên Kubernetes

EFK stack on K8S. Giới thiệu. Một hệ thống có thể chạy nhiều dịch vụ hoặc ứng dụng khác nhau, vì vậy việc. theo dõi hệ thống là vô cùng cần thiết.

0 0 83

- vừa được xem lúc

Thực hành Kubernetes (K8S) bằng cách sử dụng lệnh Command

Bài hướng dẫn hôm nay sẽ hướng dẫn sử dụng K8S bằng cách sử dụng câu lệnh thay vì UI trên web. Có 2 lựa chọn để thực hiện:. . Sử dụng Cloud Shell.

0 0 65

- vừa được xem lúc

Kubernetes best practices - Liveness và Readiness Health checks

Mở đầu. Kubernetes cung cấp cho bạn một framework để chạy các hệ phân tán một cách mạnh mẽ.

0 0 64