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

news2024/10/6 20:35:52

前言

最近有幸参与了腾讯云举办的Finops Crane的集训营。在这个过程中,老师认真指导,让我受益非浅,也让我真正理解了这一产品所带来的意义。

在听了老师们的介绍和讲解后,我马不停蹄地开始了自己摸索。首先是跟着视频和官方教程在本地安装了一遍Crane,体验了一下整个安装使用教程。

随后又查看官方的文档和源码。在本地搭建了一个前端开发环境,并链接上了线上的demo环境。并顺利给官方提了几个Issues和PR。

下面就来整理,分享一下我的操作和感悟,希望能够帮助到其他同学。

出现的背景

在分享安装和使用流程之前,我们先来了解一下FinOps的出现的背景。

云原生基金会在2021年的调查中,发现云原生的部署率已经达到了历史性新高。96%的组织已经在使用Kubernetes,但在使用过程中,存在着严重的资源浪费。据Flexera 在2022年的云计算市场发展状态报告中提到,在很多使用Kubernetes的组织中32%的云支出被浪费。随着云原生的技术普及,成本管理成了一个迫在眉睫的问题。该问题主要表现在以下四个方面:

  • 去中心化
    随着以Kubernetes为核心的云原生应用的蓬勃发展,传统的集中式财务预算和IT管理模式在向以业务为导向的分布式决策转型
  • 不断上涨
    CNCF 调查显示,随着业务的快速发展,企业的云费用以24%的年增长率快速增加。
  • 动态变化
    云原生的动态环境和弹性功能导致云费用随着业务负载不断变化
  • 浪费严重
    业务上云后缺乏资源优化意识,依然以传统资源配置思维管理资源,浪费严重。

有问题就会有解决方案,而FinOps概念的提出正是为了解决这一问题。

FinOps概念

FinOps是一种将财务管理(Finance)与云操作(Ops)相结合的模式,旨在优化云计算支出并提高业务绩效。

云计算是一种流量密集型的技术,意味着云成本管理在很大程度上取决于如何优化云资源消耗,并根据需要提高或降低开支。FinOps通过建立流程、原则和工具来实现这一目标,可以帮助企业更好地理解和控制云成本,同时保持效率和创新。

FinOps的关键原则是建立透明度并将云成本降低到最小水平。为了实现这一点,需要结合使用财务、技术和业务信息,以确定最佳的资源使用方式。同时,需要确定哪些资源实际上为贡献产生了价值,并分配成本以实现真正的透明度和可控性。
总之,FinOps作为一种模式结合了财务和技术的因素,可以帮助企业实现优化云支出和提高业务绩效的目标。

FinOps定义了一系列云财务管理规则和最佳实践,通过助力工程和财务团队、技术和业务团队彼此合作,进行数据驱动的成本决策,使组织能够获得最大收益。
通过下面的结构图,我们可以清晰地认识到FinOps有哪些角色,以及需要的能力。
在这里插入图片描述

Crane 项目介绍

基于以上 FinOps的原则和能力标准,腾讯云推出了Crane开源项目,主打智能调度,助力成本优化。是一个基于 FinOps 的云资源分析与成本优化平台。它的愿景是在保证客户应用运行质量的前提下实现极致的降本。

项目开源地址:https://github.com/gocrane/crane
官方网站:https://gocrane.io/
在官网上有很多中文文档,包括从安装,使用,优化,最佳实践,以及QA。这是了解该平台最好的地方。
以下是该项目的架构图
在这里插入图片描述
根据官方提供的项目架构图,我们可以看到Crane提供了二级调度,第一级为应用画像和作业调度,二级调度为节点级的精细化调度和稳定性保证。

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

  • 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 部署在集群的节点上。

在监控方面使用了Prometheus与Grafana。Crane的一些图表就是直接使用的Grafana配置的。

在成本的可视化和优化评估

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

安装使用

在最近的腾讯云 Finops Crane 集训营,官方一共举办了两次直播,CSDN的回放地址分别是:

4月27号 Finops Crane 开源项目经验分享
https://live.csdn.net/room/csdnnews/CPEN2JKh

5月7号 14:00 腾讯云 Finops Crane开发者集训营
https://live.csdn.net/room/csdnnews/83xhNo4C

我是跟着第二次直播体验整个安装,使用流程的。
在安装Crane之前需要预安装一下软件,清单如下

  • 安装 kubectl
  • 安装 Helm
  • 安装 kind
  • 安装 Docker

