Chào các bác,
Em kể chuyện đời em chút là kinh nghiệm thực tế cá nhân mong giúp được bác nào đang có suy nghĩ như em trước đây. Hồi mới vào nghề DevOps, em nghĩ đi nhiều nơi là cách học nhanh. Tính ra, gần 3 năm em nhảy 5 công ty startup có, outsource có, product cũng có. Mỗi nơi cho đụng tí: ở công ty A em lo CI/CD Jenkins, qua công ty B làm tí Ansible, tiếp công ty C cho em nghịch Helm với ArgoCD, rồi công ty D thì vào AWS console làm tay, đến công ty E lại là kiểu “manual DevOps”.
Nhưng các bác biết không, chưa nơi nào em thấy Production sập mà em là người đầu tiên bị gọi cả :D Em toàn làm phần set up, phần chạy mượt rồi là out. Mấy cái root-cause analysis hay post-mortem incident chưa bao giờ thấy tên mình trong đó. Tưởng là trải nghiệm, hóa ra là ĐI LƯỚT.
Vào công ty thứ 6 em tỉnh ra.
Công ty này nhỏ thôi, nhưng mọi thứ em phải tự chịu trách nhiệm.
Tháng đầu tiên vào, chưa kịp quen hạ tầng thì Kubernetes cluster hết IP. Flannel bị misconfig, cái subnet CIDR allocate sai khiến Pod mới không lên được. Cả hệ thống đứng vì chẳng service nào scale được. Em debug gần 4 tiếng, vọc log kubelet, CNI, dnsmasq,… mới ngộ ra là “IP exhaustion” là thứ các tutorial không bao giờ nhắc tới.
Đêm khác, Redis đột nhiên timeout hàng loạt. CPU ổn, RAM còn dư, connection count thì thấp. Cuối cùng tìm ra là Redis log đẻ ra quá nhiều dòng vì slowlog-log-slower-than
set sai, khiến disk IO choke luôn, timeout toàn bộ request.
Từ đó em học một bài học: một DevOps tốt là người từng sửa hệ thống trong điều kiện không ai cứu mình.
Kỹ năng thật sự em học được không nằm trong sách:
- Viết playbook như mình là người mất trí nhớ. Không phải cho người khác đọc, mà để chính mình lúc 3h sáng đầu óc lag còn hiểu cần làm gì.
- Alert không được phát khi đã toang. Prometheus em config 2 layer: soft-alert khi có dấu hiệu bất thường (pod restart tăng, CPU > 60% liên tục), hard-alert khi chạm ngưỡng giới hạn. Nhờ đó tụi em từng tránh được vụ autoscaler scale pod làm nghẽn db connection pool.
- Log cần filter kỹ, chứ không phải gom hết về ELK. Hồi trước em collect log toàn bộ
stdout
, về sau Loki die vì overload. Giờ em gom theo pattern rõ ràng: error/warn từ app, nhưng infra log chỉ lấy metrics từ Promtail.
Làm nhiều thì chưa chắc giỏi nhưng sống với nó thì sẽ hiểu.
Nhiều bạn junior hỏi em: “Em học Docker xong nên học Terraform hay Ansible trước?” Em bảo, học cái gì cũng được, miễn là em được giữ hệ thống sống 6 tháng, và phải là người xử lý sự cố đầu tiên. Cái gì cũng sẽ tự học được hết.
Chứ còn cứ học kiểu:
- CI/CD là push code lên rồi đợi build green
- Infrastructure là “terraform apply xong rồi thôi”
- Monitoring là setup Prometheus rồi quên không đặt retention, query thì join loạn xạ trên dashboard…
Thì em xin phép có 10 job cũng không bằng 1 lần Production chết ngay giữa đêm Giáng Sinh :D
Làm DevOps không phải để học tool mà là để cho hệ thống sống yên bình cả khi mình không có mặt.
Muốn đến được chỗ đó, em thấy chỉ có một cách: phải từng là người đứng ra gánh trách nhiệm thật sự.