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
RollingUpdatevớimaxSurgevàmaxUnavailableđượ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
readinessvàlivenessđể đả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
- containerPort: 8080
- 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 đỡ!









