基于 Kubernetes 实现云资源分析与成本优化平台

  • 一、基本介绍
    • 1.主要功能
    • 2.整体架构
  • 二、基于 Kubernetes 实现云资源分析与成本优化平台
    • 1.准备工作
    • 2.安装 Prometheus/Grafana 软件包
    • 3.安装 Crane 软件包
    • 4. 使用智能弹性 EffectiveHPA
    • 4.配置集群
  • 三、功能验证
    • 1.成本展示
    • 2.资源推荐
    • 3.副本数推荐
  • 四、总结

前言:

为推进云原生用户在确保业务稳定性的基础上做到真正的极致降本,腾讯云推出了国内第一个基于云原生技术的成本优化开源项目 Crane(Cloud Resource Analytics and Economics)。Crane 遵循 FinOps 标准,旨在为云原生用户提供云成本优化一站式解决方案。

一、基本介绍

Crane 是一个基于 FinOps 的云资源分析与成本优化平台。它的愿景是在保护客户应用运行质量的前提下实现极致的降本。

  • 官网地址
  • GitHub 地址

1.主要功能

1)成本可视化和优化评估

  • 提供一组 Exporter 计算集群云资源的计费和账单数据并存储到你的监控系统,比如 Prometheus。
  • 多维度的成本洞察,优化评估。通过 Cloud Provider 支持多云计费。

2)推荐框架

  • 提供了一个可扩展的推荐框架以支持多种云资源的分析,内置了多种推荐器:资源推荐,副本推荐,HPA 推荐,闲置资源推荐。

3)基于预测的水平弹性器

  • EffectiveHorizontalPodAutoscaler 支持预测驱动的弹性;
  • 基于社区的 HPA 做底层的弹性控制,支持更丰富的弹性触发策略(预测,观测,周期),让弹性更加高效,并保障了服务的质量。

4)负载感知的调度器

  • 动态调度器根据实际的节点利用率构建了一个简单但高效的模型,并过滤掉那些负载高的节点来平衡集群。

5)拓扑感知的调度器

  • Crane SchedulerCrane Agent 配合工作,支持更为精细化的资源拓扑感知调度和多种绑核策略,使得资源得到更合理高效的利用。

6)基于 QOS 的混部

  • QOS 相关能力保证了运行在 Kubernetes 上的 Pod 的稳定性。
  • 具有多维指标条件下的干扰检测和主动回避能力,支持精确操作和自定义指标接入;
  • 具有预测算法增强的弹性资源超卖能力,复用和限制集群内的空闲资源;
  • 具备增强的旁路 cpuset 管理能力,在绑核的同时提升资源利用效率。

2.整体架构

Crane 的整体架构如下:


Craned 是 Crane 的最核心组件,它管理了 CRDs 的生命周期以及 API。 Craned 通过 Deployment 方式部署且由两个容器组成:

  • Craned:运行了 Operators 用来管理 CRDs,向 Dashboard 提供了 WebAPI,Predictors 提供了 TimeSeries API;
  • Dashboard:基于 TDesign’s Starter 脚手架研发的前端项目,提供了易于上手的产品功能。

Fadvisor 提供一组 Exporter 计算集群云资源的计费和账单数据并存储到你的监控系统, 比如 Prometheus。

  • Fadvisor 通过 Cloud Provider 支持了多云计费的 API。

Metric Adapter 实现了一个 Custom Metric Apiserver

  • Metric Adapter 读取 CRDs 信息并提供基于 Custom/External Metric API 的 HPA Metric 的数据。

  • Crane Agent 通过 DaemonSet 部署在集群的节点上。

二、基于 Kubernetes 实现云资源分析与成本优化平台

1.准备工作

  • Kubernetes 1.16+:二进制安装传送门
  • Helm 3.7+

1)安装 Helm

[root@k8s-master01 ~]# wget https://get.helm.sh/helm-v3.7.2-linux-amd64.tar.gz
[root@k8s-master01 ~]# tar zxf helm-v3.7.2-linux-amd64.tar.gz
[root@k8s-master01 ~]# mv linux-amd64/helm /usr/local/bin
[root@k8s-master01 ~]# helm version
version.BuildInfo{Version:"v3.7.2", GitCommit:"663a896f4a815053445eec4153677ddc24a0a361", GitTreeState:"clean", GoVersion:"go1.16.10"}

2.安装 Prometheus/Grafana 软件包

1)安装 Prometheus

