【勝讯云 Finops Crane 集训营】之集群优化实战

news2024/11/15 4:28:22

重要通知

由腾讯云联合 CSDN 推出的“腾讯云 Finops Crane 开发者集训营”活动,主要面向广大开发者,旨在通过线上直播、组织动手实验、有奖征文,开源项目贡献者招募这一系列技术实践活动中既能通过活动对 Finops Crane 开源项目有一个深入的]解,同时也能帮助广大开发者在云原生技能上有实质性收获,而且还有好多精美礼品哦!!! 还等什么跟我一起来体验一下吧!!!(全程免费哦!!)

项目开源地址

如果朋友们对开源有兴趣,或对产品感兴趣可以点击链接进入gitlab 查看哦! 不要忘记你的Star 和收藏哟!!!

介绍

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

Crane中的成本优化

如今,随着云计算技术的不断成熟和普及,越来越多的企业选择将应用和服务部署到云端,以实现更高的灵活性、可扩展性和效率。然而,云计算也带来了新的挑战,其中最重要的一点是成本管理。因为云计算所涉及的成本非常复杂且变化万千,要想真正掌握好云计算成本就需要使用专门的工具和方法。
勝讯云 Finops Crane 就是一个专门面向云计算领域的 FinOps 解决方案。该解决方案提供了一系列功能和工具,让企业能够更好地管理云端资源,实现成本优化和ROI最大化。具体来说,Finops Crane 的主要优势包括以下几个方面:
首先,Finops Crane 提供了全方位的成本展示,能够针对 Kubernetes 资源进行多维度聚合并展示,从而帮助企业更好地了解云计算成本的情况。
其次,Finops Crane 提供了周期性的成本分析功能,可以定期分析集群资源的状态,并给出优化建议,帮助企业更好地控制和优化云计算成本。
第三,Finops Crane 提供了丰富的优化工具,可以帮助企业更新配置以达到降本的目标。这些工具细致而实用,能够有效地解决云计算成本管理时的各种挑战和问题。

综上所述,勝讯云 Finops Crane 是一套非常优秀的云计算 FinOps 解决方案,适用于不同规模的企业。该解决方案提供了全面的功能和工具,可以帮助企业有效地管理云端资源,降低成本,提高效率和服务质量。

Crane主要特征

​​在这里插入图片描述

随着云计算的快速发展,越来越多的企业选择将应用和服务部署到云端,以实现更高的灵活性、可扩展性和效率。然而,云计算也带来了新的挑战,其中最重要的一点是成本管理。因为云计算所涉及的成本非常复杂且变化万千,要想真正掌握好云计算成本就需要使用专门的工具和方法。
在这个背景下,勝讯云提供了一套非常优秀的云计算 FinOps 解决方案——Finops Crane。该解决方案不仅提供了全面的功能和工具,帮助企业有效地管理云端资源,降低成本,并提高效率和服务质量,还包括以下几个核心模块:
首先是成本可视化和优化评估。该模块可以实现云资源计费和账单数据的多维度成本分析,并利用 Prometheus 监控系统存储,在多云环境下支持不同云服务商的计费优化评估。这样,企业可以清晰地了解云计算成本的情况,快速优化成本,节约开支。
其次是推荐框架。Finops Crane 的推荐框架支持多种云资源的分析,并包含多种推荐器,如资源、副本、HPA及闲置资源推荐等,且具备可扩展性。这样企业可以根据推荐框架的指引进行配置优化,有效地提高云端资源的利用率和工作效率。
第三是基于预测的水平弹性器。在社区 HPA 的基础上,EffectiveHorizontalPodAutoscaler 支持预测、观测和周期等更多的弹性触发策略,以实现基于预测的弹性控制,提升弹性效率并保障服务质量。这一功能,充分考虑了不同时段下应用的使用情况和数据量变化,实现了更加高效和精准的弹性控制。
第四是负载感知的调度器。动态调度器根据节点的实际利用率构建了一个简单而高效的模型,并在平衡集群时过滤掉负载高的节点。这样可以有效地解决了在云计算环境中出现的负载不均衡问题,提高了资源利用率和工作效率。
第五是拓扑感知的调度器。Scheduler 和 Crane Agent 的协同作业,可以实现更加细致的资源拓扑感知调度和多种 CPU 绑定策略,解决复杂场景下“吵闹的邻居问题”,提高资源利用效率。这一功能可以让企业在高并发的场景下更好地管理和控制资源,提高了应用性能和稳定性。
最后是基于 QOS 的混部。在 Kubernetes 上运行的 Pod 的稳定性得到了 QOS 相关能力的保证。QOS 具有多维指标条件下的干扰检测和主动回避能力,并支持精确操作和自定义指标接入;此外,QOS 采用预测算法增强了弹性资源超卖能力,对集群内闲置资源进行复用和限制;同时,QOS 还具备增强的旁路cpuset管理能力,可以在绑核的同时提高资源利用效率。这一功能可以有效地提高 Kubernetes 集群的性能和可用性。
综上所述,勝讯云 Finops Crane 是一套非常优秀的云计算 FinOps 解决方案。该解决方案不仅提供了全面的功能和工具,帮助企业有效地管理云端资源,降低成本,并提高效率和服务质量,还能够满足不同规模企业的需求。我相信在未来,Finops Crane 还会继续推出更加创新和实用的功能和工具,满足不断变化的云计算市场需求。

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

