腾讯云 Finops Crane 开发者集训营 - 云原生如何助力企业搞定成本优化

2023-11-19

引言:

随着docker的技术普及,越来越多的企业加入了云计算发展进程,云原生产业发展迅猛,云原生建设投入比例明显,面对大规模的集群投入、部署、维护等问题也逐渐产生,越来越多的企业对云原生不断提出更高要求,同时云原生技术简化运维的效能提 升开始显著,但深化应用后的测试投入开始攀升。

如今,云原生技术和理念正在不断外延和丰富,越来越多的企业正在基于云原生技术,构建适应业务快速发展的技术架构和绿色可持续发展模式。在此背景下,腾讯云推出了国内首个基于云原生技术的降本增效开源平台——FinOps Crane。

FinOps定义了一系列云财务管理规则和最佳实践,强调通过数据驱动的方式,进行成本决策,使组织能够获得最大收益;腾讯云基于 FinOps 打造云资源分析与成本优化平台Crane,Crane 支持多云成本观测,优化预期测算,浪费看板以及资源优化能力,帮助分布式云架构下的云客户降本。

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

当前 Crane 项目主要贡献者包括有腾讯、小红书、谷歌、eBay、微软、特斯拉等知名公司的行业专家。


一、Crane:

腾讯云云原生成本优化平台FinOps Crane荣获“云计算中心科技奖卓越奖”,成为国内首个获得该国家级奖项的云原生工具

Crane 是国内第一个基于云原生技术的成本优化开源项目,遵循 FinOps 标准,旨在为云原生用户提供云成本优化一站式解决方案。

  1. FinOps与Crane关系:

在这里插入图片描述
FinOps 定义了一系列云财务管理规则和最佳实践等的方法论,腾讯开源了一个成本优化项目Crane,腾讯的云原生降本增效最佳实践是基于 FinOps 框架开展的。

2.Crane能力模型:

在这里插入图片描述

那能帮忙我们解决哪些业务的痛点呢?

  • 预测为王
    • 可扩展的预测算法
    • 针对大量离线指标数据评估预测算法准确性
    • 资源利用率报表
    • 避免云计算收入的失控
  • 优化为本
    • 计费方式推荐
    • 识别资源浪费
    • 优化云的应用和老本效率
    • 推动财务问责制和可见性
  • 稳定性为根
    • 异常识别
    • 识别资源浪费
    • 为跨组织的信赖及合作赋能
    • 减速商业价值的实现及业务翻新
  1. Crane有哪些功能:
    在这里插入图片描述
  • 成本可视化和优化评估
3. 提供一组 Exporter 计算集群云资源的计费和账单数据并存储到你的监控系统,比如 Prometheus。
4. 多维度的成本洞察,优化评估。通过 Cloud Provider 支持多云计费。
  • 推荐框架
1. 提供了一个可扩展的推荐框架以支持多种云资源的分析
2. 内置了多种推荐器:资源推荐,副本推荐,HPA 推荐,闲置资源推荐。
  • 基于预测的水平弹性器
1. EffectiveHorizontalPodAutoscaler 支持了预测驱动的弹性。
2. 它基于社区 HPA 做底层的弹性控制,支持更丰富的弹性触发策略(预测,观测,周期),让弹性更加高效,并保障了服务的质量。
  • 负载感知的调度器
1. 动态调度器根据实际的节点利用率构建了一个简单但高效的模型,并过滤掉那些负载高的节点来平衡集群。
  • 拓扑感知的调度器
1. Crane Scheduler与Crane Agent配合工作,支持更为精细化的资源拓扑感知调度和多种绑核策略。
2. 可解决复杂场景下“吵闹的邻居问题",使得资源得到更合理高效的利用。
  • 基于 QOS 的混部
