Kubernetes Architecture
Trước khi setup Kubernetes cluster, cần hiểu rõ các khái niệm nền tảng: Node, Cluster, Master, và các Component chính.
1) Node (Nút làm việc)
Node là một máy (physical hoặc virtual) có Kubernetes cài đặt.
- Đây là nơi chứa containers sẽ chạy.
- Cũng được gọi là Minion (cách gọi cũ).
- Đơn vị nhỏ nhất của Kubernetes cluster.
Vấn đề: Nếu 1 node fail → ứng dụng down → người dùng mất truy cập.
Giải pháp: Dùng nhiều nodes để đảm bảo high availability và phân tán load.
2) Cluster (Cụm nút)
Cluster là tập hợp nhiều nodes được nhóm lại.
┌─────────────────────────────────────┐
│ Kubernetes Cluster │
│ │
│ ┌──────────┐ ┌──────────┐ │
│ │ Node 1 │ │ Node 2 │ │
│ │ (worker) │ │ (worker) │ ... │
│ └──────────┘ └──────────┘ │
│ │
│ Lợi ích: │
│ - 1 node fail → app vẫn sống │
│ - Chia sẻ load │
│ - Scale dễ dàng │
└─────────────────────────────────────┘
3) Master Node (Nút chủ)
Master là một node đặc biệt, cấu hình như một “Control Plane”:
- Quản lý cluster: giám sát các nodes.
- Điều phối container: quyết định chạy container ở node nào.
- Xử lý thất bại: node fail → master di chuyển workload sang node khác.
Không chạy ứng dụng trên Master (thường dành riêng để quản lý).
4) Các thành phần chính của Kubernetes
Trên Master Node
| Thành phần | Chức năng |
|---|---|
| API Server | Frontend của Kubernetes; tất cả yêu cầu từ CLI, dashboard, API đều qua đây |
| etcd | Distributed key-value store; lưu toàn bộ cluster state, config, data |
| Scheduler | Lên lịch container mới; chọn node phù hợp để chạy pod |
| Controller Manager | “Bộ não” của orchestration; phát hiện và xử lý khi node/container/endpoint lỗi |
Trên Worker Node
| Thành phần | Chức năng |
|---|---|
| Kubelet | Agent chạy trên mỗi worker; đảm bảo container chạy đúng như expected |
| Container Runtime | Phần mềm chạy container (Docker, containerd, CRI-O, etc.) |
| kube-proxy | Quản lý networking, service discovery, load balancing |
5) Sơ đồ Master vs Worker Nodes
┌────────────────────────────────────────────────────────────┐
│ KUBERNETES CLUSTER │
├────────────────────────────────────────────────────────────┤
│ │
│ ┌──────────────────────────┐ ┌──────────────────────────┐ │
│ │ MASTER NODE │ │ WORKER NODE 1 │ │
│ ├──────────────────────────┤ ├──────────────────────────┤ │
│ │ API Server │ │ Kubelet │ │
│ │ etcd (key-value store) │ │ Container Runtime │ │
│ │ Scheduler │ │ (Docker/containerd) │ │
│ │ Controller Manager │ │ kube-proxy │ │
│ └──────────────────────────┘ └──────────────────────────┘ │
│ ↕ (quản lý) ↕ (run app) │
│ │
│ ┌──────────────────────────┐ ┌──────────────────────────┐ │
│ │ WORKER NODE 2 │ │ WORKER NODE 3 │ │
│ ├──────────────────────────┤ ├──────────────────────────┤ │
│ │ Kubelet │ │ Kubelet │ │
│ │ Container Runtime │ │ Container Runtime │ │
│ │ kube-proxy │ │ kube-proxy │ │
│ └──────────────────────────┘ └──────────────────────────┘ │
│ ↕ (run app) ↕ (run app) │
└────────────────────────────────────────────────────────────┘
6) kubectl: Command Line Tool
kubectl (phát âm: “kube-control”) là công cụ CLI chính để tương tác với Kubernetes cluster.
Lệnh cơ bản
# Deploy ứng dụng
kubectl run <app-name> --image=<image-name>
# Xem thông tin cluster
kubectl cluster-info
# Liệt kê tất cả nodes
kubectl get nodes
# Xem chi tiết một node
kubectl describe node <node-name>
# Xem tất cả pods
kubectl get pods
Luồng tương tác
User/Developer
↓
kubectl CLI
↓
API Server
↓
Scheduler → etcd
Controller → Kubelet on nodes
↓
Containers running
7) Kiến trúc tổng thể
Khi bạn deploy ứng dụng:
- Gửi request qua
kubectlhoặc API. - API Server nhận và xác thực.
- etcd lưu desired state.
- Scheduler chọn node phù hợp.
- Kubelet trên worker node tạo container.
- Controller liên tục giám sát; nếu container chết → tạo cái mới.
Kết luận
Hiểu rõ kiến trúc này là bước tiền đề để:
- Setup cluster đúng cách.
- Debug vấn đề hiệu quả.
- Optimize deployment strategy.
Phần tiếp theo sẽ đi vào chi tiết Kubernetes Objects (Pod, Deployment, Service) và cách chúng tương tác.