安装以上的软件清单后,执行下面的命令,安装相关组件
curl -sf https://raw.githubusercontent.com/gocrane/crane/main/hack/local-env-setup.sh | sh -
包括 创建kind集群,使用helm安装Prometheus ,使helm安装 Grafana ,最后安装
cranefadvisor 组件。
由于脚本里已经使用kind命令,所以要想使用minikube 或者已经存在的其他 Kubernetes集群,是需要修改脚本的。

由于整个安装过程会下载很多个镜像,所有网络不好的同学会感觉很漫长。

运行完成后,还需要登上5分钟左右,等待Pod启动。

在所有Pod启动后,执行以下命令可以访问Crane Dashboard

# 不加这一句会出现8080端口被拒绝的提示
export KUBECONFIG=${HOME}/.kube/config_crane

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

访问 http://127.0.0.1:9090/ 就可以看到 Crane Dashboard 如下图:

# 安装 Metrics Server:
kubectl apply -f installation/components.yaml

# 用以下命令启动一个 Deployment 用 hpa-example 镜像运行一个容器, 然后将其暴露为一个 服务(Service):
kubectl apply -f installation/php-apache.yaml
kubectl apply -f installation/nginx-deployment.yaml

# 创建 EffectiveHPA
kubectl apply -f installation/effective-hpa.yaml

新开一个终端窗口

# 如果你是新创建请配置环境变量 
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"

再次新开一个终端窗口

export KUBECONFIG=${HOME}/.kube/config_crane

kubectl get hpa ehpa-php-apache --watch

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

最后的运行的终端 及效果图如下:
四个终端打印
在这里插入图片描述

Crane Dashboard

在这里插入图片描述
随着系统的运行,crane根据当前的情况,给使用者生成一些推荐规则,资源推荐。其背后是 Fadvisor组件 成本模型提供了一个方法来估计和分析每个容器,pod 或其他资源在 Kubernetes 中的资源价格。

前端技术分析

以上是所有的安装及使用教程。下面来看一下如何在本地搭建一个Crane的前端开发环境,并调试一些代码。
使用git工具将项目源码下载到本地。
git clone https://github.com/gocrane/crane.git
在官方的指导文档中,如果要在本地搭建开发环境,你需要在根目录执行 make

但是这一命令需要很多前提,你需要安装go,nodejs,如果是windows系统,还要让你的电脑支持make命令。
但你是想要直接搭建一个前端开发环境,大可不必那么麻烦,下面我就来告诉怎么来操作

克隆项目到本地后,进入pkg/web目录。该目录就是前端目录。你可以在该项目下,看到一个packgage.json文件。该文件标明了前端项目所依赖的包。
正如你所见,前端项目的主要技术栈是 react与腾讯的前端框架tdesign
在这里插入图片描述

在pkg/web目录下执行 npm install 来安装依赖。
安装后,修改vite.config.js ,这是一个项目配置文件,定义了本地运行时,需要链接的后代服务地址。
将server proxy修改为如下

proxy: {
   '/api': {
     // 用于开发环境下的转发请求
     // 更多请参考:https://vitejs.dev/config/#server-proxy
     // Set to your craned address
     target: 'http://dashboard.gocrane.io/',
     changeOrigin: true,
   },
   '/grafana': {
     // Set to your craned address
     target: 'http://dashboard.gocrane.io/',
     changeOrigin: true,
   },
 },

这样配置的后,请求的以/api/grafana开头的接口 都会被转发到http://dashboard.gocrane.io/ 这个地址。该地址就是 官方提供的无需登陆的demo地址。这也算取一个巧。

修改配置文件后,你需要运行npm run dev 命令。来启动本地服务,当然该命令还是在web目录下执行。
接着浏览器就会自动打开项目访问地址 http://localhost:3003/

这个时候你会发现还是会有很多接口报错。通过仔细的排查和分析,我发现哪些报错的地址都是 直连的 http://dashboard.gocrane.io/ 地址。而这个地址就是我们选中的一个集群地址。 接口直接访问了该地址,导致跨域问题,其实走到这一步我是很诧异的,如果crane要直连集群接口地址的话,那就必须设置跨域。或者部署到同一个域名下。 在本地开发环境,其实也很好解决这一问题,直接修改访问地址,去掉域名。通
过api转发,代理到真正的接口地址。
修改方式如下:
在这里插入图片描述
移除${args.craneUrl} 即可。 修改后就可以看到无错的dashboard
在这里插入图片描述
在搭建了本地的开发环境后,给官方一共提交了6个issues,详情可以点击该链接查看
在这里插入图片描述
合并了两个PR
在这里插入图片描述

