Welcome

Chào mừng Bạn iu 👋

Khám phá cộng đồng

Tất cả thành viên

1k+ thành viên

Chưa có thành viên

Danh sách thành viên sẽ được hiển thị tại đây

GM Thành
GM Thành
20/06/2025
DockerExpert

Làm thế nào để triển khai zero-downtime deployment cho ứng dụng microservices sử dụng Kubernetes và Argo Rollouts?

Chào mọi người,

Tôi đang tìm cách triển khai zero-downtime deployment cho một ứng dụng microservices của mình trên Kubernetes, sử dụng Argo Rollouts để quản lý quá trình rollout. Ứng dụng của tôi có nhiều microservice, mỗi microservice được triển khai dưới dạng một Deployment trong Kubernetes.

Vấn đề:

Tôi muốn đảm bảo rằng không có thời gian chết (downtime) nào xảy ra khi triển khai phiên bản mới của một microservice. Hiện tại, tôi đang sử dụng chiến lược RollingUpdate mặc định của Kubernetes, nhưng đôi khi vẫn gặp phải downtime ngắn khi các pods cũ bị terminate trước khi các pods mới sẵn sàng phục vụ traffic.

Những gì tôi đã thử:

  • Sử dụng RollingUpdate với maxSurgemaxUnavailable được cấu hình cẩn thận.
  • Sử dụng preStopHook để sleep một khoảng thời gian ngắn, cho phép các requests đang xử lý hoàn thành trước khi pod bị terminate.
  • Sử dụng probes readinessliveness để đảm bảo chỉ những pods sẵn sàng mới nhận traffic.

Tuy nhiên, những giải pháp này không hoàn toàn loại bỏ được downtime, đặc biệt là trong trường hợp có nhiều requests đồng thời.

Mong muốn:

Tôi muốn tìm một giải pháp đáng tin cậy hơn để triển khai zero-downtime deployment. Tôi đang xem xét sử dụng Argo Rollouts với các chiến lược như Canary hoặc Blue/Green, nhưng chưa chắc chắn cách cấu hình chúng một cách chính xác để đảm bảo không có downtime.

Ví dụ cấu hình Rollout (tham khảo):

yaml
apiVersion: argoproj.io/v1alpha1
kind: Rollout
metadata: name: my-microservice
spec: replicas: 3 selector: matchLabels: app: my-microservice template: metadata: labels: app: my-microservice spec: containers:

  • name: my-microservice
image: my-registry/my-microservice:v1 ports:
  • containerPort: 8080
name: http readinessProbe: httpGet: path: /healthz port: 8080 livenessProbe: httpGet: path: /healthz port: 8080 strategy: canary: steps:
  • setWeight: 20
  • pause: {duration: 1m}
  • setWeight: 40
  • pause: {duration: 1m}
  • setWeight: 60
  • pause: {duration: 1m}
  • setWeight: 80
  • pause: {duration: 1m}

  • Có ai có kinh nghiệm triển khai zero-downtime deployment với Kubernetes và Argo Rollouts không?
  • Các chiến lược nào (Canary, Blue/Green,...) phù hợp nhất cho ứng dụng microservices?
  • Cấu hình Argo Rollouts như thế nào để đảm bảo không có downtime?
  • Có những lưu ý nào cần quan tâm khi triển khai zero-downtime deployment?

Cảm ơn mọi người đã giúp đỡ!

0 bình luận

Thêm bình luận

Bình luận (0)

Chưa có bình luận

Hãy là người đầu tiên bình luận về bài viết này!