【勝讯云 Finops Crane 集训营】基于 FinOps 的云资源分析与成本优化平台实操及说明

news2024/11/23 1:13:36

介绍

Crane 是由腾讯云主导开源的国内第一个基于云原生技术的成本优化项目,遵循 FinOps 标准,已经获得FinOps基金会授予的全球首个认证降本增效开源方案。它为使用 Kubernetes 集群的企业提供了一种简单、可靠且强大的自动化部署工具。
Crane 的设计初衷是为了帮助企业更好地管理和扩展其 Kubernetes 集群,从而实现更高效的云原生应用管理。
它易于使用、高度可定制和可扩展。它提供了一组简单易用的命令行工具,使得开发者和管理员都能轻松地将应用程序部署到 Kubernetes 集群中。Crane 还支持多种云平台,并且可以根据具体的业务需求进行定制。
Crane 并已经被腾讯、网易、思必驰、酷家乐、明源云、数数科技等公司部署在生产系统,其主要贡献者来自腾讯、小红书、谷歌、eBay、微软、特斯拉等知名公司。

Crane中的成本优化包含以下三个方面

  1. 成本展示: Kubernetes 资源( Deployments, StatefulSets )的多维度聚合与展示。
  2. 成本分析: 周期性的分析集群资源的状态并提供优化建议。
  3. 成本优化: 通过丰富的优化工具更新配置达成降本的目标。

Crane主要特征包含以下几个方面

​​在这里插入图片描述

一. 成本可视化和优化评估

实现云资源计费和账单数据的多维度成本分析,并利用 Prometheus 监控系统存储,在多云环境下支持不同云服务商的计费优化评估。

二. 推荐框架

该推荐框架支持多种云资源的分析,并包含多种推荐器,如资源、副本、HPA及闲置资源推荐等,且具备可扩展性。

三. 基于预测的水平弹性器

在社区 HPA 的基础上,EffectiveHorizontalPodAutoscaler 支持预测、观测和周期等更多的弹性触发策略,以实现基于预测的弹性控制,提升弹性效率并保障服务质量。

四. 负载感知的调度器

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

五. 拓扑感知的调度器

Scheduler和Crane Agent的协同作业,可以实现更加细致的资源拓扑感知调度和多种CPU绑定策略,解决复杂场景下“吵闹的邻居问题”,提高资源利用效率

六. 基于 QOS 的混部

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

Crane架构设计

Crane 的整体架构如下:

在这里插入图片描述

Craned

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

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

Fadvisor

Fadvisor 提供一组 Exporter 计算集群云资源的计费和账单数据并存储到你的监控系统,比如 Prometheus。Fadvisor 通过 Cloud Provider 支持了多云计费的 API。

Metric Adapter

Metric Adapter 实现了一个 Custom Metric Apiserver. Metric Adapter 读取 CRDs 信息并提供基于 Custom/External Metric API 的 HPA Metric 的数据。

Crane Agent

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

实操

环境安装

注意事项:本人电脑系统为: MacBook Pro M2 不同电脑安装时可能会有差别

  1. 安装 Docker
    斜体样式我直接安装的是desktop application 打开链接就是
  2. 安装 kubectl
    这一步的安装可以直接在docker 中直接打开 Kubernetes 就可以, 打开的过程中就下载好了
  3. 安装 Helm
    直接 终端运行 brew install helm 就可以下载完成后输入helm search repo bitnami 看看有没有一个表头出现,有的话就对了 , 我忘记截图了
  4. 安装 kind
    同样终端运行 brew install kind 下载完成后 输入 kind create cluster --help 看下有没有对应的指令 就可以了, 同样忘记截图了

到此前期的准备工作算是完成了

