01.cluster architecture
Kiến trúc Kubernetes qua phép so sánh Tàu Thuyền¶
Mục đích của Kubernetes là tự động hóa việc triển khai và quản lý các ứng dụng của bạn dưới dạng container. Hãy tưởng tượng bạn đang quản lý một hạm đội tàu biển khổng lồ:
- Tàu Hàng (Cargo Ships) 🚢: Đây là những con tàu làm công việc thực tế - chuyên chở các container (ứng dụng của bạn). Trong Kubernetes, chúng chính là các Worker Node.
- Tàu Chỉ Huy (Control Ships) Đây là những con tàu đầu não, không chở hàng mà làm nhiệm vụ quản lý, giám sát, và điều phối toàn bộ hạm đội tàu hàng. Trong Kubernetes, đây chính là Master Node.
Một cụm Kubernetes (Kubernetes cluster) bao gồm một hoặc nhiều Master Node và nhiều Worker Node.¶
Bên trong "Tàu Chỉ Huy" (Master Node Control Plane)¶
Master Node là bộ não của cả cụm, nó điều hành mọi thứ thông qua một bộ các thành phần gọi là Control Plane.
etcd
- Kho Dữ liệu của Hạm đội¶
- So sánh: Giống như cuốn sổ nhật ký khổng lồ của hạm đội, lưu trữ mọi thông tin: có bao nhiêu con tàu, tàu nào đang chở container gì, container được xếp lên lúc nào, v.v.
- Thực tế:
etcd
là một cơ sở dữ liệu dạng key-value có tính sẵn sàng cao (highly available). Nó lưu trữ toàn bộ trạng thái và cấu hình của cụm Kubernetes. Mọi thông tin về nodes, pods (containers), services,... đều nằm trongetcd
.
kube-scheduler
- Người Điều Phối Xếp Dỡ¶
- So sánh: Giống như những chiếc cần cẩu thông minh ở bến cảng. Khi có một container cần xếp lên tàu, cần cẩu sẽ xác định con tàu nào là phù hợp nhất dựa trên kích thước, sức chứa còn lại, loại hàng được phép chở, v.v.
- Thực tế:
kube-scheduler
có nhiệm vụ tìm một Worker Node phù hợp nhất để chạy một Pod (một hoặc nhiều container) mới được yêu cầu. Nó xem xét các yếu tố như tài nguyên yêu cầu của Pod (CPU, memory) và tài nguyên còn trống của các Node.
kube-controller-manager
- Ban Quản lý các Phòng ban¶
- So sánh: Tàu chỉ huy có nhiều phòng ban chuyên trách: phòng điều hành lo việc vận tải, phòng hàng hóa lo các container, phòng IT lo việc liên lạc.
- Thực tế:
kube-controller-manager
quản lý nhiều "bộ điều khiển" (controllers) khác nhau, mỗi controller là một vòng lặp theo dõi trạng thái của cụm và cố gắng đưa nó về trạng thái mong muốn. - Node Controller: Chăm sóc các Node. Nó chịu trách nhiệm khi một Node mới tham gia vào cụm, hoặc khi một Node "chết" hoặc không thể truy cập.
- Replication Controller: Đảm bảo số lượng bản sao (replicas) của một ứng dụng luôn đúng như bạn đã khai báo.
kube-api-server
- "Tổng Đài" Giao tiếp Trung tâm¶
- So sánh: Đây là trung tâm chỉ huy, nơi tất cả các phòng ban, các tàu hàng, và cả người quản lý từ bên ngoài liên lạc với nhau. Mọi mệnh lệnh đều đi qua đây.
- Thực tế:
kube-api-server
là thành phần trung tâm và quan trọng nhất. Nó phơi bày ra Kubernetes API. Mọi tương tác với cụm Kubernetes đều phải thông qua API Server. - Người dùng (dùng
kubectl
), các controller, và cả các worker node đều nói chuyện với nhau thông quakube-api-server
.
Trên "Tàu Hàng" (Worker Node)¶
Đây là nơi các container ứng dụng của bạn thực sự chạy. Mỗi Worker Node cũng có các thành phần quan trọng riêng.
Container Runtime Engine (ví dụ: Docker) - Động cơ Chạy Container¶
- So sánh: Để chở được container, con tàu phải được thiết kế để tương thích với container.
- Thực tế: Đây là phần mềm chịu trách nhiệm chạy các container. Docker là một lựa chọn phổ biến, nhưng Kubernetes cũng hỗ trợ các runtime khác như ContainerD, Rocket (rkt). Nó phải được cài đặt trên tất cả các node trong cụm.
kubelet
- Thuyền trưởng của Tàu Hàng¶
- So sánh: Mỗi tàu hàng có một thuyền trưởng, chịu trách nhiệm quản lý mọi hoạt động trên tàu mình. Thuyền trưởng nhận lệnh từ tàu chỉ huy, xếp dỡ container theo yêu cầu, và báo cáo tình trạng của tàu và hàng hóa về trung tâm.
- Thực tế:
kubelet
là một agent chạy trên mỗi Worker Node. Nó lắng nghe chỉ thị từkube-api-server
và đảm bảo rằng các container được mô tả trong các Pod đang chạy và khỏe mạnh trên node của nó. Nó cũng gửi báo cáo trạng thái của node và các container về cho Master Node.
kube-proxy
- Người Dẫn Lối Mạng¶
- So sánh: Các ứng dụng trên các tàu hàng khác nhau cần nói chuyện được với nhau (ví dụ: web server trên tàu A cần gọi đến database trên tàu B).
kube-proxy
tạo ra các tuyến đường liên lạc đó. - Thực tế:
kube-proxy
là một network proxy chạy trên mỗi node. Nó duy trì các quy tắc mạng (network rules) trên các node, cho phép giao tiếp mạng đến các Pod từ bên trong hoặc bên ngoài cụm. Nó là thành phần chính giúp thực hiện cơ chế Service Discovery trong Kubernetes.
Tóm tắt Kiến trúc¶
- Master Node (Control Plane):
etcd
(Lưu trữ trạng thái)kube-scheduler
(Chọn Node cho Pod)kube-controller-manager
(Quản lý các controller)kube-api-server
(Cổng giao tiếp chính)- Worker Node:
kubelet
(Agent quản lý container trên Node)kube-proxy
(Quản lý mạng cho Node)Container Runtime
(Phần mềm chạy container)
"Chốt hạ" cho Kỳ thi 📝¶
- Nắm vững sự khác biệt giữa Master Node và Worker Node.
- Hiểu rõ vai trò và trách nhiệm của từng thành phần cốt lõi:
etcd
,api-server
,scheduler
,controller-manager
,kubelet
,kube-proxy
. - Hãy nhớ rằng mọi giao tiếp đều đi qua
kube-api-server
. kubelet
là "tay chân" của Master trên mỗi Worker Node.