Bỏ qua

07.KubeScheduler

1. kube-scheduler - "Nhà Điều phối" Thông minh của Kubernetes 🧠

  • Nhiệm vụ chính: kube-scheduler chịu trách nhiệm QUYẾT ĐỊNH xem một Pod mới nên được chạy trên Worker Node nào.
  • Điểm khác biệt quan trọng cần nhớ:

  • Scheduler chỉ có vai trò là "chỉ định". Nó ra quyết định: "Pod A sẽ chạy trên Node B".

  • KHÔNG phải là người thực sự đặt Pod lên Node đó. Công việc đó thuộc về kubelet trên Node B.

2. Tại sao chúng ta cần Scheduler? 🤔

Hãy tưởng tượng bạn có rất nhiều container (hàng hóa) và rất nhiều node (tàu). Bạn cần một người điều phối thông minh để:

  • Đảm bảo container không bị đặt lên con tàu đã quá tải.
  • Đảm bảo container cần nhiều "không gian" (tài nguyên) được đặt lên con tàu đủ lớn.
  • Đảm bảo container có yêu cầu đặc biệt (ví dụ: chỉ đi đến cảng X) được đặt lên đúng con tàu có lộ trình đó.

Trong Kubernetes cũng vậy, Scheduler đảm bảo các Pod được đặt lên các Node phù hợp nhất dựa trên nhiều tiêu chí khác nhau.


3. Quy trình "Tuyển chọn" Node của Scheduler (2 Giai đoạn) ✅

Khi có một Pod mới được tạo và chưa được gán cho Node nào, kube-scheduler sẽ bắt đầu quy trình "tuyển chọn" qua 2 giai đoạn:

a. Giai đoạn 1: Lọc (Filtering)

  • Ở giai đoạn này, scheduler sẽ loại bỏ tất cả các Node KHÔNG PHÙ HỢP.
  • Ví dụ: Pod của bạn yêu cầu 2 CPU và 4GB RAM. Scheduler sẽ lọc ra tất cả các Node không còn đủ 2 CPU hoặc 4GB RAM trống.
  • Kết thúc giai đoạn này, chúng ta sẽ có một danh sách các Node "tiềm năng" có thể chạy được Pod.

b. Giai đoạn 2: Chấm điểm & Xếp hạng (Scoring & Ranking)

  • Từ danh sách các Node tiềm năng ở trên, scheduler sẽ tiến hành chấm điểm cho từng Node theo thang điểm từ 0 đến 10.
  • Nó sử dụng các hàm ưu tiên (priority functions) để tính điểm.
  • Ví dụ: Một hàm có thể chấm điểm cao hơn cho Node nào mà sau khi đặt Pod lên vẫn còn dư nhiều tài nguyên nhất.
  • Cuối cùng, Node có số điểm cao nhất sẽ được chọn để chạy Pod.

Quy trình này có thể được tùy chỉnh và thậm chí bạn có thể tự viết scheduler của riêng mình. Có rất nhiều khái niệm nâng cao liên quan như Taints & Tolerations, Node Selectors, Affinity,... sẽ được tìm hiểu sâu hơn sau này.


4. Cài đặt và Xem Cấu hình

  • Với cụm kubeadm: kube-scheduler được triển khai như một static Pod trong namespace kube-system. Bạn có thể xem cấu hình trong file manifest của Pod tại /etc/kubernetes/manifests/.
  • Cách chung: Dùng lệnh ps aux | grep kube-scheduler trên Master Node để xem tiến trình đang chạy và các tham số của nó.

5. "Chốt hạ" cho Kỳ thi CKA 📝

  • Nhiệm vụ của kube-schedulerQUYẾT ĐỊNH, còn nhiệm vụ của kubeletTHỰC THI việc đặt Pod lên Node. Phải phân biệt rõ ràng hai vai trò này.
  • Nắm vững quy trình 2 giai đoạn: Lọc (Filtering) để loại bỏ các node không phù hợp và Chấm điểm (Scoring) để chọn ra node tốt nhất.
  • Biết cách tìm file cấu hình của scheduler trong một cụm kubeadm (nó là một static Pod).

Scheduler đóng vai trò then chốt trong việc đảm bảo các ứng dụng của bạn được phân bổ một cách tối ưu và hiệu quả trên toàn bộ cụm. Chúc bạn một buổi chiều học tập hiệu quả!

Bình luận