Rolling Update vs Recreate trong Kubernetes: Chọn 'Đóng Cửa Thay Mới' hay 'Vừa Làm Vừa Chơi'?
Lê Lân
0
Sự Khác Biệt Giữa Chiến Lược Rolling Update và Recreate Trong Kubernetes Deployments
Mở Đầu
Trong lĩnh vực DevOps, đặc biệt là khi làm việc với Kubernetes, việc hiểu rõ các chiến lược triển khai (deployment strategies) là vô cùng quan trọng để đảm bảo hệ thống vận hành ổn định và liên tục. Hai chiến lược phổ biến nhất là Rolling Update và Recreate đều có những ưu điểm và hạn chế riêng, ảnh hưởng đến tính sẵn sàng cũng như tính nhất quán của ứng dụng trong quá trình nâng cấp phiên bản. Bài viết này sẽ giúp bạn hiểu rõ sự khác biệt giữa hai chiến lược này, từ đó lựa chọn được cách triển khai phù hợp cho các trường hợp thực tế.
1. Tổng Quan Về Deployment Strategy Trong Kubernetes
Kubernetes cho phép chúng ta quản lý vòng đời của các ứng dụng thông qua các đối tượng như Deployment. Khi cần cập nhật phiên bản mới của ứng dụng, chúng ta phải lựa chọn một chiến lược triển khai phù hợp để tránh gián đoạn dịch vụ hoặc lỗi không mong muốn.
1.1 Tại sao cần chiến lược triển khai?
Đảm bảo tính sẵn sàng khi cập nhật.
Giảm thiểu rủi ro phát sinh lỗi do nâng cấp.
Quản lý tài nguyên và thời gian chạy ứng dụng hiệu quả.
2. Chiến Lược Recreate
2.1 Định nghĩa
Chiến lược Recreate sẽ dừng toàn bộ các pod hiện tại trước khi triển khai các pod mới.
2.2 Cách hoạt động
Khi cập nhật, tất cả các pod cũ bị terminate ngay lập tức.
Sau khi các pod cũ đã được dừng hoàn toàn, các pod mới bắt đầu được tạo ra dựa trên phiên bản mới.
Trong thời gian chờ đợi, ứng dụng hoàn toàn không có pod hoạt động.
2.3 Ưu điểm và nhược điểm
Ưu điểm
Nhược điểm
- Đảm bảo phiên bản ứng dụng nhất quán
- Ứng dụng không có sẵn trong một khoảng thời gian, gây gián đoạn
- Triển khai đơn giản, dễ kiểm soát
- Không phù hợp với hệ thống yêu cầu uptime cao
Lưu ý: Recreate phù hợp cho các ứng dụng không yêu cầu tính liên tục cao hoặc hệ thống thử nghiệm/nghiên cứu, nơi việc gián đoạn là chấp nhận được.
3. Chiến Lược Rolling Update
3.1 Định nghĩa
Rolling Update thực hiện việc cập nhật dần dần các pod, đảm bảo luôn có một phần ứng dụng hoạt động trong suốt quá trình nâng cấp.
3.2 Cách hoạt động
Các pod mới được tạo ra từng bước.
Các pod cũ được dừng / gỡ xuống song song với việc tạo pod mới.
Quy trình này kiểm soát qua hai tham số chính:
Tham số
Ý nghĩa
maxUnavailable
Số lượng
pod
cũ có thể không hoạt động trong lúc cập nhật (tối đa)
maxSurge
Số lượng
pod
mới có thể vượt quá số
pod
mong muốn (tối đa)
Điều này đảm bảo ứng dụng luôn duy trì được số lượng pod đủ để phục vụ người dùng.
3.3 Ưu điểm và nhược điểm
Ưu điểm
Nhược điểm
- Giữ được tính sẵn sàng cao trong quá trình nâng cấp
- Có thể chạy đồng thời nhiều phiên bản của ứng dụng, gây nhầm lẫn khi kiểm tra
- Giảm thiểu downtime, phù hợp với hệ thống production
- Cấu hình phức tạp hơn Recreate
Chú ý: Rolling Update là lựa chọn ưu tiên trong môi trường production, đặc biệt khi uptime và trải nghiệm người dùng liên tục là ưu tiên hàng đầu.
4. Bảng So Sánh Chiến Lược Rolling Update và Recreate
Tiêu chí
Recreate
Rolling Update
Tính nhất quán phiên bản
Đảm bảo
Có thể tạm thời chạy nhiều phiên bản
Tính sẵn sàng (Availability)
Thấp ( downtime trong khi cập nhật)
Cao (liên tục có pod hoạt động)
Thời gian triển khai
Thường nhanh hơn
Kéo dài hơn do cập nhật theo từng phần
Độ phức tạp cấu hình
Đơn giản
Phức tạp do cần điều chỉnh maxUnavailable và maxSurge
Phù hợp với
Ứng dụng không khắt khe về uptime
Ứng dụng cần uptime cao, production
5. Ví dụ Cấu Hình Trong Kubernetes
apiVersion:apps/v1
kind:Deployment
metadata:
name:example-deployment
spec:
replicas:3
strategy:
type:RollingUpdate# Hoặc Recreate
rollingUpdate:
maxUnavailable:1
maxSurge:1
selector:
matchLabels:
app:example
template:
metadata:
labels:
app:example
spec:
containers:
-name:example-container
image:example-image:v2
Bạn có thể thay đổi strategy.type thành Recreate để sử dụng chiến lược dừng rồi tạo mới, hoặc giữ RollingUpdate để cập nhật dần.
Kết Luận
Việc lựa chọn giữa Recreate và Rolling Update tùy thuộc vào yêu cầu cụ thể của hệ thống về mặt tính nhất quán phiên bản và tính sẵn sàng. Nếu ưu tiên tính nhất quán và có thể chấp nhận downtime, Recreate là lựa chọn đơn giản và trực quan. Ngược lại, Rolling Update phù hợp với môi trường production, nơi uptime liên tục được đặt lên hàng đầu, mặc dù có thể phức tạp và đôi khi khiến trên hệ thống cùng tồn tại nhiều phiên bản tạm thời.
Lời khuyên: Luôn thử nghiệm kỹ càng trên môi trường staging trước khi áp dụng chiến lược triển khai vào production để đảm bảo quá trình update diễn ra suôn sẻ và an toàn.