Multiple Schedulers trong Kubernetes

Trong bài viết này, hãy cùng mình tìm hiểu về multiple schedulers trong kubernetes, cho phép bạn tùy chỉnh quá trình phân bổ pod cho các node.

Xem thêm:

Resource requirement

DaemonSet trong Kubernetes

1. Vì sao cần sử dụng multilphe schedulers

Scheduler trong kubernetes giúp điều phối các Pod tới các Worker Node dựa theo các điều kiện khác nhau. Nhưng điều gì sẽ xảy ra nếu không có scheduler nào thỏa mãn yêu cầu của bạn? Có các nào để tùy chỉnh cách phân bố thủ công hay không? Câu trả lời là cóa.

Khi bạn cần thêm điều kiện hoặc kiểm tra tùy chỉnh cho việc phân bổ pod, bạn có thể tạo scheduler riêng của mình.

2. Cách tạo một scheduler riêng

Bạn có thể viết scheduler của riêng mình và đóng gói dưới dạng scheduler mặc định hoặc scheduler bổ sung.

Ví dụ:

---
apiVersion: v1
kind: Pod
metadata:
  labels:
    run: my-scheduler
  name: my-scheduler
  namespace: kube-system
spec:
  serviceAccountName: my-scheduler
  containers:
  - command:
    - /usr/local/bin/kube-scheduler
    - --config=/etc/kubernetes/my-scheduler/my-scheduler-config.yaml
    image: registry.k8s.io/kube-scheduler:v1.29.0  # changed
    livenessProbe:
      httpGet:
        path: /healthz
        port: 10259
        scheme: HTTPS
      initialDelaySeconds: 15
    name: kube-second-scheduler
    readinessProbe:
      httpGet:
        path: /healthz
        port: 10259
        scheme: HTTPS
    resources:
      requests:
        cpu: '0.1'
    securityContext:
      privileged: false
    volumeMounts:
      - name: config-volume
        mountPath: /etc/kubernetes/my-scheduler
  hostNetwork: false
  hostPID: false
  volumes:
    - name: config-volume
      configMap:
        name: my-scheduler-config

3. Triển khai scheduler

Triển khai như một service

  • Sử dụng binary kube-scheduler và file cấu hình riêng.
  • Cung cấp tùy chọn kubeconfig để kết nối với API server.

Triển khai như một pod

  • Tạo file định nghĩa pod với các thuộc tính như kubeconfig, config và leaderElect.
  • leaderElect được sử dụng để lựa chọn scheduler chính trong trường hợp có nhiều scheduler đang chạy.

Triển khai như một deployment

  • Tạo file định nghĩa deployment với các thuộc tính tương tự như pod, bao gồm image, config file, binary, service account, cluster role bindings.
  • Sử dụng ConfigMap để lưu trữ file cấu hình scheduler và gắn vào deployment k8s.

Kiểm tra

  • Sử dụng lệnh kubectl get pods để kiểm tra xem scheduler đã được triển khai thành công.
  • Sử dụng lệnh kubectl get events -o wide để xem scheduler nào đã phân bổ pod.
  • Sử dụng lệnh kubectl logs để xem log của scheduler.

4.  Cấu hình scheduler cho pod

Thêm thuộc tính schedulerName vào file định nghĩa pod và chỉ định tên của scheduler. Sử dụng lệnh kubectl create để tạo pod.

Triển khai nhiều scheduler trong Kubernetes cho phép bạn tùy chỉnh quá trình phân bổ pod theo nhu cầu của mình. Bạn có thể tạo scheduler riêng để đáp ứng các yêu cầu cụ thể của ứng dụng.

---
apiVersion: v1 
kind: Pod 
metadata:
  name: nginx 
spec:
  schedulerName: my-scheduler
  containers:
  - image: nginx
    name: nginx

Cảm ơn bạn đã tham khảo kubernetes cơ bản trên ttnguyen.net.

Bài viết liên quan:

Taints và Tolerations trong Kuberbetes

Labels and Selectors trong Kubernetes

Manual Scheduling trong K8s

Nguyễn Tiến Trường

Mình viết về những điều nhỏ nhặt trong cuộc sống, Viết về câu chuyện những ngày không có em