[root@k8s-master01 ~]# helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
[root@k8s-master01 ~]# helm install prometheus -n crane-system --version 19.6.1 \
--set pushgateway.enabled=false \
--set alertmanager.enabled=false \
--set server.persistentVolume.enabled=false \
-f https://raw.githubusercontent.com/gocrane/helm-charts/main/integration/prometheus/override_values.yaml \
--create-namespace  prometheus-community/prometheus

2)安装 Grafana

[root@k8s-master01 ~]# helm repo add grafana https://grafana.github.io/helm-charts
[root@k8s-master01 ~]# helm install grafana --version 6.11.0 \
-f https://raw.githubusercontent.com/gocrane/helm-charts/main/integration/grafana/override_values.yaml \
-n crane-system \
--create-namespace grafana/grafana

3.安装 Crane 软件包

1)安装 Crane 和 Fadvisor

[root@k8s-master01 ~]# helm repo add crane https://gocrane.github.io/helm-charts
[root@k8s-master01 ~]# helm install crane -n crane-system --create-namespace crane/crane
[root@k8s-master01 ~]# helm install fadvisor -n crane-system --create-namespace crane/fadvisor

2)验证安装是否成功

[root@k8s-master01 ~]# kubectl get pod,deploy -n crane-system


3)修改 Craned 服务的 ConfigMap 配置,调整反向代理的地址

[root@k8s-master01 ~]# kubectl get service craned -n crane-system -o yaml > 1.yaml
[root@k8s-master01 ~]# sed -i 's/type: ClusterIP/type: NodePort/g' 1.yaml
[root@k8s-master01 ~]# sed -i '/targetPort: 9090/a\    nodePort: 30080' 1.yaml
[root@k8s-master01 ~]# kubectl apply -f 1.yaml
[root@k8s-master01 ~]# kubectl edit cm nginx-conf -n crane-system
:%s/craned.crane-system:8082/127.0.0.1:8082/g[root@k8s-master01 ~]# kubectl get pod -n crane-system | awk '/^craned/{print $1}' | xargs kubectl delete pod -n crane-system
  • 因为 Dashboard 和 Craned 服务都在同一个 Pod 里,而 Dashboard 容器是通过 Service 加端口的方式代理到 Craned 服务上的;
  • 但是 Pod 并不能直接通过 Service 加 端口的方式访问到本身,所以我们这里通过 127.0.0.1(Lo)的方式进行代理。

4. 使用智能弹性 EffectiveHPA

Kubernetes HPA 支持了丰富的弹性扩展能力,Kubernetes 平台开发者部署服务实现自定义 Metric 的服务,Kubernetes 用户配置多项内置的资源指标或者自定义 Metric 指标实现自定义水平弹性。


EffectiveHorizontalPodAutoscaler(简称 EHPA)是 Crane 提供的弹性伸缩产品,它基于社区 HPA 做底层的弹性控制,支持更丰富的弹性触发策略(预测,观测,周期),让弹性更加高效,并保障了服务的质量。

  • 提前扩容,保证服务质量: 通过算法预测未来的流量洪峰提前扩容,避免扩容不及时导致的雪崩和服务稳定性故障。
  • 减少无效缩容: 通过预测未来可减少不必要的缩容,稳定工作负载的资源使用率,消除突刺误判。
  • 支持 Cron 配置: 支持 Cron-based 弹性配置,应对大促等异常流量洪峰。
  • 兼容社区: 使用社区 HPA 作为弹性控制的执行层,能力完全兼容社区。

1)安装 Metrics Server

[root@k8s-master01 ~]# wget https://github.com/kubernetes-sigs/metrics-server/releases/download/v0.6.3/components.yaml
[root@k8s-master01 ~]# sed -i '/- args:/a\        - --metric-resolution=15s' components.yaml
[root@k8s-master01 ~]# sed -i 's@image:.*@image: docker.io/gocrane/metrics-server:v0.6.3@g' components.yaml
[root@k8s-master01 ~]# kubectl apply -f components.yaml

2)创建测试应用

[root@k8s-master01 ~]# kubectl apply -f https://raw.githubusercontent.com/gocrane/crane/main/examples/autoscaling/php-apache.yaml
[root@k8s-master01 ~]# kubectl apply -f https://raw.githubusercontent.com/gocrane/crane/main/examples/analytics/nginx-deployment.yaml

3)创建 EffectiveHPA

