Project Icon

krr

基于历史数据优化Kubernetes资源分配工具

KRR是一款优化Kubernetes集群资源分配的命令行工具。通过分析Prometheus中的Pod使用数据,KRR为CPU和内存提供适当的请求和限制建议,有助于降低成本和提高性能。该工具无需安装额外Agent,支持多种数据源,并提供可扩展的推荐策略。KRR还通过免费SaaS平台提供可视化解释,帮助用户了解资源使用情况。根据研究,使用KRR可能节省高达69%的云计算成本。

![产品名称屏幕截图][product-screenshot]

基于历史数据的Kubernetes资源建议

基于Prometheus/Coralogix/Thanos/Mimir等现有数据获取建议!

安装 . KRR工作原理 . Slack集成 . 免费KRR UI
使用 · 报告Bug · 请求功能 · 支持
喜欢KRR吗?请给这个仓库⭐来表示您的支持!

关于项目

Robusta KRR (Kubernetes资源推荐器)是一个用于优化Kubernetes集群资源分配的CLI工具。它从Prometheus收集Pod使用数据,并为CPU和内存推荐请求和限制。这降低了成本并提高了性能

数据集成

用于向KRR发送数据

查看说明:PrometheusThanosVictoria MetricsGoogle管理的PrometheusAmazon管理的PrometheusAzure管理的PrometheusCoralogixGrafana CloudGrafana Mimir

报告集成

用于从KRR接收信息

查看说明:在UI中查看建议将建议发送到Slack将KRR设置为k9s插件

特性

  • 无需代理:在本地机器上运行CLI工具即可立即获得结果。(或在集群内运行以获得每周Slack报告。)
  • Prometheus集成:基于您已有的数据获取建议
  • 可解释性通过解释图表理解建议的计算方式
  • 可扩展策略:轻松创建和使用您自己的资源建议计算策略。
  • 免费SaaS平台:使用免费的Robusta SaaS平台了解KRR为什么会做出这样的建议。
  • 未来支持:即将推出的版本将支持自定义资源(如GPU)和自定义指标。

使用KRR可以节省多少?

根据最近的Sysdig研究,平均而言,Kubernetes集群有:

  • 69%未使用的CPU
  • 18%未使用的内存

通过使用KRR调整容器大小,您可以平均节省69%的云成本。

阅读更多关于KRR如何工作的内容

与Kubernetes VPA的区别

功能 🛠️Robusta KRR 🚀Kubernetes VPA 🌐
资源建议 💡✅ CPU/内存请求和限制✅ CPU/内存请求和限制
安装位置 🌍✅ 不需要安装在集群内,可以在您自己的设备上使用,连接到集群❌ 必须安装在集群内
工作负载配置 🔧✅ 无需为每个工作负载配置VPA对象❌ 需要为每个工作负载配置VPA对象
即时结果 ⚡✅ 立即获得结果(如果Prometheus正在运行)❌ 需要时间收集数据并提供建议
报告 📊✅ Json、CSV、Markdown、Web UI❌ 不支持
可扩展性 🔧✅ 用几行Python代码添加自己的策略:warning: 有限的可扩展性
可解释性 📖查看解释建议的图表❌ 不支持
自定义指标 📏🔄 未来版本支持❌ 不支持
自定义资源 🎛️🔄 未来版本支持(如GPU)❌ 不支持
自动缩放 🔀🔄 未来版本支持✅ 自动应用建议
默认历史 🕒14天8天
支持HPA 🔥✅ 使用--allow-hpa标志启用❌ 不支持

安装

要求

KRR需要Prometheus 2.26+、kube-state-metricscAdvisor

KRR需要哪些指标? 如果您使用kube-prometheus-stack或Robusta的嵌入式Prometheus,则无需设置。

如果您有不同的设置,请确保存在以下指标:

  • container_cpu_usage_seconds_total
  • container_memory_working_set_bytes
  • kube_replicaset_owner
  • kube_pod_owner
  • kube_pod_status_phase 注意: 如果最后三个指标中有一个缺失,KRR 仍然可以工作,但它在计算建议时只会考虑当前正在运行的 pod。历史上已不存在于集群中的 pod 将不会被考虑在内。