开发体验

总体来讲Crane的开发体验还是不错的,前端使用TS来规范了接口的出参和入参,一眼就能看出数据类型。
使用i18next来支持国际化。但在代码格式校验,虽然集成了,但却没有用起来,代码里也有一些声明了很多无用的变量。毕竟是腾讯云主导的第一个国内基于云原生技术的成本优化项目。

总结

在整个实验过程中,Crane的官方人员还是比较耐心的指导,由于官方使用的Mac系统撰写的教程,在Windows平台上有些许差异,这些问题官方也都耐心的解决了。

利用Crane提供的成本模型能够很好地对集群资源进行成本分析,在分析的基础上也能够给出合理化的推荐规则,并且利用数据可视化,能够清晰看到成本改变的下降的趋势,非常直观。但就目前来说项目未对接更多的云厂商的计费API,比如AWS,阿里云,华为云。另外如果推荐规则能够直接在平台上运行就更好了,目前还需要复制命令,到集群中运行。
目前社区还在热烈招募贡献者,各位读者可以积极参与进来。
最后祝愿Crane越来越好。

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

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

相关文章

7.100ASK_V853-PRO开发板支持人形检测和人脸识别

1.前言 ​ V853 芯片内置一颗 NPU核,其处理性能为最大 1 TOPS 并有 128KB 内部高速缓存用于高速数据交换,支持 OpenCL、OpenVX、android NN 与 ONNX 的 API 调用,同时也支持导入大量常用的深度学习模型。本章提供一个例程,展示如…

银医一站式服务终端

01 发卡/充值/挂号业务 ●发卡就诊 ●预约挂号 ●当日挂号 ●自助充值 ●医保关联 ●预约取号 ●现金充值 ●核酸预约 02 打印业务 ●打印检验报告 ●打印检查报告 ●打印费用清单 ●打印病历报告 ●打印住院病历 ●打印检验条码 03 缴费结算业务 ●支付宝支付…

AttributeError: module ‘lib‘ has no attribute ‘X509_V_FLAG_CB_ISSUER_CHECK‘

terminal运行报错AttributeError: module lib has no attribute X509_V_FLAG_CB_ISSUER_CHECK 解决: pip install pyOpenSSL --upgrade

Log4j2远程命令执行(CVE-2021-44228)

漏洞原理 该漏洞是由于,在JNDI客户端的lookup()函数参数外部可控或Reference类构造方法的classFactoryLocation参数外部可控时,会使用户的JNDI客户端访问RMI注册表中绑定的恶意Reference类,从而加载远程服务器上的恶意class文件在客户端本地…

实现微信打开App功能

效果 要求 文档 开发标签文档 android接入指南 android实现 1.接入openSDK dependencies { api ‘com.tencent.mm.opensdk:wechat-sdk-android:6.8.0’ } 2.注册 需要在包名为(applicationId)wxapi的包下加入以上几个类。 类名功能AppRegister是一…

heic如何转换jpg格式?

heic如何转换jpg格式?HEIC是苹果推出的一种新型图片格式,它可以在保证高质量图像的同时减小图像文件的大小。虽然HEIC格式在iOS设备上使用广泛,但在其他操作系统或平台上,特别是Windows系统中,其兼容性和支持程度较差。…

蓝牙单连接和多连接知识

蓝牙单连接和多连接知识 生活中蓝牙连接多路蓝牙的情况越来越多&#xff0c;下面介绍下单连接和多连接的知识&#xff0c;供大家参考 一&#xff1a;蓝牙单连接 蓝牙单连接也称为Point-to-Point 点对点连接&#xff0c;是最常见的蓝牙连接场景,如手机<–>车载蓝牙。&…

〖Web全栈开发①〗—网络编程基础(上)

网络编程基础 网络编程网络编程概述TCP/IP协议IP地址什么是IPIP组成IP 地址使用过程查看IPIp地址分类&#xff1a;子网掩码 端口 socketSocket原理&#xff11;.什么是Socket2.创建一个tcp socket&#xff08;tcp套接字&#xff09; tcp 介绍 &#x1f3d8;️&#x1f3d8;️个…

安卓卡死,卡屏,死机,黑屏

(662条消息) 黑屏定屏那些事 - 系统机制&#xff0c;分析套路和实战&#xff08;系统篇&#xff09;_android黑屏问题分析_内核工匠的博客-CSDN博客

Java 是如何实现双亲委托加载机制的