1. QOS相关能力保证了运行在 Kubernetes 上的 Pod 的稳定性。
2. 具有多维指标条件下的干扰检测和主动回避能力,支持精确操作和自定义指标接入。
3. 具有预测算法增强的弹性资源超卖能力,复用和限制集群内的空闲资源。
4. 具备增强的旁路cpuset管理能力,在绑核的同时提升资源利用效率。
  1. Crane有什么优势:

Crane 基于两级调度能力,实现高优先级延迟敏感业务和低优先级高吞吐业务在相同节点上的混合运行:

在这里插入图片描述

1.一级调度能力,确保应用的高效调度,实现真正的“用多少占多少”。

  • 基于应用历史负载信息进行画像构建

  • 基于应用画像和节点画像实现智能调度

  • 基于DSP算法、AI算法等实现弹性预测

2.二级调度能力,在保障服务质量的同时,实现资源利用率的大幅提升。

  • 节点画像和闲置资源回收。运行在每个节点的代理采集节点负载,基于 DSP等预测算法预测未来负载走势,并将闲置资源回收成为节点扩展资源供低优业务使用。

  • 资源隔离和服务质量保障。定义资源隔离规则,确保当混部业务发生资源竞争时,高优业务的稳定性不受影响;开源方案基于 CPU Quota 完成低优业务的资源压制;闭源方案基于腾讯 TLinux 如意内核完成高优业务的绝对资源抢占。

  • 干扰检测和低优主动回避。节点代理探测资源隔离策略生效后,节点是否依然有干扰发生,如有干扰则驱逐低优业务确保高优业务不受影响。

  1. Crane的战绩:

目前,Crane 已经被腾讯、小红书、网易、思必驰、酷家乐、明源云、数数科技等公司部署在生产系统,其主要贡献者来自腾讯、小红书、谷歌、eBay、微软、特斯拉等知名公司。

  • 在腾讯内部自研业务大规模落地,部署至数百个 Kubernetes 集群,管控数百万 CPU 核,全面上线一个月内,大盘总核数缩减 25%。

  • 以腾讯内部部门集群优化为例,通过使用FinOps Crane,该部门在保障业务稳定的情况下,资源利用率提升了3倍;腾讯另一自研业务落地FinOps后,在一个月内实现了总CPU规模40万核的节省量,相当于每月成本节约超千万元。

  • 只利用Crane的Request推荐等基本能力,设备资源利用率从原来的不到10%提升了现在的16.6%,从而使得成本整体降低了30%。


二、动手实验:

1.安装项目需要的基础软件:

# 安装docker
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun

# 安装kubectl
# 下载最新发行版:
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
# 下载 kubectl 校验和文件:
   curl -LO "https://dl.k8s.io/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl.sha256"
# 基于校验和文件,验证 kubectl 的可执行文件:
echo "$(cat kubectl.sha256)  kubectl" | sha256sum –check
# 安装 kubectl
sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl
# 执行测试,以保障你安装的版本是最新的:
kubectl version --client

# 安装helm
curl https://baltocdn.com/helm/signing.asc | gpg --dearmor | sudo tee /usr/share/keyrings/helm.gpg > /dev/null
sudo apt-get install apt-transport-https --yes
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/helm.gpg] https://baltocdn.com/helm/stable/debian/ all main" | sudo tee /etc/apt/sources.list.d/helm-stable-debian.list
sudo apt-get update
sudo apt-get install helm

# 安装kind
# For AMD64 / x86_64
[ $(uname -m) = x86_64 ] && curl -Lo ./kind https://kind.sigs.k8s.io/dl/v0.19.0/kind-linux-amd64
# For ARM64
[ $(uname -m) = aarch64 ] && curl -Lo ./kind https://kind.sigs.k8s.io/dl/v0.19.0/kind-linux-arm64
chmod +x ./kind
sudo mv ./kind /usr/local/bin/kind
  • kind用来快速创建和测试k8s的工具
  • helm是k8s的包管理工具

2.安装本地的 Kind 集群和 Crane 组件:

curl -sf https://raw.githubusercontent.com/gocrane/crane/main/hack/local-env-setup.sh | sh -