本地安装 Crane

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

  1. 新建一个文件夹,打开文件夹的终端通过 curl -sf https://raw.githubusercontent.com/gocrane/crane/main/hack/local-env-setup.sh | sh - 安装 Crane 以及其依赖 (Prometheus/Grafana)[可能要使用一下魔法]
  2. 上面的命令执行完成之后 ,执行 下面两个命令
    2.1 export KUBECONFIG=${HOME}/.kube/config_crane
    2.2 kubectl get deploy -n crane-system

注意:一定要确保所有 Pod 都正常运行: Pod 的启动需要一定的时间等几分钟后输入命令查看后集群状态是否都 Running (我已经等了10min了 状态如图)

在这里插入图片描述
出现了一个 ImagePullBackOff 错误 ,通过大神 @Mr.丢哥 的指导终于解决 , 解决方案也很简单 ,使用科技就好了.
在这里插入图片描述

补充一下Pod状态解释

CrashLoopBackOff 容器退出,kubelet正在将它重启
InvalidImageName 无法解析镜像名称
ImageInspectError 无法校验镜像
ErrImageNeverPul 策略禁止拉取镜像
ImagePullBackOff 正在重试拉取
RegistryUnavailable 连接不到镜像中心
ErrImagePull 通用的拉取镜像出错
CreateContainerConfigError 不能创建kubelet使用的容器配置
CreateContainerError 创建容器失败
m.internalLifecycle.PreStartContainer 执行hook报错
RunContainerError 启动容器失败
PostStartHookError 执行hook报错
ContainersNotInitialized 容器没有初始化完毕
ContainersNotReady 容器没有准备完毕
ContainerCreating 容器创建中
PodInitializing pod 初始化中
DockerDaemonNotReady docker还没有完全启动
NetworkPluginNotReady 网络插件还没有完全启动
Evicted 即驱赶的意思,意思是当节点出现异常时,kubernetes将有相应的机制驱赶该节点上的Pod。 多见于资源不足时导致的驱赶。

访问 Crane Dashboard

在终端输入指令kubectl -n crane-system port-forward service/craned 9090:9090 浏览器访问地址 http://localhost:9090/ 就可以了
在这里插入图片描述

注意:后续的终端操作新窗口操作,每一个新窗口操作前请把配置环境变量加上 export KUBECONFIG=${HOME}/.kube/config_crane

添加本地集群

如图所示:浏览器访问Crane Dashboard 后, 进行如下操作
设置 => 添加集群 => 集群名称 => CRANE URL(当前Crane的地址就可以) => 快速填入页面地址作为集群地址 => 确认

在这里插入图片描述

使用 EffectiveHPA

Kubernetes HPA 支持了丰富的弹性扩展能力,Kubernetes 平台开发者部署服务实现自定义 Metric 的服务,Kubernetes 用户配置多项内置的资源指标或者自定义 Metric 指标实现自定义水平弹性。
EffectiveHorizontalPodAutoscaler(简称 EHPA)是 Crane 提供的弹性伸缩产品,它基于社区 HPA 做底层的弹性控制,支持更丰富的弹性触发策略(预测,观测,周期),让弹性更加高效,并保障了服务的质量。

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

依次执行以下命令安装 Metrics Server:

注意:这里我是在项目文件下新起了一个终端, 如果是新创建请配置环境变量 export KUBECONFIG=${HOME}/.kube/config_crane

kubectl apply -f installation/components.yaml
kubectl get pod -n kube-system
创建测试应用

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

kubectl apply -f https://raw.githubusercontent.com/gocrane/crane/main/examples/autoscaling/php-apache.yaml
kubectl apply -f https://raw.githubusercontent.com/gocrane/crane/main/examples/analytics/nginx-deployment.yaml
创建 EffectiveHPA

kubectl apply -f https://raw.githubusercontent.com/gocrane/crane/main/examples/autoscaling/effective-hpa.yaml

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

输出结果如图:

在这里插入图片描述

增加负载

执行命令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 进行监控数据

界面展示

集群总览
在这里插入图片描述
成本洞察->集群总览
在这里插入图片描述
整体来说还是不错的.

