DevOps Cơ bản
Một cấu hình sai ở tầng vận hành có thể biến sự cố nhỏ thành sự cố lớn: database gián đoạn vài giây, health check của mọi Pod cùng fail, Kubernetes restart cả đội, cache mất sạch, rồi database vừa hồi phục đã gặp tải khởi động của tất cả Pod.
Nhóm này có ba bài, theo vòng đời một lần deploy: Pod khởi động → Pod bị thay thế → schema đổi cùng lúc. Phù hợp cho backend dev bắt đầu tự chịu trách nhiệm deploy lên Kubernetes, và cho tech lead muốn rà soát checklist vận hành. Chưa bao gồm: autoscaling, resource requests/limits, networking, observability stack.
Lộ trình đọc
Phần tiêu đề “Lộ trình đọc”| # | Bài | Bạn sẽ trả lời được | Level | Đọc |
|---|---|---|---|---|
| 1 | Kubernetes probes | Startup, readiness, liveness khác nhau thế nào? Dependency chung chết thì readiness nên làm gì? | Basic | ~12 phút |
| 2 | SIGTERM khi deploy | Vì sao deploy vẫn cắt request? preStop, grace period và server.close() ăn chung ngân sách thế nào? |
Intermediate | ~15 phút |
| 3 | Expand–contract | Đổi tên cột khi hai phiên bản app cùng chạy thế nào? lock_timeout, NOT VALID, rollback ra sao? |
Intermediate | ~15 phút |
| 4 | Docker multi-stage & non-root | Vì sao image 1,7 GB và rebuild chậm? Sắp layer, tách stage, chạy non-root, giữ secret ngoài image thế nào? | Basic | ~12 phút |
| 5 | Requests & limits | Vì sao p99 tăng vọt khi CPU trông còn thấp? Request, limit, QoS và OOMKilled thật ra nghĩa là gì? | Intermediate | ~15 phút |
| 6 | Chiến lược deploy | Rolling, blue-green hay canary? Rollback không hoàn tác được gì? Theo dõi gì trong lúc rollout? | Intermediate | ~15 phút |
Bài 2 tiếp nối bài 1 (probe quyết định Pod có nhận traffic không, bài 2 nói chuyện gì xảy ra khi Pod bị dừng). Bài 3 độc lập về mặt kỹ thuật nhưng cần ý niệm rolling deploy từ bài 2, và nên biết ACID và transaction.
Nếu bạn gặp…
Phần tiêu đề “Nếu bạn gặp…”| Triệu chứng | Đọc |
|---|---|
| Pod restart liên tục lúc khởi động | Startup probe và initialDelaySeconds |
| Database chậm là cả đội Pod rớt khỏi Service | Dependency dùng chung |
| Restart storm khi tải cao | Liveness cấu hình sai |
Mỗi lần deploy có vài request connection refused hoặc 502 |
SIGTERM khi deploy |
| Rollout kéo dài rồi Pod bị SIGKILL | Ngân sách grace period |
App cũ lỗi sau migration, hoặc ALTER TABLE treo cả bảng |
Expand–contract |
Cần thêm NOT NULL hoặc index trên bảng lớn |
NOT NULL và index không khoá bảng |
Liên quan
Phần tiêu đề “Liên quan”Khi probe đã đúng mà request vẫn chậm, câu hỏi chuyển sang đo đạc: logs, metrics và traces giúp chọn đúng signal; muốn biến “chậm” thành mục tiêu đo được, xem SLI, SLO và error budget.