Sắp xếp: Pod bị thay khi rolling deploy Trung cấp
Thời gian đọc ước tính: 1 phút
Mỗi lần rolling deploy, vài request 502 và vài message xử lý lại thường đến từ một chỗ: các bước shutdown chạy sai thứ tự, hoặc app tưởng traffic đã ngừng khi nó chưa ngừng.
Sắp xếp các bước dưới đây, từ lúc Pod bị xoá tới lúc container dừng. Bấm Kiểm tra để biết bước nào sai chỗ và sai thì hỏng gì.
Pod bị thay khi rolling deploy: chuyện gì xảy ra, theo thứ tự nào
Pod orders-api vừa phục vụ HTTP vừa consume topic payments từ Kafka. Spec: terminationGracePeriodSeconds: 30, preStop: sleep 5, Dockerfile dạng exec-form nên Node là PID 1.
Rolling deploy xoá Pod này. Sắp xếp các bước từ lúc Pod bị xoá tới lúc container dừng. Hai việc chạy song song đã được gộp vào cùng một bước.
Dùng ▲▼ để đổi chỗ từng bước, hoặc chạm ⠿ của một bước rồi chạm vào vị trí mới. Trên máy tính có thể kéo thả.
- API server đánh dấu Pod đang bị xoá (Terminating); đồng hồ grace period 30 s bắt đầu
- Đóng DB pool, flush log và telemetry
- App ngừng nhận việc mới: readiness trả 503,
server.close(), consumer ngừng poll message mới preStopxong, kubelet gửiSIGTERMtới PID 1 của container- Chờ in-flight xong: HTTP request đang chạy trả response, message đang xử lý commit DB, rồi commit offset và rời consumer group
- Process tự thoát với exit code 0, trước khi hết 30 s
Không kịp: kubelet gửi SIGKILL - Song song: kubelet chạy
preStop(sleep 5), còn EndpointSlice đánh dấu endpointready: falsevà kube-proxy/ingress dần ngừng gửi traffic mới
Ngân sách thời gian, Dockerfile exec-form và code drain cho Node: SIGTERM khi deploy.