[root@k8s-master01 ~]# kubectl apply -f https://raw.githubusercontent.com/gocrane/crane/main/examples/autoscaling/effective-hpa.yaml


4)增加负载,查看应用是否能够正常扩容

[root@k8s-master01 ~]# kubectl run -i --tty load-generator --rm --image=busybox:1.28.4 --restart=Never -- /bin/sh -c "while sleep 0.01; do wget -q -O- http://php-apache; done"


  • 可以看到随着请求增多,CPU 利用率会不断提升,通过 EffectiveHPA 会自动扩容实例。

4.配置集群

访问:http://192.168.1.1:30080

三、功能验证

1.成本展示

Crane Dashboard 提供了各式各样的图表展示了集群的成本和资源用量。

2.资源推荐


Kubernetes 用户在创建应用资源时常常是基于经验值来设置 requestlimit,通过资源推荐的算法分析应用的真实用量推荐更合适的资源配置,你可以参考并采纳它提升集群的资源利用率。该推荐算法模型采用了 VPA 的滑动窗口(Moving Window)算法进行推荐:

  • 通过监控数据,获取 Workload 过去一周(可配置)的 CPU 和内存的历史用量。
  • 算法考虑数据的时效性,较新的数据采样点会拥有更高的权重。
  • CPU 推荐值基于用户设置的目标百分位值计算,内存推荐值基于历史数据的最大值。

1)使用资源推荐

3.副本数推荐

Kubernetes 用户在创建应用资源时常常是基于经验值来设置副本数。通过副本数推荐的算法分析应用的真实用量推荐更合适的副本配置,同样可以参考并采纳它提升集群的资源利用率。

其实现的基本算法是基于工作负载历史 CPU 负载,找到过去七天内每小时负载最低的 CPU 用量,计算按 50%(可配置)利用率和工作负载 CPU Request 应配置的副本数。



四、总结

整体操作体验下来,安装相对比较简单,通过使用 Helm 工具实现便捷安装。安装完成后,便可以通过提供的 Dashboard 面板来进行访问。界面简单明了,易上手,同时在功能层面上实现了实时监控成本、应用资源使用量、资源推荐、智能弹性等功能。

  • 实时监控成本:Crane 提供每小时、每天、每周和每月的费用概览,并且可以按集群、命名空间和工作负载分解成本。
  • 资源监控:通过调用 Prometheus 和 Grafana 实现资源监控以及可视化 UI。
  • 资源推荐:使用 VPA 算法模型,先分析出应用的真实用量,再通过计算得出应用的最佳资源配置。
  • 智能弹性:基于社区 HPA 做底层的弹性控制,支持更加丰富的弹性触发策略,让弹性更加高效,并保证服务的质量。

因此,我们可以通过 Crane 服务提供的成本计算、资源使用率,以及上述功能,来观察是否需要对云服务器进行资源扩容或减配。避免出现资源不足或资源浪费的情况,达到真正意义上的降本增效。


关于腾讯云 Finops Crane 集训营:

Finops Crane集训营主要面向广大开发者,旨在提升开发者在容器部署、K8s 层面的动手实践能力,同时吸纳 Crane 开源项目贡献者,鼓励开发者提交 issuebug 反馈等,并搭载线上直播、动手实验组队、有奖征文等系列技术活动。既能让开发者通过活动对 Finops Crane 开源项目有深入了解,同时也能帮助广大开发者在云原生技能上有实质性收获。

为奖励开发者,我们特别设立了积分获取任务和对应的积分兑换礼品。

  • 活动介绍送门:https://marketing.csdn.net/p/038ae30af2357473fc5431b63e4e1a78
  • 开源项目: https://github.com/gocrane/crane