安装方法

Brew (Mac/Linux)
  1. 添加我们的 tap:
brew tap robusta-dev/homebrew-krr
  1. 安装 KRR:
brew install krr
  1. 检查安装是否成功:
krr --help
  1. 运行 KRR (首次启动可能需要稍长时间):
krr simple
Windows

您可以在 WSL2 上使用 brew 安装(见上文),或从源代码安装(见下文)。

离线安装(无网络环境)

您可以从 Releases 下载预构建的二进制文件,或使用预构建的 Docker 容器。例如,版本 1.8.3 的容器是:

us-central1-docker.pkg.dev/genuine-flight-317411/devel/krr:v1.8.3

我们不建议在离线环境中从源代码安装 KRR,因为安装 Python 依赖项会很麻烦。请使用上述方法之一,如果需要帮助,请通过 Slack、GitHub issues 或电子邮件与我们联系。

从源代码安装
  1. 确保您已安装 Python 3.9 (或更高版本)
  2. 克隆仓库:
git clone https://github.com/robusta-dev/krr
  1. 进入项目根目录 (cd ./krr)
  2. 安装依赖:
pip install -r requirements.txt
  1. 运行工具:
python krr.py --help

请注意,使用源代码需要您以 Python 脚本方式运行,而使用 brew 安装允许直接运行 krr。 上面所有示例都显示运行命令为 krr ...,如果您使用手动安装,请将其替换为 python krr.py ...

其他选项

特定环境说明

为以下环境设置 KRR...

(返回顶部)

Robusta SaaS 平台上的免费 KRR UI

我们强烈建议使用 免费的 Robusta SaaS 平台。您可以:

  • 通过应用使用历史了解单个应用的建议

  • 按命名空间、优先级等对建议进行排序和筛选

  • 为开发人员提供 YAML 片段以修复 KRR 发现的问题

  • 使用 KRR 扫描历史分析影响

使用方法

基本用法
krr simple
调整推荐算法(策略)

最有用的标志:

  • --cpu-min 设置推荐的最小 CPU 值(以毫核为单位)
  • --mem-min 设置推荐的最小内存值(以 MB 为单位)
  • --history_duration 使用的 Prometheus 历史数据的持续时间(以小时为单位)

可以使用以下命令查看有关策略设置的更多具体信息:

krr simple --help
提供明确的 Prometheus URL

如果您的 Prometheus 没有自动连接,您可以使用 kubectl port-forward 手动转发 Prometheus。

例如,如果您有一个名为 kube-prometheus-st-prometheus-0 的 Prometheus Pod,则运行此命令进行端口转发:

kubectl port-forward pod/kube-prometheus-st-prometheus-0 9090

然后,打开另一个终端并在其中运行 krr,提供明确的 Prometheus url:

krr simple -p http://127.0.0.1:9090
在特定命名空间上运行

使用 -n 列出您想要的任意多个命名空间(在本例中为 defaultingress-nginx)

krr simple -n default -n ingress-nginx

参见 ServiceAccount 和 RBAC 权限示例

在按标签过滤的工作负载上运行

使用 标签选择器

python krr.py simple --selector 'app.kubernetes.io/instance in (robusta, ingress-nginx)'
覆盖 kubectl 上下文

默认情况下,krr 将在当前上下文中运行。如果您想在不同的上下文中运行它:

krr simple -c my-cluster-1 -c my-cluster-2
用于报告的输出格式(JSON、YAML、CSV 等)

目前,KRR 提供了几种格式化程序来表示扫描数据:

  • table - 默认使用的漂亮的 CLI 表格,由 Rich 库提供支持
  • json
  • yaml
  • pprint - 来自 Python pprint 库的数据表示
  • csv - 将数据导出到当前目录中的 csv 文件

要使用选定的格式化程序运行策略,请添加 -f 标志。通常应该与 --fileoutput <filename> 结合使用,以将干净的输出写入文件而不包含日志:

krr simple -f json --fileoutput krr-report.json

如果您愿意,也可以使用 --logtostderr 将格式化的输出放在一个文件中,将错误日志放在另一个文件中:

krr simple --logtostderr -f json > result.json 2> logs-and-errors.log
中央化 Prometheus(多集群)

请参阅下面关于过滤中央化 Prometheus 输出以匹配单个集群的内容

Prometheus 认证

KRR 支持 Prometheus、VictoriaMetrics、Coralogix 和其他兼容 Prometheus 的指标存储的所有已知认证方案。

请参考 krr simple --help,并查看标志 --prometheus-url--prometheus-auth-header--prometheus-headers --prometheus-ssl-enabled--coralogix-token 以及各种 --eks-* 标志。

如果您需要帮助,请通过 Slack、电子邮件或打开 GitHub issue 与我们联系。

调试模式 如果您想查看额外的调试日志:
krr simple -v

(返回顶部)

KRR 的工作原理

指标收集

Robusta KRR 使用以下 Prometheus 查询来收集使用数据:

  • CPU 使用率:
sum(irate(container_cpu_usage_seconds_total{{namespace="{object.namespace}", pod="{pod}", container="{object.container}"}}[{step}]))
  • 内存使用:
sum(container_memory_working_set_bytes{job="kubelet", metrics_path="/metrics/cadvisor", image!="", namespace="{object.namespace}", pod="{pod}", container="{object.container}"})

需要自定义指标吗?告诉我们,我们会添加支持。

Robusta SaaS上免费获取KRR建议的详细分析。

算法

默认情况下,我们使用一个简单的策略来计算资源建议。计算方法如下(具体数值可以通过CLI参数自定义):

  • 对于CPU,我们将请求设置在第95百分位,不设限制。这意味着在95%的情况下,您的CPU请求将足够。对于剩下的5%,我们不设限制。这意味着您的pod可以突发使用节点上任何可用的CPU - 例如其他pod请求但当前未使用的CPU。

  • 对于内存,我们取过去一周的最大值并添加15%的缓冲。

Prometheus连接

了解KRR如何尝试找到默认Prometheus进行连接,请点击这里

(回到顶部)

数据源集成

Prometheus、Victoria Metrics和Thanos自动发现

默认情况下,KRR将尝试自动发现正在运行的Prometheus、Victoria Metrics和Thanos。 对于发现Prometheus,它会扫描具有以下标签的服务:

"app=kube-prometheus-stack-prometheus"
"app=prometheus,component=server"
"app=prometheus-server"
"app=prometheus-operator-prometheus"
"app=rancher-monitoring-prometheus"
"app=prometheus-prometheus"

对于Thanos,使用这些标签:

"app.kubernetes.io/component=query,app.kubernetes.io/name=thanos",
"app.kubernetes.io/name=thanos-query",
"app=thanos-query",
"app=thanos-querier",

对于Victoria Metrics,使用以下标签:

"app.kubernetes.io/name=vmsingle",
"app.kubernetes.io/name=victoria-metrics-single",
"app.kubernetes.io/name=vmselect",
"app=vmselect",

如果这些标签都无法找到Prometheus、Victoria Metrics或Thanos,您将收到一个错误,并且需要明确传递有效的URL(使用-p标志)。

(回到顶部)

使用中央化Prometheus进行扫描

如果您的Prometheus监控多个集群,我们需要您在Prometheus中为集群定义的标签。

例如,如果您的集群具有Prometheus标签cluster: "my-cluster-name",则运行以下命令:

krr.py simple --prometheus-label cluster -l my-cluster-name

您可能还需要使用-p标志来明确提供Prometheus的URL。

Azure托管Prometheus

对于Azure托管Prometheus,您需要生成一个访问令牌,可以通过运行以下命令来完成:

