Bài 15. Kubernetes quyết định Pod chạy ở Node nào?
"Khi bạn chạy
kubectl apply, Pod sẽ được tạo. Nhưng... ai là người quyết định Pod sẽ chạy trên Node nào?"
Đây là một câu hỏi mà rất nhiều người mới học Kubernetes thắc mắc.
Hãy cùng tìm hiểu.
Một ví dụ thực tế
Giả sử bạn có một Kubernetes Cluster như sau:
+----------------------+
| Cluster |
+----------------------+
+---------+ +---------+ +---------+
| Node A | | Node B | | Node C |
| 8 CPU | | 4 CPU | |16 CPU |
|16GB RAM | | 8GB RAM | |32GB RAM |
+---------+ +---------+ +---------+
Bạn deploy một ứng dụng:
kubectl apply -f deployment.yaml
Ngay sau đó, Pod được tạo.
Nhưng...
Node A?
Node B?
Hay Node C?
Ai là người đưa ra quyết định này?
1. Scheduler - "Người điều phối" của Kubernetes
Câu trả lời là Kubernetes Scheduler.
Nhiệm vụ của Scheduler rất đơn giản:
Tìm Node phù hợp nhất để chạy Pod.
Nó không tạo Pod.
Nó không chạy Container.
Nó chỉ quyết định:
"Pod này nên chạy ở Node nào?"
2. Scheduler quyết định như thế nào?
Scheduler sẽ xem xét rất nhiều yếu tố trước khi chọn Node.
Ví dụ:
- Node còn đủ CPU và RAM không?
- Node có đang hoạt động không?
- Pod có yêu cầu chạy trên Node cụ thể không?
- Có quy tắc Affinity hay Taints/Tolerations nào không?
Sau khi đánh giá, Scheduler sẽ chọn Node phù hợp nhất, rồi giao việc cho Kubelet trên Node đó tạo Pod.
kubectl apply
│
▼
API Server
│
▼
Scheduler
│
▼
Chọn Node phù hợp
│
▼
Kubelet
│
▼
Pod Running
Một ví dụ đơn giản
Giả sử Cluster có 3 Node.
Node A (CPU còn 10%)
Node B (CPU còn 80%)
Node C (CPU còn 60%)
Bạn tạo một Pod mới.
Thông thường, Scheduler sẽ ưu tiên Node còn nhiều tài nguyên hơn, chẳng hạn Node B, thay vì dồn tất cả Pod vào Node A.
Mục tiêu là giúp Cluster hoạt động cân bằng và ổn định.
3. Chúng ta có thể tự chọn Node không?
Có.
Trong nhiều trường hợp, bạn muốn Pod chạy trên một Node cụ thể, ví dụ:
- Database luôn chạy trên Node có SSD.
- GPU Server chỉ chạy ứng dụng AI.
- Monitoring chạy trên Node riêng.
Kubernetes hỗ trợ nhiều cách để làm điều này như:
- NodeSelector
- Affinity
- Taints & Tolerations
Chúng ta sẽ lần lượt tìm hiểu ở các bài tiếp theo.
Tổng kết
Sau bài này, bạn chỉ cần nhớ ba ý chính:
- Scheduler là thành phần quyết định Pod sẽ chạy trên Node nào.
- Scheduler sẽ chọn Node dựa trên tài nguyên và các quy tắc của Cluster.
- Chúng ta cũng có thể can thiệp vào quyết định này bằng các cơ chế như NodeSelector, Affinity và Taints/Tolerations.
Bài tiếp theo
Scheduler sử dụng rất nhiều thông tin để đưa ra quyết định, nhưng nguồn thông tin quan trọng nhất lại đến từ Labels.
Vậy Labels và Selectors là gì, và vì sao chúng được xem là "trái tim" của Kubernetes?
Chúng ta sẽ cùng khám phá trong bài tiếp theo.
All rights reserved