73 part series

Kubernetes Từ Số Không

Dựng một cluster Kubernetes hoàn chỉnh bằng tay — không kubeadm, không script — từ certificate đầu tiên tới một cluster HA chạy thật, rồi dùng chính nó làm phòng thí nghiệm để deep-dive toàn bộ concept của Kubernetes. Phần một: PKI/TLS, etcd, control plane, worker, mạng pod, CoreDNS. Phần hai: Pods, workload controllers, scheduling, storage, networking nâng cao (Cilium eBPF), bảo mật, mở rộng API, vận hành. Mỗi thành phần vừa được giải thích cơ chế bên trong, vừa tự dựng/cấu hình tay. Test thật trên AWS EC2 với Kubernetes v1.36, manifest/script lưu tại github.com/nghiadaulau/kubernetes-from-scratch. Bám docs chính thức kubernetes.io.

61

API Aggregation: Gắn API Server Thứ Hai

CRD thêm kiểu mới do chính API server chính lưu trong etcd. API aggregation đi xa hơn: gắn hẳn một API server thứ hai vào sau API server chính, phục vụ một nhóm API mà nó tự lưu, tự tính, theo cách riêng. Cụm ta đã chạy một ví dụ từ Bài 39 — metrics-server. Bài này soi nó như một API aggregated: APIService đăng ký, request được proxy tới đâu, và vì sao số liệu CPU/memory trả về mà không hề nằm trong etcd.

Kai··4 min read·DevOpsKubernetes
62

Device Plugin và Extended Resources

Pod xin được CPU và memory, nhưng GPU, NIC tốc độ cao hay FPGA thì sao? Device plugin là cách node quảng bá phần cứng ngoài CPU/memory thành extended resource để pod xin và scheduler chia. Bài này dựng một device plugin thật, bắt trọn luồng gRPC nó dùng để đăng ký với kubelet và quảng bá thiết bị, xem kubelet gọi Allocate khi pod chạy, rồi dùng cơ chế extended resource bên dưới để thấy scheduler chia nó y như CPU.

Kai··6 min read·DevOpsKubernetes
63

Sao Lưu etcd và Xoay Certificate

etcd cất toàn bộ trạng thái cụm; mất nó là mất cụm. Part XIII mở đầu ở đúng chỗ đáng sợ nhất khi hỏng. Ta chụp một snapshot etcd, kiểm nó hợp lệ, và khôi phục ra một thư mục dữ liệu mới để chứng minh snapshot dùng được — tất cả mà không đụng etcd đang chạy. Rồi soi hạn của bộ certificate dựng từ Bài 4 và bàn việc xoay chúng trước khi hết hạn.

Kai··5 min read·DevOpsKubernetes
64

Nâng Cấp và Version Skew

Nâng cấp Kubernetes không phải đổi hết một lượt mà đi theo thứ tự, vì các thành phần được phép lệch phiên bản nhau trong giới hạn nghiêm ngặt — kubelet được cũ hơn apiserver tới ba minor nhưng tuyệt đối không mới hơn. Bài này soi version skew của cụm, giải thích vì sao apiserver phải nâng trước, rồi diễn tập phần khó nhất khi nâng một node: cordon, drain, uncordon — trên worker-0 thật, có thể hoàn tác.

Kai··5 min read·DevOpsKubernetes
65

GC, cgroup v2, Swap và Tắt Node Có Trật Tự

Kubelet làm nhiều việc ở tầng node mà ta hiếm khi nhìn tới khi mọi thứ chạy ổn. Bài này soi bốn việc đó trên worker thật: dọn image cũ khi đĩa đầy, đặt mỗi pod vào đúng nhánh cgroup v2 và ép limit qua memory.max/cpu.max, vì sao swap mặc định bị chặn, và graceful node shutdown — thứ quyết định pod bị giật hay được dừng tử tế khi node tắt.

Kai··5 min read·DevOpsKubernetes
66

Kiến Trúc Logging

kubectl logs nghe đơn giản, nhưng phía sau là một chuỗi: container ghi stdout/stderr ra file trên node, kubelet đọc file đó trả về, và xoay nó khi đầy. Bài này lần theo một dòng log thật từ kubectl xuống đúng file trên đĩa worker, xem định dạng CRI và symlink, rồi tách hai loại log của cụm tự dựng — log container và log thành phần hệ thống qua journald — và vì sao cụm không tự gom log mà cần một agent.

Kai··4 min read·DevOpsKubernetes
67

Metrics, Traces và API Priority and Fairness

Log cho sự kiện rời rạc; metrics cho số liệu liên tục. Bài này soi endpoint /metrics định dạng Prometheus mà apiserver và kubelet phơi ra, rồi đào API Priority and Fairness — cơ chế apiserver tự chia băng thông request thành nhiều mức ưu tiên để một client hỗn không bóp nghẹt phần còn lại. Ta xem FlowSchema và PriorityLevelConfiguration dựng sẵn, và trạng thái sống của từng mức qua endpoint debug — tất cả trên cụm thật.

Kai··5 min read·DevOpsKubernetes
68

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.

Kai··5 min read·DevOpsAutoscaling
69

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.

Kai··5 min read·DevOpsSecurity
70

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.

Kai··4 min read·DevOpsKubernetes
71

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.

Kai··5 min read·DevOpsStorage
72

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.

Kai··4 min read·DevOpsSecurity