3.确保所有 Pod 都正常运行:

export KUBECONFIG=${HOME}/.kube/config_crane
kubectl get pod -n crane-system

NAME                                              READY   STATUS    RESTARTS       AGE
craned-6dcc321sd-vnfsf                            2/2     Running   0              4m41s
fadvisor-5b6321dsd6-xpxzq                         1/1     Running   0              4m37s
grafana-3213ds54-6l24j                            1/1     Running   0              4m46s
metric-adapter-2314ds-swhfv                       1/1     Running   0              4m41s
prometheus-kube-state-metrics-432312d-p8l7c       1/1     Running   0              4m46s
prometheus-server-fdsad23223-4qqlv                2/2     Running   0              4m46s

提示:Pod 的启动需要一定的时间,等几分钟后输入命令查看后集群状态是否都 Running

4.访问 Crane Dashboard:

kubectl -n crane-system port-forward service/craned 9090:9090

# 后续的终端操作请在新窗口操作,每一个新窗口操作前请把配置环境变量加上(不然会出现8080端口被拒绝的提示)
export KUBECONFIG=${HOME}/.kube/config_crane

5.访问 Crane Dashboard:

在这里插入图片描述- 当月总成本:过去一个月集群总成本。从安装Crane时间开始,按小时累加集群成本

  • 预估每月成本:以最近一小时成本估算未来一个月的成本。每小时成本 * 24 * 30
  • 预估CPU总成本:以最近一小时CPU成本估算未来一个月的CPU成本。每小时CPU成本 * 24 * 30
  • 预估Memory总成本:以最近一小时Memory成本估算未来一个月的Memory成本。每小时Memory成本 * 24 * 30
    在这里插入图片描述
    在这里插入图片描述5.使用智能弹性 EffectiveHPA:

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

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

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

5.1安装Metrics Server:

用以下命令安装 Metrics Server:

kubectl apply -f installation/components.yaml
kubectl get pod -n kube-system

5.2创建测试应用:

用以下命令启动一个 Deployment 用 hpa-example 镜像运行一个容器, 然后将其暴露为一个 服务(Service)

kubectl apply -f installation/php-apache.yaml

kubectl apply -f installation/nginx-deployment.yaml

5.3创建 EffectiveHPA:

kubectl apply -f installation/effective-hpa.yaml

运行以下命令查看 EffectiveHPA 的当前状态:

kubectl get ehpa

输出类似于:

NAME         STRATEGY   MINPODS   MAXPODS   SPECIFICPODS   REPLICAS   AGE
php-apache   Auto       1         10                       0          3m39s

5.4 增加负载:

以便负载生成继续,你可以继续执行其余步骤

# 如果你是新创建请配置环境变量 
export KUBECONFIG=${HOME}/.kube/config_crane
kubectl run -i --tty load-generator --rm --image=busybox:1.28 --restart=Never -- /bin/sh -c "while sleep 0.01; do wget -q -O- http://php-apache; done"
kubectl get hpa ehpa-php-apache --watch

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

说明:预测数据需要两天以上的监控数据才能出现。

6.如何计算成本:
成本计算功能是由组件 Fadvisor 实现,在安装 Crane 时会一起安装,一起提供了成本展示和成本分析功能:

  • Server:收集集群 Metric 数据并计算成本
  • Exporter:将成本 Metric 暴露出来

在这里插入图片描述
原理

Fadvisor 成本模型提供了一个方法来估计和分析每个容器,pod 或其他资源在 Kubernetes 中的资源价格。

请注意,成本模型只是预估成本,而不是替代云订单,因为实际的计费数据取决于更多原因,比如各类计费逻辑。以下是计算理论:

  • 最简单的成本模型是以相同的价格估算所有节点或 pod 的资源价格。例如,在计算成本时,您可以假设所有容器的 CPU 和 RAM 单位价格相同,2/小时核心,0.3/小时 Gib
  • 高级成本模型是通过成本分摊来估计资源价格。 这一理论的基础是不同实例类型和计费类型的每个云机器实例的价格不同,不过 CPU 和 RAM 的价格比率是相对固定的,可以通过这个价格比率来计算资源成本。

