1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/gocrane-crane-scheduler

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

Crane-scheduler

Обзор

Crane-scheduler — это набор плагинов планировщика, основанных на фреймворке планировщика, включая:

Начало работы

1. Установка Prometheus

Убедитесь, что ваш кластер Kubernetes имеет установленный Prometheus. Если нет, обратитесь к разделу Установка Prometheus.

2. Настройка правил Prometheus

Настройте правила Prometheus для получения ожидаемых агрегированных данных:

apiVersion: monitoring.coreos.com/v1
kind: PrometheusRule
metadata:
    name: example-record
    labels:
        prometheus: k8s
        role: alert-rules
spec:
    groups:
    - name: cpu_mem_usage_active
      interval: 30s
      rules:
      - record: cpu_usage_active
        expr: 100 - (avg by (instance) (irate(node_cpu_seconds_total{mode="idle"}[30s])) * 100)
      - record: mem_usage_active
        expr: 100*(1-node_memory_MemAvailable_bytes/node_memory_MemTotal_bytes)
    - name: cpu-usage-5m
      interval: 5m
      rules:
      - record: cpu_usage_max_avg_1h
        expr: max_over_time(cpu_usage_avg_5m[1h])
      - record: cpu_usage_max_avg_1d
        expr: max_over_time(cpu_usage_avg_5m[1d])
    - name: cpu-usage-1m
      interval: 1m
      rules:
      - record: cpu_usage_avg_5m
        expr: avg_over_time(cpu_usage_active[5m])
    - name: mem-usage-5m
      interval: 5m
      rules:
      - record: mem_usage_max_avg_1h
        expr: max_over_time(mem_usage_avg_5m[1h])
      - record: mem_usage_max_avg_1d
        expr: max_over_time(mem_usage_avg_5m[1d])
    - name: mem-usage-1m
      interval: 1m
      rules:
      - record: mem_usage_avg_5m
        expr: avg_over_time(mem_usage_active[5m])
```> **⚠️Решение проблем:** Интервал выборки Prometheus должен быть меньше 30 секунд, иначе указанные выше правила (например, `cpu_usage_active`) могут не работать должным образом. ### 3. Установка Crane-scheduler
Существуют два варианта:
1) Установите Crane-scheduler как второй планировщик:
   ```bash
   helm repo add crane https://gocrane.github.io/helm-charts
   helm install scheduler -n crane-system --create-namespace --set global.prometheusAddr="REPLACE_ME_WITH_PROMETHEUS_ADDR" crane/scheduler
  1. Замените встроенный Kube-scheduler на Crane-scheduler:
    1. Создайте резервную копию файла /etc/kubernetes/manifests/kube-scheduler.yaml
      cp /etc/kubernetes/manifests/kube-scheduler.yaml /etc/kubernetes/
    2. Измените конфигурационный файл kube-scheduler (scheduler-config.yaml), чтобы включить плагин Dynamic scheduler и настроить аргументы плагина:
      apiVersion: kubescheduler.config.k8s.io/v1beta2
      kind: KubeSchedulerConfiguration
      ...
      profiles:
      - schedulerName: default-scheduler
        plugins:
          filter:
            enabled:
            - name: Dynamic
          score:
            enabled:
            - name: Dynamic
              weight:  Yöntem
            pluginConfig:
            - name: Dynamic
               args:
                policyConfigPath: /etc/kubernetes/policy.yaml
      ...
    3. Создайте файл /etc/kubernetes/policy.yaml, используя его как политику планировщика для плагина Dynamic:
      apiVersion: scheduler.policy.crane.io/v1alpha1
      kind: DynamicSchedulerPolicy
      spec:
        syncPolicy:
          ## использование CPU
          - name: cpu_usage_avg_5m
            period: 3m
          - name: cpu_usage_max_avg_1h
            period: 15m
          - name: cpu_usage_max_avg_1d
            period: 3h
          ## использование памяти
          - name: mem_usage_avg_5m
            period: 3m
          - name: mem_usage_max_avg_1h
            period: 15m
          - name: mem_usage_max_avg_1d
            period: 3h
предикат:
## использование CPU
```        - имя: cpu_usage_avg_5m
          maxLimitPercent: 0.65
        - имя: cpu_usage_max_avg_1h
          maxLimitPercent: 0.75
        ## использование памяти
        - имя: mem_usage_avg_5m
          maxLimitPercent: 0.65
        - имя: mem_usage_max_avg_1h
          maxLimitPercent: 0.75      приоритет:
        ## использование CPU
        - имя: cpu_usage_avg_5m
          вес: 0.2
        - имя: cpu_usage_max_avg_1h
          вес: 0.3
        - имя: cpu_usage_max_avg_1d
          вес: 0.5
        ## использование памяти
        - имя: mem_usage_avg_5m
          вес: 0.2
        - имя: mem_usage_max_avg_1h
          вес: 0.3
        - имя: mem_usage_max_avg_1d
          вес: 0.5

      hotValue:
        - timeRange: 5m
          count: 5
        - timeRange: 1m
          count: 2
  1. Измените kube-scheduler.yaml и замените образ kube-scheduler на Crane-scheduler:
...
 image: docker.io/gocrane/crane-scheduler:0.0.23
...
  1. Установите crane-scheduler-controller: bash kubectl apply ./deploy/controller/rbac.yaml && kubectl apply -f ./deploy/controller/deployment.yaml

4. Расписание Pod с использованием Crane-scheduler

Проверьте Crane-scheduler с помощью следующего примера:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: cpu-stress
spec:
  selector:
    matchLabels:
      app: cpu-stress
  replicas: OnClickListener
  template:
    metadata:
      labels:
        app: cpu-stress
    spec:
      schedulerName: crane-scheduler
      hostNetwork: true
      tolerations:
      - key: node.kubernetes.io/network-unavailable
        operator: Exists
        effect: NoSchedule
      containers:
      - name: stress
        image: docker.io/gocrane/stress:latest
        command: ["stress", "-c", "1"]
        resources:
          requests:
            memory: "1Gi"
            cpu: "1"
          limits:
            memory: "1Gi"
            cpu: "1"

Примечание: Замените crane-scheduler на default-scheduler, если crane-scheduler используется как значение по умолчанию.

Если тестовый Pod успешно распределён, будет создано следующее событие:

Type    Reason     Age   From             Message
----    ------     ----  ----             -------
Normal  Scheduled  28s   crane-scheduler  Успешно назначил default/cpu-stress-7669499b57-zmrgb на vm-162-247-ubuntu

## Матрица совместимости| Версия образа планировщика | Поддерживаемая версия Kubernetes | | -------------------------- | :-------------------------------: | | 0.0.23 | >=1.22.0 | | 0.0.20 | >=1.18.0 |

По умолчанию используется версия образа планировщика 0.0.23. Для быстрой замены вы можете выполнить следующую команду:

KUBE_EDITOR="sed -i 's/v1beta2/v1beta1/g'" kubectl edit cm scheduler-config -n crane-system && KUBE_EDITOR="sed -i 's/0.0.23/0.0.20/g'" kubectl edit deploy crane-scheduler -n crane-system

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

Crane-scheduler — это набор плагинов планировщика, основанный на платформе планировщика. Развернуть Свернуть
Go и 4 других языков
Apache-2.0
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/gocrane-crane-scheduler.git
git@api.gitlife.ru:oschina-mirror/gocrane-crane-scheduler.git
oschina-mirror
gocrane-crane-scheduler
gocrane-crane-scheduler
main