Java 是一种面向对象的编程语言&#xff0c;它有一套独特的类加载机制。其中&#xff0c;双亲委托加载机制是 Java 类加载机制中的一个重要概念。本文将介绍 Java 的双亲委托加载机制是如何实现的&#xff0c;并解释其作用和优点。 Java 类加载机制 在 Java 中&#xff0c;类的…

树脂可以吸收水里的硝酸盐吗,饮用水矿泉水除硝酸盐,食品级树脂

使用常规的离子交换树脂处理含硫酸盐水中的硝酸盐是困难的。因为树脂几乎交换了水中的所有的硫酸盐后&#xff0c;才与水中的硝酸盐交换。也就是说&#xff0c;硫酸盐的存在会降低树脂对硝酸盐的去除能力。采用Tulsimer A-62MP除硝酸盐树脂优先交换硝酸盐&#xff0c;对硝酸盐的…

形态学运算与仿真:图像处理中形态学操作的简单解释

形态学是图像处理领域的一个分支&#xff0c;主要用于描述和处理图像中的形状和结构。形态学可以用于提取图像中的特征、消除噪声、改变图像的形状等。其中形态学的核心操作是形态学运算。 形态学运算是一种基于形状的图像处理技术&#xff0c;它是通过结构元素与图像进行特定运…

Redis自学之路—安装与配置(一)

目录 简介 安装与配置Redis 下载 上传至linux 安装Redis 解压redis 安装gcc编译环境 注意 停止redis服务 附&#xff1a;Redis的命令行客户端 简介 本文章主要说一下Redis的安装与配置&#xff0c;学一门技术肯定是要从基础学起&#xff0c;其实所有的技术都很简单&…

关于Python爬虫使用代理的问题

当我们使用爬虫程序进行数据采集时&#xff0c;经常会遇到一些网站对爬虫的限制&#xff0c;例如IP封禁、访问频率限制等。为了解决这些问题&#xff0c;我们可以使用代理服务器来进行爬虫操作。本文将介绍爬虫代理的相关知识。 一、什么是爬虫代理&#xff1f; 爬虫代理是指…

IntelliJ IDEA 统一设置编码为utf-8编码 及 jar包运行指定UTF-8

文章目录 一、背景二、解决方法1.修改项目编码格式统一为UTF-82.将项目中的.idea文件夹中的encodings.xml文件中的编码格式改为uft-83.File->Settings->Build,Execution,Deployment -> Compiler -> Java Compiler5. java -jar xxx 命令里面添加UTF-8 编码 一、背景…

笔记-编程语言实现模式(Language Implementation Patterns)

第1章 语言应用初探 Lanugage Applications Cracked Open 1.1 大局观 The Big Picture 主要思想&#xff1a;文件读取部分对输入内容进行“识别”&#xff0c;并输出数据结构作为中间表示&#xff08;intermediate representation&#xff0c;IR&#xff09;&#xff0c;供其…

制造业为什么要数字化?

制造业数字化&#xff0c;主要包含以下一些因素&#xff0c;有优势也有缺点&#xff1a; 制造业数字化的优势&#xff1a; 提高效率&#xff1a;数字化允许各种制造过程自动化&#xff0c;可以提高效率并降低成本。可以缩短生产时间、减少浪费并提高生产率。 增强质量控制&am…

毛泽东《浪淘沙·北戴河》气势磅礴

毛泽东《浪淘沙北戴河》气势磅礴 https://baijiahao.baidu.com/s?id1662486888860973345&wfrspider&forpc 毛主席因其身份地位以及独特的人生经历&#xff0c;在诗词创作中有他人难以企及的气概。今天我们再在欣赏他的一首《浪淘沙北戴河》&#xff0c;这首词第一句便…

Node.JS环境,Express服务器实现GZIP压缩传输

Node.js是一种基于Chrome V8 JavaScript引擎的开源、跨平台而且异步事件驱动的运行时环境&#xff0c;可以让JavaScript代码在服务器端运行。Express是一个流行的Node.js框架&#xff0c;它提供了简单而强大的工具来创建Web服务器和API。 这篇文章将介绍如何使用Node.js和Expr…

关于说服(一)-反抗机制

首先有一个原则&#xff1a;没有人喜欢被改变 不好的话术反而会引起别人的抵触心理 为避免触发反抗机制&#xff0c;可以稍微改变一下话术&#xff1a;将 “你应该” 改为 “我需要”** 没人喜欢说教者 说教者常用句式 1 你为什么不肯去试一试 ->(隐喻) 你在逼别人复习反…