支持基于真实负载的 Kubernetes 调度器

大家好,又见面了,我是 GitHub 精选君!

今天要给大家推荐一个 GitHub 开源项目 gocrane/crane-scheduler,该项目在 GitHub 有超过 100 Star,用一句话介绍该项目就是:“Crane scheduler is a Kubernetes scheduler which can schedule pod based on actual node load.”,支持基于真实负载的 Kubernetes 调度器。

crane-scheduler 是基于 Go 语言的调度器库。它主要用于企业级的分布式调度,可以帮助开发者实现任务调度、任务分配、负载均衡等功能。该项目支持多种调度策略,可以在不同的场景中进行优化。

Crane-scheduler 基于 Node-annotator 收集的 Prometheus 资源负载数据,对 Pod 进行负载均衡的调度。以下是架构图:

以下是该项目 Star 趋势图(代表项目的活跃程度):

如何安装使用

crane-scheduler 项目可以通过如下方式安装使用。

1、确保 Kubernetes 集群安装了 Prometheus

2、配置 Prometheus 规则

主要是以下数据指标的收集:

实际的 YAML 配置如下:

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])

3、安装 crane-scheduler

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

同时需要配置 Kubernetes 策略,将 crane-scheduler 作为第二调度器,具体配置方式可以参考 GitHub 上的 README。

4、对 Pod 做真实的调度测试

更多项目详情请查看如下链接。

开源项目地址:https://github.com/gocrane/crane-scheduler

开源项目作者:gocrane

以下是参与项目建设的所有成员:

关注我们,一起探索有意思的开源项目。


更多精彩请扫码关注如下公众号。

Written on January 29, 2023