实验环境清理

实验完成后可以通过 kind delete cluster --name=crane 将本地的集群清理删除

总结

Crane 从搭建到运行完成还是相当顺利的, 可以说是丝滑也不过分, 用起来也是很舒适.
我们可以自己在 K8s 集群中安装 crane 来获取这些相关功能, 可以帮助企业像管理 Workload 一样声明式管理 Node 节点,高效解决节点维护、资源规划等各种各样的运维问题。
不过还是存在一切小问题,如web端界面小bug 也是很多的 ,这一点希望后期可以逐渐修复,毕竟 web 永远展示给用户的第一印象

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/494943.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

来这公司一年碰到的问题比我过去10年都多

无意间发现我们 Kafka 管理平台的服务的 open files 和 CPU 监控异常,如下图,有一台机器 CPU 和 opfen files 指标持续在高位,尤其是 open files 达到了4w。 原因分析 第一反应是这个服务请求很高?但是这个服务是一个管理服务不应…

云安全的挑战与发展:云原生安全将是未来趋势吗?

引言 随着企业数字化转型的推进和云计算的普及,云安全已经成为了当下IT行业的热点话题之一。尽管云计算已经被广泛应用,但在云安全方面仍存在一些挑战和问题。本文将探讨当前云安全面临的挑战,并分析云原生安全在未来的发展趋势。 第一章 云…

Opera One将取代 Opera 浏览器

导读Opera 日前推出了一款名为 Opera One 的新浏览器,该浏览器正处于开发者预览阶段,用户可以访问官网下载试用(链接)。这个浏览器的终极目标是在今年晚些时候取代其当家的 Opera 浏览器。 Opera One 遵循 "模块化设计理念&q…

Netty(2)

Netty 文章目录 Netty4 Netty 模型4.1 Netty 模型介绍4.2 Netty demo4.3 Netty 异步模型4.3.1 基本介绍4.3.2 异步模型4.3.3 Future-Listener 机制4.4 Netty 任务队列 task 4 Netty 模型 4.1 Netty 模型介绍 Netty 线程模式:Netty 主要基于主从 Reactor 多线程模型…

2023年开源社项目委员会介绍

