Crane-scheduler — это набор плагинов планировщика, основанных на фреймворке планировщика, включая:
Убедитесь, что ваш кластер Kubernetes имеет установленный Prometheus. Если нет, обратитесь к разделу Установка 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
/etc/kubernetes/manifests/kube-scheduler.yaml
cp /etc/kubernetes/manifests/kube-scheduler.yaml /etc/kubernetes/
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
...
/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
kube-scheduler.yaml
и замените образ kube-scheduler на Crane-scheduler:...
image: docker.io/gocrane/crane-scheduler:0.0.23
...
bash kubectl apply ./deploy/controller/rbac.yaml && kubectl apply -f ./deploy/controller/deployment.yaml
Проверьте 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 )