成本分摊模型下的具体的计算公式如下:

  • 集群整体成本:cvm 成本之和
  • CPU/mem 价格比率相对固定
  • cvm 的成本 = CPU 成本 * CPU 数量 + mem 成本 * mem 数量
  • CPU 申请成本:整体成本 * (CPU 占 cvm 成本的比例)得到整体 CPU 成本,再按申请的 CPU 总览占整体CPU 总量的比例计算出 CPU 申请的成本
  • namespace 下的 CPU 申请成本: CPU 申请成本按 namespace 聚合

7.实验环境清理:
动手实验完成后,可以将本地的集群清理删除:

kind delete cluster --name=crane

8.相关截图:

在这里插入图片描述在这里插入图片描述在这里插入图片描述

在这里插入图片描述


三、总结:

在整个实验过程中,Crane的官方人员和CSDN人员还是比较细心的指导,这里要特别感谢一下丢哥,在我遇到问题的时候,耐心的解答,并且协助我。特别是在Mac环境中不太熟悉。

最后,Crane是一个开源的云计算成本管理工具,它可以帮助企业在使用云计算资源时更好地管理成本。Crane可以帮助企业在云计算环境中实现资源成本的透明化管理,从而更好地控制成本,提高效益。Crane可以通过API将云计算资源的使用情况与成本进行关联,并提供实时的成本分析和预测功能。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

腾讯云 Finops Crane 开发者集训营 - 云原生如何助力企业搞定成本优化 的相关文章