2023 项目委员会成员 项目委员会主席:石垚 (tech-querykaiyuanshe.org) 项目委员会秘书 :丁文昊 (dingwenhaokaiyuanshe.org) 开源社官网项目组: 组长:石垚 (tech-queryk…

2023 ATTCK v13版本更新指南

一、什么是ATT&CK ATT&CK(Adversarial Tactics, Techniques, and Common Knowledge )是一个攻击行为知识库和模型,主要应用于评估攻防能力覆盖、APT情报分析、威胁狩猎及攻击模拟等领域。 二、ATT&CK 发展历史 1996年&#xff1…

【UE】高级载具插件-04-坦克瞄准开火

在上一篇文章中(【UE】高级载具插件-03-子弹击中目标时使目标破碎),我们实现了坦克开火的功能。本篇博客介绍的是实现坦克瞄准开火的功能。 效果 步骤 1. 首先将学习FPS游戏时用到的动态准心控件蓝图资源导入 2. 在项目设置中增加两个操作…

穿越有序链表的迷宫:探索力扣“合并两个有序链表”的解题思路

本篇博客计划讲解力扣“21. 合并两个有序链表”这道题,这是题目链接。 老规矩,先来审下题干。 输出示例如下: 提示: 这道题目相当经典,同时是校招的常客。大家先思考一下,再来听我讲解。 思路&…

7.1 幂法和反幂法

学习目标: 如果我要学习幂法及反幂法,我会遵循以下步骤: 1. 学习理论知识:首先我会找到可靠的教材或者网上资源,学习幂法及反幂法的理论知识,包括其原理、公式、算法流程、收敛性等方面的内容。这些知识可…

Cadence Allegro BGA类器件扇孔操作教程

对于BGA扇孔,同样过孔不宜打孔在焊盘上,推荐打孔在两个焊盘的中间位置。很多工程师为了出线方便,随意挪动BGA里面过孔的位置,甚至打在焊盘上面,如图1所示,从而造成BGA区域过孔不规则,易造成后期…

3.shell脚本例子

文章目录 1.计算从1到100所有整数的和2.提示用户输入一个小于100的整数,并计算从1到该数之间所有整数的和3.求从1到100所有整数的偶数和、奇数和4.用户名存放在users.txt文件中,每行一个,判断文件里的用户是否存在,若该用户存在&a…

【Java EE】-Servlet(一) 创建Maven下的webapp项目

作者:学Java的冬瓜 博客主页:☀冬瓜的主页🌙 专栏:【JavaEE】 分享: 在满园弥漫的沉静的光芒之前,一个人更容易看到时间,并看到自己的身影。——史铁生《我与地坛》 主要内容:创建一个基于maven…

【云计算•云原生】5.云原生之初识OpenStack

文章目录 OpenStack起源OpenStack基本组件HorizonNovaSwiftCinderKeystoneNeutronGlanceCeilometerTroveHeat OpenStack简单框架模型 OpenStack起源 OpenStack是一个由NASA和Rackspace合作研发并发起的,以Aapache许可证授权的自由软件和开放源代码项目。为公有云及…

JS 实现区块链分布式网络

JS 实现区块链分布式网络 这里主要 JS 实现区块链 实现的部分继续下去,对 Blockchain 这个对象有一些修改,如果使用 TS 的话可能要修改对应的 interface,但是如果是 JS 的话就无所谓了。 需要安装的依赖有: express body-parse…

字节跳动ByteHouse与亚马逊云科技携手打造新一代云数仓服务

随着全球化的发展,越来越多的中国企业开始涉足海外市场,开展跨境业务。在这个过程中,强大的数据分析能力是出海企业不可或缺的重要一环。通过有效的数据分析,能帮助企业更好地了解全球市场对产品的需求便于调整产品战略&#xff0…

微服务---RabbitMQ进阶(消息可靠性,延迟队列,惰性队列,集群部署)

RabbitMQ进阶(消息可靠性,延迟队列,惰性队列,集群部署) 消息队列在使用过程中,面临着很多实际问题需要思考: 1.消息可靠性 消息从发送,到消费者接收,会经理多个过程: 其中的每一步都可能导致消息丢失,常见…

Python每日一练(20230506) 存在重复元素I、II、III

目录 1. 存在重复元素 Contains Duplicate I 2. 存在重复元素 Contains Duplicate II 3. 存在重复元素 Contains Duplicate III 🌟 每日一练刷题专栏 🌟 Golang每日一练 专栏 Python每日一练 专栏 C/C每日一练 专栏 Java每日一练 专栏 1. 存在重…

项目管理-数据管理能力DCMM模型

DCMM 数据管理能力成熟度评估模型简介 DCMM(Data Management Capability Maturity Assessment Model,数据管理能力成熟度评估模型)是我国首个数据管理领域国家标准,将组织内部数据能力划分为八个重要组成部分,描述了每…

重新定义座舱智能化的下半场?谁能抓住弯道超车的窗口期

2020年,高通8155上车之前,行业的定义更多是4G联网互联网生态(智能手机的复刻),以斑马智行为代表;而随着集成异构计算、高性能AI引擎(8TOPS算力)的高通8155密集上车,驱动行…

车载多屏互动联动动画版本同屏幕大小情况方案设计--众筹项目

hi,粉丝朋友们: 背景及成果展示 本节带大家来开始学习多屏幕互动的动画版本设计,回忆一下我们已经在之前blog和wms课程中学习了多屏互动的非动画版本如下: 再来看看今天我们想要实现有动画版本的成果: 是不是相比之…