架构感知

上述四个技术方案都是针对在 Kubernetes 集群中的不同需求而设计的。Craned 是 Crane 的核心组件,用于管理 CRDs 的生命周期和 API,提供了 Operators、WebApi 和 TimeSeries API 等功能;Dashboard 则是基于 TDesign’s Starter 脚手架研发的前端项目,提供易于上手的产品功能。Fadvisor 提供了一组 Exporter,可计算集群云资源的计费和账单数据,并将其存储到监控系统(如 Prometheus)中,支持多云计费的 API。Metric Adapter 则实现了一个 Custom Metric Apiserver,通过读取 CRDs 信息,提供基于 Custom/External Metric API 的 HPA Metric 数据。最后,Crane Agent 通过 DaemonSet 部署在 Kubernetes 集群的节点上,用于实现节点级别的监控和管理。这些技术方案的运用可以帮助企业在 Kubernetes 集群中提升资源利用效率、监控集群状态并进行合理的资源分配,保障服务质量,提高集群运行效率。

实操

环境安装

注意事项:本人电脑系统为: 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 错误 , 不过等了一会再次运行就成功了!!
在这里插入图片描述

补充一下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 将本地的集群清理删除

总结

在使用勝讯云 Finops Crane 时从环境搭建到运行整体感觉上还是很丝滑的, 遇见的一些问题,助教也会积极解答,也让自己进一步成长了🤡,不过还是存在一些小小的问题, 搭建过程中,有些依赖下载太慢了, 当然不排除我自身网络的原因哈😀 , 其次 WEB端的页面设计及展现上并不是很友好, 例如添加集群时, url 的输入时 反斜杠 总是加不上去,必须先输入后面的字符之后再回来输入反斜杠才可以 , 折扣这里也存在会出现负数的情况, 另外,如果输入一个没有的集群, 没有任何提示 , 在其他页面展示出来的内容是错版的,这块个人觉的还是多多修复一下比较好 ,毕竟核心代码再牛,但是展示出来很low , 也是很让人捉急啊!
另一个方面的话,不得不说<由腾讯云主导开源的国内第一个基于云原生技术的成本优化项目的Crane> 在一定程度上确实很牛的,在架构上针对在Kubernetes集群中的不同需求而设计看起来就是经过了深思熟虑之后的决定了, 框架底层的逻辑也是硬的一批,整体感知说实在的只有一个字"真牛啊!!",如果对这个产品感兴趣的话,可以搭建一下,一起玩一玩的,不错呦!!!

结语

以上所写的个人观点,仅为本人在进行实操,及整体体验过程中的部分心得体会,如有问题欢迎评论区留言.
---------------------------------------------------------完结撒花-----------------------------------------------------------------

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

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

相关文章

mathtype不激活能用吗 mathtype产品密钥如何取得

