
Chiến lược triển khai mặc định của Kubernetes, RollingUpdate, đủ dùng cho các dịch vụ nhỏ, nhưng lại nguy hiểm đối với các hệ thống sản xuất quan trọng:
RollingUpdate sẽ dần dần thay thế 100% các pod khỏe mạnh cho đến khi tất cả các instance bị suy giảm hiệu suất.Để giải quyết vấn đề này, các đội ngũ kỹ thuật tiên tiến sử dụng Triển khai Blue-Green hoặc Phát hành Canary với Phân tích số liệu tự động.
| Khía cạnh | RollingUpdate (Mặc định) | Triển khai Blue-Green | Phát hành Canary |
|---|---|---|---|
| Chuyển đổi lưu lượng | Thay thế pod tăng dần | Chuyển đổi tức thì từ 0% sang 100% | Tăng dần (ví dụ: 5% \to 20% \to 100%) |
| Phạm vi ảnh hưởng | 100% người dùng theo thời gian | 100% người dùng ngay lập tức | Cô lập với một mẫu nhỏ (ví dụ: 5%) |
| Chi phí tài nguyên | +25% dung lượng tăng đột biến tối đa | +100% (2x cụm/bản sao đầy đủ) | +10%–20% pod canary |
| Tốc độ rollback | Chậm (đảo ngược RollingUpdate) | Tức thì (chuyển router trở lại Blue) | Tức thì (giảm lưu lượng canary xuống 0%) |
| Cổng số liệu | Probe Liveness/Readiness cơ bản | Smoke test thủ công hoặc theo kịch bản | Truy vấn Prometheus/Datadog tự động |
Trong Blue-Green, hai môi trường giống hệt nhau tồn tại đồng thời:
preview.example.com. User Ingress / Load Balancer
│
[ Active Service Selector ]
│
┌───────────────┴───────────────┐
▼ (100% traffic) ▼ (0% traffic)
[ Blue Pods v1.2 ] [ Green Pods v1.3 ]
Khi các bài kiểm tra đạt, bộ chọn dịch vụ sẽ chuyển từ version: v1.2 sang version: v1.3. Nếu xảy ra lỗi nghiêm trọng sau khi chuyển đổi, hãy chuyển bộ chọn dịch vụ trở lại Blue ngay lập tức.
Vì Blue và Green chạy đồng thời trong cửa sổ chuyển đổi, cơ sở dữ liệu của bạn phải hỗ trợ cả hai phiên bản cùng một lúc:
Step 1 (Expand): Add nullable column or new table. Deploy DB migration.
Step 2 (Deploy): Green version uses new column, Blue version ignores it.
Step 3 (Cutover): Route traffic to Green.
Step 4 (Contract): Drop old deprecated columns after Blue is destroyed.
Argo Rollouts thay thế đối tượng Deployment Kubernetes tiêu chuẩn bằng một Custom Resource Rollout, cung cấp các bước Canary tự động và phân tích số liệu Prometheus.
Incoming Traffic ───► Ingress / Service Mesh (Istio / NGINX / ALB)
│
┌───────────────┴───────────────┐
▼ (95% Live Traffic) ▼ (5% Canary Traffic)
[ Stable Service ] [ Canary Service ]
│ │
[ Stable Pods v1 ] [ Canary Pods v2 ]
│
▼
[ Prometheus Query Engine ]
(Error rate < 0.5%, p99 latency < 200ms)
│ │
[ PASS: +20% ] [ FAIL: Abort & Rollback ]
Rollout sản xuất hoàn chỉnhapiVersion: argoproj.io/v1alpha1
kind: Rollout
metadata:
name: payments-api
namespace: production
spec:
replicas: 10
revisionHistoryLimit: 5
selector:
matchLabels:
app: payments-api
template:
metadata:
labels:
app: payments-api
spec:
containers:
- name: payments-api
image: ghcr.io/my-org/payments-api:v2.4.0
ports:
- containerPort: 8080
resources:
requests:
cpu: 500m
memory: 512Mi
strategy:
canary:
canaryService: payments-api-canary
stableService: payments-api-stable
trafficRouting:
nginx:
stableIngress: payments-api-ingress
steps:
# Step 1: Route 5% traffic to canary and pause 10 minutes
- setWeight: 5
- pause: { duration: 10m }
# Step 2: Run automated Prometheus analysis
- analysis:
templates:
- templateName: http-error-rate-check
# Step 3: Increase traffic to 20%
- setWeight: 20
- pause: { duration: 30m }
# Step 4: Increase traffic to 50%
- setWeight: 50
- pause: { duration: 15m }
Thay vì để các kỹ sư trực theo dõi bảng điều khiển Grafana trong quá trình triển khai, hãy cấu hình một AnalysisTemplate để tự động đánh giá Mục tiêu Mức độ Dịch vụ (SLO) của bạn:
apiVersion: argoproj.io/v1alpha1
kind: AnalysisTemplate
metadata:
name: http-error-rate-check
namespace: production
spec:
metrics:
- name: success-rate
interval: 1m
successCondition: result[0] >= 0.995 # Must maintain 99.5% success rate
failureLimit: 3 # Abort after 3 consecutive failed probes
provider:
prometheus:
address: http://prometheus-k8s.monitoring:9090
query: |
sum(rate(http_requests_total{app="payments-api", status=~"2..|3.."}[2m]))
/
sum(rate(http_requests_total{app="payments-api"}[2m]))
- name: p99-latency
interval: 1m
successCondition: result[0] <= 0.250 # Latency must stay under 250ms
failureLimit: 2
provider:
prometheus:
address: http://prometheus-k8s.monitoring:9090
query: |
histogram_quantile(0.99, sum(rate(http_request_duration_seconds_bucket{app="payments-api"}[2m])) by (le))
Nếu image mới gây ra lỗi 500 trên 5% lát canary:
success-rate < 0.995.Degraded, kích hoạt cảnh báo Slack đến kênh kỹ thuật.\to 20% trong 30 phút \to 100%.Một nền tảng thương mại điện tử quan trọng đang trải qua một đợt tăng đột biến lưu lượng truy cập trong đợt giảm giá chớp nhoáng. Nhóm kỹ thuật cần triển khai phiên bản mới của công cụ đề xuất với một bản sửa lỗi quan trọng. Chiến lược triển khai nào phù hợp nhất để giảm thiểu 'blast radius' của bất kỳ vấn đề không lường trước nào, đồng thời đảm bảo khả năng rollback nhanh chóng nếu phiên bản mới gây ra các vấn đề về hiệu suất?
Làm sạch log AI CLI, tạo biểu thức cron, giải mã JWT và tính quyền chmod offline.

Hướng dẫn toàn diện về Argo Rollouts & Prometheus: phân phối lũy tiến tự động và các mẫu phân tích với kiến trúc cấp độ sản xuất và ví dụ mã.
Đọc tiếp
Đạt được triển khai thực sự không gián đoạn (zero-downtime) trên Kubernetes. Cấu hình Pod Disruption Budgets, terminationGracePeriodSeconds, preStop hooks và cơ chế connection draining của ingress.
Đọc tiếp
Hướng dẫn thực tế để loại bỏ bảo mật chu vi mạng phẳng trong Kubernetes: NetworkPolicies mặc định từ chối, định danh workload SPIFFE/SPIRE và mTLS nghiêm ngặt.
Đọc tiếp