# 如果您尚未登录Azure,请取消注释以下行
# az login
AZURE_BEARER=$(az account get-access-token --resource=https://prometheus.monitor.azure.com  --query accessToken --output tsv); echo $AZURE_BEARER

然后运行以下命令,将PROMETHEUS_URL替换为您的Azure托管Prometheus URL:

python krr.py simple --namespace default -p PROMETHEUS_URL --prometheus-auth-header "Bearer $AZURE_BEARER"

点击此处了解如何为中央化Prometheus配置标签

(回到顶部)

Google托管Prometheus (GMP)

请在这里查看详细的GMP使用说明

(回到顶部)

Amazon托管Prometheus

对于Amazon托管Prometheus,您需要添加Prometheus链接和标志--eks-managed-prom,krr将自动使用您的aws凭证

python krr.py simple -p "https://aps-workspaces.REGION.amazonaws.com/workspaces/..." --eks-managed-prom

其他可选参数包括:

--eks-profile-name PROFILE_NAME_HERE # 指定要使用的配置文件
--eks-access-key ACCESS_KEY # 指定您的访问密钥
--eks-secret-key SECRET_KEY # 指定您的秘密密钥
--eks-service-name SERVICE_NAME # 在签名中使用特定的服务名称
--eks-managed-prom-region REGION_NAME # 指定Prometheus所在的区域

点击此处了解如何为中央化Prometheus配置标签

(回到顶部)

Coralogix托管Prometheus

对于Coralogix托管Prometheus,您需要指定Prometheus链接并添加标志coralogix_token,其中包含您的日志查询密钥

python krr.py simple -p "https://prom-api.coralogix..." --coralogix_token

点击此处了解如何为中央化Prometheus配置标签

(回到顶部)

Grafana Cloud托管Prometheus

对于Grafana Cloud托管Prometheus,您需要指定Prometheus链接、Prometheus用户和Grafana Cloud堆栈的访问令牌。可以在Grafana Cloud门户上找到堆栈的Prometheus链接和用户。还可以使用同一门户上的访问策略创建具有metrics:read范围的访问令牌。

接下来,运行以下命令,将PROM_URL、PROM_USER和PROM_TOKEN变量的值设置为您的Grafana Cloud堆栈的Prometheus链接、Prometheus用户和访问令牌。

python krr.py simple -p $PROM_URL --prometheus-auth-header "Bearer ${PROM_USER}:${PROM_TOKEN}" --prometheus-ssl-enabled

点击此处了解如何为中央化Prometheus配置标签

(回到顶部)

Grafana Mimir自动发现

默认情况下,KRR将尝试自动发现正在运行的Grafana Mimir。

为了发现Prometheus,它会扫描具有以下标签的服务:

  "app.kubernetes.io/name=mimir,app.kubernetes.io/component=query-frontend"

(回到顶部)

集成

KRR建议的免费UI

我们强烈建议使用免费的Robusta SaaS平台。您可以:

  • 通过应用使用历史了解单个应用的建议
  • 按命名空间、优先级等对建议进行排序和过滤
  • 为开发人员提供YAML片段以修复KRR发现的问题
  • 使用KRR扫描历史分析影响
Slack 通知

让成本节省自动化。获取关于超过 X% 的建议的 Slack 通知。发送每周全局报告,或每个团队一份报告。

![Slack 截图][slack-screenshot]

先决条件

  • 一个 Slack 工作区

设置

  1. 使用 Helm 在集群中安装 Robusta 并配置 Slack
  2. 通过在 generated_values.yaml 中添加以下内容来创建您的 KRR Slack playbook:
customPlaybooks:
# 每周对 devs-namespace 命名空间运行一次 krr 扫描,并将结果发送到配置的 Slack 频道
customPlaybooks:
- triggers:
  - on_schedule:
      fixed_delay_repeat:
        repeat: -1 # 运行次数,-1 表示永久运行
        seconds_delay: 604800 # 1 周
  actions:
  - krr_scan:
      args: "--namespace devs-namespace" ## 在此处填写 KRR 参数
  sinks:
      - "main_slack_sink" # 在此处填写您想要发送报告的 Slack sink
  1. 执行 Helm 升级以应用新的值:helm upgrade robusta robusta/robusta --values=generated_values.yaml --set clusterName=<YOUR_CLUSTER_NAME>

(返回顶部)

k9s 插件

安装我们的 k9s 插件,直接在 deployments/daemonsets/statefulsets 视图中获取建议。

插件:resource recommender

安装说明:k9s 文档

创建自定义策略/格式化器

查看 examples 目录,了解如何创建自定义策略/格式化器的示例。

(返回顶部)

测试

我们使用 pytest 运行测试。

  1. 手动安装项目(参见上文)
  2. 导航到项目根目录
  3. 安装 poetry(https://python-poetry.org/docs/#installing-with-the-official-installer)
  4. 安装开发依赖:
poetry install --group dev
  1. 以可编辑依赖方式安装 robusta_krr:
pip install -e .
  1. 运行测试:
poetry run pytest

(返回顶部)

贡献

贡献是使开源社区成为学习、激励和创造的绝佳场所的原因。我们非常感谢您做出的任何贡献。

如果您有让这个项目变得更好的建议,请 fork 该仓库并创建一个 pull request。您也可以简单地开启一个带有"enhancement"标签的 issue。 别忘了给项目点个 star!再次感谢!

  1. Fork 项目
  2. 创建您的特性分支(git checkout -b feature/AmazingFeature
  3. 提交您的更改(git commit -m 'Add some AmazingFeature'
  4. 推送到分支(git push origin feature/AmazingFeature
  5. 开启一个 Pull Request

(返回顶部)

许可证

根据 MIT 许可证分发。有关更多信息,请参阅 LICENSE.txt

(返回顶部)

支持

如果您有任何问题,请随时联系 support@robusta.dev 或在 robustacommunity.slack.com 上给我们发消息

(返回顶部)

项目侧边栏1项目侧边栏2
推荐项目
Project Cover

豆包MarsCode

豆包 MarsCode 是一款革命性的编程助手,通过AI技术提供代码补全、单测生成、代码解释和智能问答等功能,支持100+编程语言,与主流编辑器无缝集成,显著提升开发效率和代码质量。

Project Cover

AI写歌

Suno AI是一个革命性的AI音乐创作平台,能在短短30秒内帮助用户创作出一首完整的歌曲。无论是寻找创作灵感还是需要快速制作音乐,Suno AI都是音乐爱好者和专业人士的理想选择。

Project Cover

有言AI

有言平台提供一站式AIGC视频创作解决方案,通过智能技术简化视频制作流程。无论是企业宣传还是个人分享,有言都能帮助用户快速、轻松地制作出专业级别的视频内容。

Project Cover

Kimi

Kimi AI助手提供多语言对话支持,能够阅读和理解用户上传的文件内容,解析网页信息,并结合搜索结果为用户提供详尽的答案。无论是日常咨询还是专业问题,Kimi都能以友好、专业的方式提供帮助。

Project Cover

阿里绘蛙

绘蛙是阿里巴巴集团推出的革命性AI电商营销平台。利用尖端人工智能技术,为商家提供一键生成商品图和营销文案的服务,显著提升内容创作效率和营销效果。适用于淘宝、天猫等电商平台,让商品第一时间被种草。

Project Cover

吐司

探索Tensor.Art平台的独特AI模型,免费访问各种图像生成与AI训练工具,从Stable Diffusion等基础模型开始,轻松实现创新图像生成。体验前沿的AI技术,推动个人和企业的创新发展。

Project Cover

SubCat字幕猫

SubCat字幕猫APP是一款创新的视频播放器,它将改变您观看视频的方式!SubCat结合了先进的人工智能技术,为您提供即时视频字幕翻译,无论是本地视频还是网络流媒体,让您轻松享受各种语言的内容。

Project Cover

美间AI

美间AI创意设计平台,利用前沿AI技术,为设计师和营销人员提供一站式设计解决方案。从智能海报到3D效果图,再到文案生成,美间让创意设计更简单、更高效。

Project Cover

稿定AI

稿定设计 是一个多功能的在线设计和创意平台,提供广泛的设计工具和资源,以满足不同用户的需求。从专业的图形设计师到普通用户,无论是进行图片处理、智能抠图、H5页面制作还是视频剪辑,稿定设计都能提供简单、高效的解决方案。该平台以其用户友好的界面和强大的功能集合,帮助用户轻松实现创意设计。

投诉举报邮箱: service@vectorlightyear.com
@2024 懂AI·鲁ICP备2024100362号-6·鲁公网安备37021002001498号