【腾讯云 Finops Crane 集训营】基于 Kubernetes 实现云资源分析与成本优化平台相关推荐

  1. 【腾讯云 Finops Crane 集训营】降本增效利器Crane应用实战

    文章目录 前言 一.Crane是什么? 二.Crane的特点 三.Crane使用 1.环境准备 安装 kubectl 安装 Helm 安装 kind 安装 Docker 2.安装Crane 3.访问d ...

  2. 【腾讯云 Finops Crane 集训营】深入了解 Crane 开源项目,集训营实验操作指南,体验过程总结

    前言 最近有幸参与了腾讯云举办的Finops Crane的集训营.在这个过程中,老师认真指导,让我受益非浅,也让我真正理解了这一产品所带来的意义. 在听了老师们的介绍和讲解后,我马不停蹄地开始了自己摸 ...

  3. 【腾讯云 Finops Crane 集训营】降本增效?学会 Crane,就够了

    随着云原生技术的发展,越来越多的公司正在选择将应用运行在云上或者自建的 Kubernetes 集群上,但是许多机构的调研发现,绝大多数的用户集群资源利用率并不高,浪费严重.本文就带大家来了解Crane ...

  4. 【腾讯云 Finops Crane集训营】Finops Crane究竟能为我们带来什么价值和思考?深入探究Crane

    目录 前言 一.Crane目的是什么? 二.Crane有哪些功能? 1.成本可视化和优化评估 2.推荐框架 3.基于预测的水平弹性器 4.负载感知的调度器 5.拓扑感知的调度器 6.基于 QOS 的混 ...

  5. 【腾讯云 Finops Crane 集训营】学习云原生成本优化

    目录 开篇 介绍 搭建环境 第一步 第二步 第三步 添加集群 成本洞察 成本分析 资源推荐与副本数 智能预测与自动扩缩容 EHPA 安装Metrics Server 创建测试应用 创建 Effecti ...

  6. 【腾讯云 Finops Crane 集训营】 如何在Windows上快速搭建一个Kubernetes+Crane 环境及应用

    一.前言 个人主页: ζ小菜鸡 大家好我是ζ小菜鸡,让我们一起学习在 Windows 如何快速搭建一个Kubernetes+Crane 环境及应用. 如果文章对你有帮助.欢迎关注.点赞.收藏(一键三连 ...

  7. 【腾讯云FinOps Crane 集训营】让我看看还有谁没用过crane这个降本利器

    近几年云原生概念的发展如雨后春笋,势如破竹,而devops和k8s(Kubernetes)两兄弟也搭上云原生的车先后火了起来 devops:如字面意思Development&Operation ...

  8. 【腾讯云 Finops Crane 集训营】安装使用及EHPA弹性演示

    随着时间的推移,降本增效成为了企业界和组织中的一个新口号.在2023年,这个口号进一步获得了广泛的认可和重要性,成为了许多组织在业务运营中的关键目标.在2023年,许多组织开始将降本增效作为战略性目标 ...

  9. 【腾讯云 Finops Crane 集训营】Finops Crane-英雄之剑

    形势所迫 随着云原生技术的不断发展,越来越多的企业选择将应用程序部署在云上或自建的 Kubernetes 集群上.然而,许多研究表明,大多数用户的集群资源利用率并不高,存在严重的浪费现象.为了解决这个 ...

最新文章

  1. 第三十三讲 非线性方程组化为一阶方程
  2. 【译】Jumping into Solidity —The ERC721 Standard (Part 1)
  3. (待解决!)jmx在PetClinic中的应用
  4. Recursive sequence HDU - 5950 (递推 矩阵快速幂优化)
  5. zabbix server下数据库日志报错
  6. bzoj 2560: 串珠子【状压dp】
  7. UVALive - 7147 (数学)
  8. 显示器显示颜色差,导致BUG一例
  9. java+oracle+ojdbc14_请教:使用ojdbc5.jar作为驱动jar包无法正常连接oracle数据库,而使用ojdbc14.jar却可以正常连接?...
  10. 教师资格证考试攻略(高中信息技术)
  11. 四川计算机专业高职高考,四川职高计算机专业分数线
  12. 国外最流行的Bootstrap后台管理模板
  13. 骆昊python100天 github_GitHub - Greatandy/Python-100-Days: Python - 100天从新手到大师
  14. Flash使用到数学、物理的公式
  15. 其实真正的互联网公司是很少的很少
  16. android 解析json 日期格式,如何将JSON格式的日期字符串解析为日期格式
  17. php3d按钮,css3实现3D按钮效果的文章推荐
  18. 二叉树遍历的浅显解释纯干货
  19. 论三元九运和二元八运
  20. 开源阅读书源_超强小说阅读软件

热门文章

  1. C++基础:new的三种形式详解
  2. (四)裸机s5pv210之串口通信详解
  3. 电源常用LDO线性稳压IC大全!
  4. 计算机毕业设计(附源码)python政府机关门禁管理系统
  5. JSON和SAP内表转化
  6. vf6.0计算机应用考试,vf期末考试题库含答案
  7. Python之模块增加到site-packages
  8. 看漫画学python ——第1章 python入门
  9. 怎样才能补办北京牌照
  10. 05-树8 File Transfer(并查集)