Bỏ qua để đến nội dung
Knowledge Hub

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ì.

Sắp xếp

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ả.

  1. API server đánh dấu Pod đang bị xoá (Terminating); đồng hồ grace period 30 s bắt đầu
  2. Đóng DB pool, flush log và telemetry
  3. App ngừng nhận việc mới: readiness trả 503, server.close(), consumer ngừng poll message mới
  4. preStop xong, kubelet gửi SIGTERM tới PID 1 của container
  5. 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
  6. Process tự thoát với exit code 0, trước khi hết 30 sKhông kịp: kubelet gửi SIGKILL
  7. Song song: kubelet chạy preStop (sleep 5), còn EndpointSlice đánh dấu endpoint ready: false và 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.