Blog
Thoughts on engineering, design, and building great products.
Máy Ảo eBPF: Thanh Ghi, Tập Lệnh và Bytecode
Bài trước thấy một chương trình eBPF có 'xlated 512B' (bytecode đã verify) và 'jited 333B' (mã máy). Bài này đi vào trong cái bytecode đó: eBPF là một máy ảo kiểu RISC với 11 thanh ghi 64-bit, một tập lệnh nhỏ, được thiết kế để vừa dịch nhanh sang mã máy gốc vừa kiểm chứng được an toàn. Ta đọc thẳng bytecode của một chương trình Cilium đang chạy, soi từng lệnh ánh xạ ra thanh ghi và lớp lệnh nào, rồi xem vì sao đúng thiết kế máy ảo này mới cho phép verifier chứng minh an toàn.
Dọn Dẹp Toàn Bộ và Tổng Kết
Bài cuối. Cụm EC2 đã làm xong việc của nó, và để nó chạy là đốt tiền mỗi giờ. Bài này dọn sạch toàn bộ hạ tầng theo đúng thứ tự — terminate sáu instance (kéo theo ổ đĩa), trả Elastic IP, gỡ IAM role — kèm bảng chi phí thật để thấy ba lựa chọn: chạy tiếp, stop để dành, hay xóa hẳn. Rồi nhìn lại cả hành trình: từ một certificate tự ký tới một cụm Kubernetes HA vận hành đầy đủ, dựng tay từng mảnh.
Node Log Query và Phân Quyền Kubelet Chi Tiết
Bài 65 xem log thành phần hệ thống bằng cách SSH vào từng node chạy journalctl. v1.36 cho query log đó thẳng qua API kubelet, không cần SSH. Và đi kèm là một thay đổi bảo mật: quyền truy cập API kubelet, trước đây gộp một cục trong nodes/proxy, nay tách chi tiết từng endpoint — cho phép cấp đúng nodes/metrics cho agent giám sát mà không trao luôn quyền đọc log hay exec. Bài cuối Part XIV, cả hai chạm tới thành phần ta tự dựng ở Part I.
Storage Mới của v1.36
Part IX dựng PV/PVC, StorageClass, EBS CSI, snapshot. v1.36 thêm ba mảnh storage vừa lên ổn định, và cụm tự dựng thử được ngay hai trong số đó: mount nội dung một OCI image làm volume, và đổi IOPS/throughput của EBS volume đang dùng mà không tạo lại — thấy thay đổi áp thẳng lên AWS. Mảnh thứ ba, VolumeGroupSnapshot, là một bài học khác: tính năng GA ở Kubernetes không có nghĩa CSI driver nào cũng làm được.
In-place Pod Resize
Suốt series, đổi tài nguyên một container nghĩa là tạo lại pod. In-place pod resize phá giả định đó: chỉnh CPU/memory của một pod đang chạy mà không restart, qua subresource resize. Bài này resize một pod thật rồi soi cgroup v2 trên node đổi theo tại chỗ với restartCount vẫn 0 — đối trọng 'không gián đoạn' cho phần scale dọc của Bài 40 — và chạm vào hai ràng buộc: không đổi được QoS, và vì sao memory cần resizePolicy riêng.
Admission Policy bằng CEL
Bài 58 dựng admission webhook — một dịch vụ HTTPS riêng có cert, có server phải giữ sống. Từ v1.36, phần lớn nhu cầu đó làm được mà không cần server nào: ValidatingAdmissionPolicy và MutatingAdmissionPolicy viết luật bằng CEL ngay trong API server. Bài này mở Part XIV — các tính năng vừa graduate ở chính v1.36 cụm đang chạy — bằng cách chặn image :latest và tự tiêm label cho pod, hoàn toàn bằng policy object, không một dòng server.
Leader Election, Addon và Node Autoscaling
Cụm chạy ba control plane, nhưng controller-manager và scheduler thì chỉ một bản được hoạt động tại một thời điểm — nếu cả ba cùng làm, chúng giẫm chân nhau. Bài này xem cơ chế giữ điều đó: leader election qua Lease, và chứng minh failover thật bằng cách hạ leader xuống rồi xem một controller khác giành quyền. Rồi khép Part XIII bằng hai mảnh vận hành còn lại — cách cụm tự dựng quản addon, và node autoscaling tự thêm bớt máy theo tải.