Bài viết mới nhất

Tổng 1741 bài
DevOps 01/09/2026 8 phút

Nâng cấp Kubernetes: bỏ PodDisruptionBudget, hạ còn đúng một bản sao, vẫn không mất một yêu cầu nào — thứ cứu được là preStop, không phải PDB

Nâng cấp Kubernetes gồm hai phần: nâng control plane (kubeadm lo) và thay từng node (việc của bạn, và là phần gây gián đoạn). Đo drain node giữa lúc phục vụ ở ba cấu hình: 2 bản + PDB + preStop = 0 lỗi, nhưng 1 bản không PDB mà VẪN có preStop cũng 0 lỗi, còn bỏ preStop + probe thì mất 3 yêu cầu mỗi lần. Cái tạo khoảng chồng lấn không phải số bản sao mà là 5 giây trì hoãn của preStop — và PDB bảo vệ một thứ hoàn toàn khác.

DevOps 01/09/2026 8 phút

Sidecar của service mesh chỉ thêm 0,19 ms và 5 MB RAM — nhưng một pod ngoài mesh vẫn gọi thẳng vào được không mã hoá; cài mesh không tự nó chặn gì

Service mesh hứa mTLS, quan sát và điều khiển lưu lượng mà không sửa mã. Cài Linkerd lên cụm thật rồi đo: sidecar thêm ~0,19 ms (2,4 lần tương đối nhưng dưới 5% với dịch vụ thật) và chỉ 3–5 MB RAM. mTLS bật sẵn không cần khai gì. Nhưng điểm quan trọng nhất: mTLS là CƠ HỘI, không phải bắt buộc — pod ngoài mesh gọi vào vẫn chạy bình thường bằng văn bản rõ, cho tới khi bạn thêm chính sách cưỡng chế.

DevOps 31/08/2026 9 phút

30 dòng YAML mua được kiểm tra dữ liệu và cột hiển thị riêng cho Kubernetes — nhưng nó tạo ra 0 pod, vì một CRD là danh từ còn Operator mới là động từ

Tự viết cả CRD lẫn Operator rồi đo. 30 dòng YAML cho validation, giá trị mặc định và cột hiển thị mà không viết dòng mã nào — nhưng tạo xong TrangWeb thì namespace vẫn 0 Deployment, 0 pod. 38 dòng Python biến nó thành Operator thật (soBan 2→4 sau ~5 giây, xoá là Deployment tự biến mất nhờ ownerReferences). Chi phí thật lộ ra ở chỗ khác: vòng lặp quét 20 đối tượng gọi 660 lệnh API trong 60 giây, 11 lệnh/giây kể cả khi không có gì đổi — và với 200 đối tượng là 110 lệnh/giây không bao giờ nghỉ.

DevOps 31/08/2026 8 phút

Tôi từng nói Kustomize gọn hơn Helm — đo lại thì 41 dòng so 37 dòng, gần như hoà; khác biệt thật nằm ở chỗ Kustomize không nhớ nó đã tạo ra gì

Đo Kustomize trên đúng bài toán đã đo Helm, và phát hiện phép so 380-dòng ở phần trước là so nhầm chart mẫu với overlay tối giản. Đo cho công bằng: Helm 37 dòng, Kustomize 41 dòng — đếm dòng là hoà. Khác biệt thật ít ai nói tới: Kustomize không có trạng thái release (0 Secret trong namespace), nên bỏ một tài nguyên khỏi khai báo thì nó vẫn còn nguyên trong cụm — Helm xoá được vì nhớ lần trước, Kustomize phải mượn --applyset. Cùng lúc configMapGenerator băm nội dung nên đổi cấu hình là Deployment tự cuộn lại, thứ Helm phải tự gắn checksum mới có.

DevOps 31/08/2026 7 phút

Tín hiệu 'cụm cần thêm máy' sinh ra sau 0,2 giây, dọn một node hết 14,3 giây — còn khúc giữa tôi không đo được, và tôi nói thẳng điều đó

HPA thêm pod, Cluster Autoscaler thêm NODE khi hết chỗ. Đo hai đầu của vòng lặp trên cụm thật: pod vào Pending sau 0,2 giây, drain một node hết 14,3 giây. Còn khúc giữa — nhà cung cấp đám mây thật sự tạo ra một máy — thì kind không dựng được, nên tôi không có số đo và không mượn số của người khác rồi gọi là phép đo. Bài học rơi ra: hai đầu đều nhanh, toàn bộ thời gian chờ nằm ở khúc bạn không kiểm soát — nên tối ưu thời gian cụm phản ứng thì đừng nhìn Kubernetes, hãy nhìn thời gian khởi động máy và kéo ảnh.

DevOps 31/08/2026 7 phút

emptyDir trong RAM ghi nhanh gấp bốn lần trên đĩa — nhưng nó âm thầm ăn vào giới hạn bộ nhớ của pod, và cú OOMKilled sau đó đổ lỗi nhầm chỗ

Pod là thứ tạm thời, dữ liệu thì thường không — đo bốn cách gắn lưu trữ và cái nào sống sót qua việc pod bị xoá. emptyDir trên tmpfs nhanh gấp bốn emptyDir trên đĩa nhưng tính vào limits.memory nên ghi quá tay là OOMKilled dù ứng dụng chẳng cấp phát gì. emptyDir gắn vòng đời POD không phải container: sống qua restart, chết qua xoá pod. PVC local-path cấp phát muộn (WaitForFirstConsumer) và bị ghim vào một node, nên node chết là pod kẹt Pending. Và reclaimPolicy Delete mặc định nghĩa là kubectl delete pvc xoá dữ liệu vĩnh viễn, không thùng rác.