在文档中输入数学式子时一般会用到mathtype&#xff0c;虽然mathtype为广大用户提供了一定期限的试用期&#xff0c;但试用期后如果没有成为正式用户&#xff0c;那么部分功能可能就用不了了。有些小伙伴可能会对mathtype不激活能用吗&#xff0c;mathtype产品密钥如何取得这两…

PostGIS五分钟入门【空间数据库】

在本文中&#xff0c;我们将介绍 PostGIS 的一些基础知识及其功能&#xff0c;以及一些可用于简化解决方案或提高性能的提示和技巧。 推荐&#xff1a;用 NSDT设计器 快速搭建可编程3D场景。 简而言之 - PostGIS 是一个 Postgres 扩展&#xff0c;增加了对存储和操作空间数据类…

PyQt5桌面应用开发(11):摸鱼也要讲基本法之桌面精灵

本文目录 PyQt5桌面应用系列鼠标不要钱&#xff0c;手腕还不要钱吗&#xff1f;PyQt5源程序python文件资源定义界面定义文件 技术要素资源文件StyleSheetsQMainWindow设置窗体几何 结论 PyQt5桌面应用系列 PyQt5桌面应用开发&#xff08;1&#xff09;&#xff1a;需求分析 PyQ…

orbslam3 编译时 Thirdparty sophus 库多种错误 redefinition, not declared in this scope

问题 在装了 ROS 的机器人系统里编译 orbslam3 时, 发现 Thirdparty sophus 库密集报错, 导致 orbslam3 无法完成编译 排查 同样的代码在装了 ROS 的笔记本 ubuntu18.04 系统里可以成功通过编译, 但是在装了同版本 ROS 的机器人 ubuntu18.04 系统里无法编译 Sophus 库本身…

探秘力扣之谜:如何轻松解决最长公共前缀问题?

本篇博客我会讲解力扣中的“14. 最长公共前缀”这道题&#xff0c;这是题目链接。 先来审题&#xff1a; 以下是几个输出示例&#xff1a; 提示&#xff1a; 这道题的思路其实并不难&#xff0c;也是一些字符串的常规操作的结合。大家可以先思考一下&#xff0c;再来听我讲…

TCP和UDP数据报文详解(区别及三次握手四次挥手详解)

总结TCP和UDP详解在后文 相同点&#xff1a; 1.都是传输层协议 2.都是全双工通信 区别&#xff1a; TCPUDP面向连接无连接一对一一对一&#xff0c;一对多&#xff0c;多对多&#xff0c;多对一(单播&#xff0c;多播&#xff0c;广播)可靠不保证可靠交付面向字节流面向报…

java变量与方法

方法 构造方法 定义&#xff1a;构造方法是一个特殊的成员方法&#xff0c;名字必须与类相同&#xff0c;在创建对象时由编译器自动调用&#xff0c;并且在生命周期内只调用一次 演示&#xff1a; 特性&#xff1a; 1.构造方法名字必须与类名相同&#xff08;如果不同&#…

Ajax XML

文章目录 AJAX XML 实例AJAX XML 实例实例解析 loadXMLDoc() 函数AJAX 服务器页面 AJAX XML 实例 AJAX 可用来与 XML 文件进行交互式通信。 AJAX XML 实例 下面的例子将演示网页如何使用 AJAX 来读取来自 XML 文件的信息&#xff1a; 代码部分 <!DOCTYPE html> <h…

Oracle—数据恢复

文档结构 1、恢复原理1.1、recyclebin&#xff08;回收站&#xff09;相关操作 2、恢复场景2.1、定义删除2.2、记录删除2.2.1、undo恢复2.2.2、redo恢复2.2.3、dbms_logmnr 场景&#xff1a;在 Oracle数据库使用过程中&#xff0c;误删对象或误删记录的情况时有发生&#xff1b…

07- 算法解读 Faster_R-CNN (目标检测)

要点&#xff1a; Faster_R-CNN RPN Fast R-CNN GitHub地址&#xff1a;vision/torchvision/models/detection at main pytorch/vision GitHub 三 Faster_R-CNN Faster R-CNN 是作者 Ross Girshick 继 Fast R-CNN 后的又一力作。同样使用 VGG16 作为网络的 backbone &am…