随机推荐

  • 如何快速检测代理IP质量?方法与工具全干货

    一直以来 IP代理都是出海跨境业务的刚需 质量好的IP代理 除了在跨境业务产生巨大作用 在SEO监控 爬虫抓取 市场研究等领域也发挥着很大的作用 但是 对于IP代理的质量检测是我们选择高标准IP代理的一句 我们一般都会建议在使用IP代理前
  • 5G技术优势

    1G实现了移动通话 2G实现了短信 数字语音和手机上网 3G带来了基于图片的移动互联网 而4G则推动了移动视频的发展 5G网络则视为未来物联网 车联网等万物互联的基础 同时 5G普及将使得包括虚拟现实和增强现实这些技术成为主流 4G网络是专
  • 修改网页logo

    在用浏览器打开网站的时候 浏览器标签页上面有网站的图标 类似于logo小图标 如下图 步骤1 打开你的tomcat的安装目录 我的目录实在G盘 G apache tomcat 7 0 53 windows x64 apache tomcat
  • java进制转换方法

    一 十进制向二 八 十六进制的转换 方法一 Integer toBinaryString i 表示十进制转为二进制 Integer toOctalString i 表示十进制转为八进制 Integer toHexString i 表示十进制
  • 周庄不买门票攻略_周庄古镇旅游攻略

    周庄古镇旅游攻略 周庄古镇是世界文化遗产预选地 首批国家5A级旅游景区 位于苏州城东南 位于昆山 吴江 上海三地交界处 周庄古镇四面环水 因河成镇 依水成街 以街为市 井字型河道上完好保存着14座建于元 明 清各代的古石桥 800多户原住民
  • org/springframework/boot/maven/RepackageMojo has been compiled by a more recent version of the Java

    项目场景 项目中执行clean 再执行install时报错 错误如下 org springframework boot maven RepackageMojo has been compiled by a more recent versi
  • Python库之自然语言处理和文本挖掘

    来源地址 http www python88 com topic 37015 https mp weixin qq com s sPAomFg 5JZigFUG CtnaQ 自然语言处理和文本挖掘库主要用于以自然语言文本为对象的数据处理和建
  • linux基本命令练习

    1 列出 etc目录下的所有文件名称 2 创建文件file1 和file2 并复制到 home目录下 3 显示以ma开头的所有命令 ma 双击两次 TAB键 4显示所有文件名中有 bash的文件 用tab命令补全 5 显示当前所在的目录路径
  • android图像识别(百度普通物体识别)

    android图像识别 采用百度sdk 识别准确率基本上能用 主要缺陷是百度sdk免费额度有限 demo链接如下 仅供参考https download csdn net download android xc 12274161
  • Python进阶之CrawlSpider的应用及Scrapy配置项的引用

    1 CrawlSpider的应用 CrawlSpider可以根据规则自动分析链接的数据并按照正则的要求取出需要的数据 scrajpy startproject yg cd yg 注意 t crawl参数 scrapy genspider t
  • 解决SqlServer批量插入最多2100条数据的方法

    SqlServer批量插入数据时最多不能超过2100条 记录一下解决办法 Java代码 public void batchInsert List
  • 基于vue实现移动端点击上方导航,内容滑动切换,滑动内容导航自动切换。

    这是在日常开发过程中常见的选项卡 带滑动切换效果 小白一枚 不足之处还望体谅 包涵 这也是第一次尝试写博客 以后会继续分享一些工作中的问题与收获 实现效果 点击上方导航 当前导航添加样式 下方内容滑动切换 滑动下方内容上面导航切换 第一步
  • 论文笔记:Region Representation Learning via Mobility Flow

    2017 CIKM 1 摘要和介绍 使用出租车出行数据学习区域向量表征 同时考虑时间动态和多跳位置转换 gt 通过flow graph和spatial graph学习表征 出租车交通流可以作为区域相似度的一种 A区域和B区域之间流量大 gt
  • JS 变量提升和函数提升

    变量提升 这里介绍一个变量提升提升的经典案例 for var i 0 i lt 10 i setTimeout gt console log i 1000 这里打印是10个10 因为在执行第一个setTimeout时 Js不会等待1秒后再去
  • 怎么解决“无法打开包括文件:“graphics.h”: No such file or directory”的问题

    在接手同伴的中国象棋项目时 导入项目后 发现VS一直提示 无法打开包括文件 graphics h No such file or directory 在查阅资料后发现是缺少easyx文件 接下来 就介绍一下手动配置一下easyx文件 eas
  • 特殊类型动归--区间动归与环形动归

    区间动归 某类有序事件中前若干个事件的子答案 不能再支撑状态转移 我们需要去寻找 从某个元素起到另一个元素结束所包含所有的 连续 元素的子答案 作为状态 可以想象 在这个描述下 每个状态会对应于原题序列上的一个区间 区间具有良好的性质 短的
  • 深度学习(1):BP神经网络实现银行客户流失预测

    目的 针对银行客户行为和统计数据实现客户流失预测任务 一 数据准备 1 数据集 select data csv 作为训练样本 数据预处理方式 归一化 数值化 CreditScore 信用分数 EB 存贷款情况 EstimatedSalary
  • centos 建立回收站

    linux下的回收站在每一个当前用户目录 local share Trash中 也可以给linux添加一个回收站 mkdir tmp trash tmp 建立一个回收站目录 vi bin trash 编辑一个文件 mv tmp trash
  • python之浅拷贝、深拷贝

    什么是浅拷贝 深拷贝 理论来自python基础教程 在 Python 中 对象赋值实际上是对象的引用 当创建一个对象 然后把它赋给另一个变量的时候 Python 并没有拷贝这个对象 而只是拷贝了这个对象的引用 我们称之为浅拷贝 在 Pyth
  • 腾讯云 Finops Crane 开发者集训营 - 云原生如何助力企业搞定成本优化

    引言 随着docker的技术普及 越来越多的企业加入了云计算发展进程 云原生产业发展迅猛 云原生建设投入比例明显 面对大规模的集群投入 部署 维护等问题也逐渐产生 越来越多的企业对云原生不断提出更高要求 同时云原生技术简化运维的效能提 升开