Trong bài viết này, hãy cùng mình tìm hiểu cách thực hiện Manual Scheduling trong K8s.
1. Cách Scheduling hoạt động
Trường Node Name
: Mỗi pod trong k8s có một trường Node Name
. Scheduler sẽ điền vào trường này khi nó gán một pod cho một node.
Quá trình lập lịch: Scheduler kiểm tra các pods chưa có Node Name
và áp dụng các thuật toán lập lịch để chọn node phù hợp nhất. Sau đó, nó tạo một đối tượng Binding
để liên kết pod với node đã chọn.
2. Vai trò của scheduling
Thông thường, Kubernetes sử dụng scheduling để tự động gán pods cho các nodes dựa trên nhiều yếu tố như sẵn có tài nguyên và các ràng buộc khác.
3. Manual Scheduling Pod
3.1 Không có Scheduler
Nếu không có scheduler, pods sẽ ở trạng thái “Pending” bởi vì chúng không thể được gán cho các node tự động.
– File POD nginx.yaml
apiVersion: v1 kind: Pod metadata: name: nginx spec: containers: - image: nginx name: nginx
– Trạng thái của POD:
NAME READY STATUS RESTARTS AGE nginx 0/1 Pending 0 44s
3.2 Manual Scheduling Pod
Bạn có thể manunal scheduling pod bằng cách trực tiếp chỉ định “Node Name” trong tệp định nghĩa pod khi tạo pod. Điều này buộc Kubernetes phải gán pod cho node đã chỉ định.
– Manunal Scheduling Pod cho node01:
apiVersion: v1 kind: Pod metadata: name: nginx spec: nodeName: node01 containers: - image: nginx name: nginx
NAME READY STATUS RESTARTS AGE nginx 1/1 Running 0 23s
Hạn chế: Phương pháp này chỉ hoạt động trong quá trình tạo pod. Bạn không thể sửa đổi “Node Name” của một pod đã được tạo.
4. Scheduling Pod already exits
Đối tượng Binding: Để gán một node cho một pod đã tồn tại, bạn cần tạo một đối tượng “Binding” và gửi một yêu cầu POST đến API binding của pod.
Nội dung của Đối tượng Binding: Đối tượng binding chỉ định “Target Node” với tên node mong muốn.
Định dạng JSON: Yêu cầu POST yêu cầu gửi đối tượng binding ở định dạng JSON.
Hy vọng rằng qua bài viết này, bạn đã hiểu rõ hơn về vai trò và cách hoạt động của Manual Scheduling trong K8s. Cảm ơn bạn đã tham khảo kubernetes cơ bản trên ttnguyen.net.