Windows 10 安装安卓子系统 WSA(Magisk/KernelSU)使用 WSA 工具箱安装 APK

from https://blog.zhjh.top/archives/XokySA7Rc1pkVvnxAEP5E 前提是系统为 Windows 10 22H2 10.0.19045.2311 或更高版本&#xff0c;尽量新。 步骤 使用 WSAPatch 和 MagiskOnWSALocal 安装 WSA 在 Microsoft Store 中安装 Ubuntu LTS&#xff08;或你喜欢的发行版&#xf…

Linux的进程

目录 一、进程占用的内存资源 二、进程的系统环境 三、进程一直在切换 四、父进程和子进程 五、进程状态 六、查看进程 1.ps -ef 列出所有进程 2.ps -lax 列出所有进程 3.ps aux列出所有进程 4.树形列出所有进程 七、作业&#xff08;用来查看管理进程&#xff09; …

windows环境安装运行kafka

一、配置java环境变量 1、下载安装包 http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 2、添加系统变量&#xff1a;JAVA_HOMED:\Program Files (x86)\Java\jdk1.8.0_144 二、安装zooKeeper 1、 下载安装包 http://zookeeper.apache.…

【Java笔试强训 34】

&#x1f389;&#x1f389;&#x1f389;点进来你就是我的人了博主主页&#xff1a;&#x1f648;&#x1f648;&#x1f648;戳一戳,欢迎大佬指点! 欢迎志同道合的朋友一起加油喔&#x1f93a;&#x1f93a;&#x1f93a; 目录 一、选择题 二、编程题 &#x1f525;收件人列…

eks实践案例

Eks&#xff1a; ami-0c23197c88296c1b5 eks集群&#xff1a; 拉面 - 知乎 https://blog.csdn.net/saynaihe/category_12204222.html 什么是 Amazon EKS&#xff1f; - Amazon EKS kubectl 使用指南 https://zhuanlan.zhihu.com/p/364994610 k8s HPA自动伸缩 手把手教你 K8…

centOS7忘记登录密码该如何重新修改登录密码

文章目录 前言一、重新修改登录密码1.1、第一步1.2、第二步1.3、第三步1.4、第四步1.5、第五步1.6、第六步1.7、第七步1.8、第八步 前言 忘记密码并不可怕&#xff0c;只要学会方法&#xff0c;密码随时都可以找回。 一、重新修改登录密码 1.1、第一步 当打开centOS7之后忘记…

flutter系列之:做一个修改组件属性的动画

文章目录 简介flutter中的动画widgetAnimatedContainers使用举例总结 简介 什么是动画呢&#xff1f;动画实际上就是不同的图片连续起来形成的。flutter为我们提供了一个AnimationController来对动画进行详尽的控制&#xff0c;不过直接是用AnimationController是比较复杂的&a…

Colab使用教程(自己胡乱弄了半天,发现不行,还是得学一下)

文章目录 在google云盘中创建笔记本&#xff0c;并红设置笔记本的运行环境常见设置挂载云硬盘更改工作目录移动训练数据防止断链设置方法一、控制台设置方法二、安装Colab Alive 训练结果保存到硬盘中相关链接 在google云盘中创建笔记本&#xff0c;并红 云盘链接&#xff0c;…

K公司项目文件管理系统的分析与设计_kaic

摘 要 2020年的新冠疫情促进了线上办公市场的发展&#xff0c;加快了企业进入全面数字化时代的脚步。办公自动化是当今的大趋势&#xff0c;越来越多的企业采用电子文档的形式存储内外部资料。K公司是一家致力于为政府和企业提供数据安全服务的小型B2B企业&#xff0c;公司承…

Nessus 10.5 Auto Install for macOS Ventura(自动化安装 Nessus 试用版)

发布 Nessus 试用版自动化安装程序&#xff0c;支持 macOS Ventura、RHEL 9 和 Ubuntu 22.04 请访问原文链接&#xff1a;https://sysin.org/blog/nessus-auto-install-for-macos/&#xff0c;查看最新版。原创作品&#xff0c;转载请保留出处。 作者主页&#xff1a;sysin.o…