【腾讯云 Finops Crane 集训营】老板喜欢降本增效?学会 Crane,让腾讯每月省千万的奇迹在你手中上演

news2024/9/23 12:39:44

❤️作者主页:小虚竹

❤️作者简介:大家好,我是小虚竹。2022年度博客之星评选TOP 10🏆,Java领域优质创作者🏆,CSDN博客专家🏆,华为云享专家🏆,掘金年度人气作者🏆,阿里云专家博主🏆,51CTO专家博主🏆

❤️技术活,该赏

❤️点赞 👍 收藏 ⭐再看,养成习惯

文章目录

  • 零、前言
  • 一、什么是Crane
    • 1.1、Crane 的背景和目标
    • 1.2、Crane 的工作原理
  • 二、Crane实战
    • 2.1、安装环境
    • 2.2、安装配套环境
      • 安装 kubectl
      • 安装 Helm
      • 安装 kind
      • 安装 Docker
        • 配置阿里云加速
    • 2.3、本地安装 Crane
    • 2.4、使用智能弹性 EffectiveHPA
      • 安装Metrics Server
      • 创建测试应用
      • 创建 EffectiveHPA
    • 2.5、增加负载
    • 2.6、成本展示
    • 2.7、如何计算成本
    • 2.8、推荐配置
  • 三、Crane 的使用场景
  • 四、结论
  • 五、参考

零、前言

虚竹哥很荣幸参加了由腾讯云联合CSDN推出的“腾讯云 Finops Crane 集训营”,在该课程中,老师通过直播的方式手把手地指导从零到壹搭建Crane平台。虚竹哥迅速地完成了本地环境上的实验,并且得到了老师的认可,哈哈,开心~
在这里插入图片描述

把直播学到的内容整理成博客,分享给大家~

一、什么是Crane

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

1.1、Crane 的背景和目标

云原生应用程序是一种以容器、微服务和云平台作为基础架构的应用程序开发和部署方式,具有高度的可扩展性、灵活性和可移植性等特点。随着云计算技术的不断发展,云原生应用程序已经成为了未来的趋势。

然而,在大规模的云原生环境下,云原生应用程序的成本管理变得越来越重要。

  • 传统的基础架构和应用程序监控方法已无法满足日益复杂的云原生应用程序的管理需求;
  • 云计算的成本模式由按量计费转向保留购买,企业需要一个能够有效降低运营成本和管理难度的方案。

因此,如何通过有效的成本优化,提高云原生应用程序的效率和可靠性,已成为了云原生领域的重要问题。追求更高效、更经济的云原生应用程序成本优化方案,能够对企业和组织的业务发展产生积极的影响。

为了解决这个问题,腾讯推出了 Crane 平台,该平台通过部署在 Kubernetes 集群上的控制器及其他组件,提供一种自动化、高效、可靠的方式来优化云原生应用程序成本。Crane 平台提供了一系列的优化策略和方案,可以轻松地对其云原生应用程序的成本进行跟踪、分析和管理。

1.2、Crane 的工作原理

在这里插入图片描述
Crane平台主要利用Kubernetes集群的能力,来对云原生应用程序进行成本优化。具体而言,它通过部署在集群上的控制器和其他组件来监控和管理云原生应用程序的资源使用情况,并提供一些自动化的策略和方案,以减少运行成本和提高效率。

实现这一目标的基础是Kubernetes(K8s),这是一个开源的容器编排平台,可以协调应用程序在容器化环境中的部署、扩展和管理。Crane平台依靠K8s提供的API和机制来实现自动化的成本优化策略。

针对不同的优化场景,Crane平台提供了多种自动化策略和方案,例如:

  • 成本可视化和优化评估:

    • 提供一组 Exporter 计算集群云资源的计费和账单数据并存储到你的监控系统,比如 Prometheus。
    • 多维度的成本洞察,优化评估。通过 Cloud Provider 支持多云计费。
  • 推荐框架:提供了一个可扩展的推荐框架以支持多种云资源的分析,内置了多种推荐器:资源推荐,副本推荐,HPA 推荐,闲置资源推荐

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

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

  • 拓扑感知的调度器:Crane Scheduler与Crane Agent配合工作,支持更为精细化的资源拓扑感知调度和多种绑核策略,可解决复杂场景下“吵闹的邻居问题",使得资源得到更合理高效的利用。

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

综述,Crane平台的工作原理是基于容器编排平台Kubernetes,并通过特定的控制器和组件提供自动化的成本优化策略,为企业和组织提供高效、可靠、经济的云原生应用程序管理方案。

二、Crane实战

从零到壹搭建Crane平台

2.1、安装环境

MacBook Pro
芯片:Apple M1 Pro
内存:32 GB

2.2、安装配套环境

安装 kubectl

在这里插入图片描述
下载最新的发行版:

curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/darwin/arm64/kubectl"

在这里插入图片描述
下载 kubectl 的校验和文件:

curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/darwin/arm64/kubectl.sha256"

在这里插入图片描述

根据校验和文件,验证 kubectl:

echo "$(cat kubectl.sha256)  kubectl" | shasum -a 256 --check

验证通过:
在这里插入图片描述

将 kubectl 置为可执行文件:

chmod +x ./kubectl

将可执行文件 kubectl 移动到系统可寻址路径 PATH 内的一个位置:

# 查看path路径
echo $PATH

sudo mv ./kubectl /usr/local/bin/kubectl
sudo chown root: /usr/local/bin/kubectl

查看版本的详细信息:

kubectl version --client --output=yaml

在这里插入图片描述

安装 Helm

下载 需要的版本

在这里插入图片描述
解压
然后移动到需要的目录中

 mv darwin-arm64/helm /usr/local/bin/helm

查看版本号:

helm version

在这里插入图片描述

安装 kind

下载包:

curl -Lo ./kind https://kind.sigs.k8s.io/dl/v0.18.0/kind-darwin-arm64

chmod +x ./kind

在这里插入图片描述

查看版本号:

kind version

在这里插入图片描述

安装 Docker

点击链接下载Docker for Mac:
阿里云传送门
注:对于10.10.3以上的用户

双击下载的 .dmg 文件,把应用图标拖拽到 Application 文件夹。
在这里插入图片描述

启动终端后,查看安装后的docker版本。

docker --version

在这里插入图片描述

配置阿里云加速

阿里云加速器:传送门
在这里插入图片描述

针对安装了Docker for Mac的用户,您可以参考以下配置步骤:
在任务栏点击 Docker Desktop 应用图标 -> Perferences,在左侧导航菜单选择 Docker Engine,在右侧输入栏编辑 json 文件。将
https://0vq0qofd.mirror.aliyuncs.com加到"registry-mirrors"的数组里,点击 Apply & Restart按钮,等待Docker重启并应用配置的镜像加速器。

在这里插入图片描述
在这里插入图片描述
验证镜像是否配置成功:docker info
在这里插入图片描述

2.3、本地安装 Crane

在线安装:

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

我没开github加速,所以采用本地安装包安装的方式。

链接: https://pan.baidu.com/s/1YVsHa1xHeiDPPiRi9-hMMA 提取码: 5pgf

有需要自取
用本地的安装包执行安装,在命令行中执行以下安装命令:

# 必须在 installation 的上级目录执行命令:
bash installation/local-env-setup.sh

在这里插入图片描述
安装过程比较久,要几分钟时间,有耐心等待一会。

确保所有 Pod 都正常运行:

export KUBECONFIG=/Users/zhw/.kube/config_crane

kubectl get deploy -n crane-system

kubectl get pod -n crane-system

在这里插入图片描述

如图各个服务是running的,说明启动正常。

访问 Crane Dashboard

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

在这里插入图片描述

2.4、使用智能弹性 EffectiveHPA

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

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

安装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 installation/php-apache.yaml

kubectl apply -f installation/nginx-deployment.yaml

在这里插入图片描述

创建 EffectiveHPA

kubectl apply -f installation/effective-hpa.yaml

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

kubectl get ehpa

输出类似于:
在这里插入图片描述

kubectl get hpa ehpa-php-apache --watch

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

2.5、增加负载

新开一个终端:

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"

在这里插入图片描述

再去看EffectiveHPA的终端:
在这里插入图片描述

2.6、成本展示

Crane Dashboard 提供了各式各样的图表展示了集群的成本和资源用量
在这里插入图片描述
当月总成本:过去一个月集群总成本。从安装Crane时间开始,按小时累加集群成本
预估每月成本:以最近一小时成本估算未来一个月的成本。每小时成本 * 24 * 30
预估CPU总成本:以最近一小时CPU成本估算未来一个月的CPU成本。每小时CPU成本 * 24 * 30
预估Memory总成本:以最近一小时Memory成本估算未来一个月的Memory成本。每小时Memory成本 * 24 * 30

在这里插入图片描述
在这里插入图片描述
更多的成本分析图表可以通过登陆 Grafana 的页面或者分析源码研究。
登陆 Grafana 的方式可以通过以下命令建立一个 port-mapping:
新开一个终端:

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

kubectl -n crane-system port-forward service/grafana 8082:8082

访问本地 Grafana(账号密码:admin/admin)
http://127.0.0.1:8082/grafana/login
在这里插入图片描述
在这里插入图片描述

2.7、如何计算成本

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

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

在 dashboard 中开箱后就可以看到相关的成本数据,是因为在添加集群的时候我们安装了推荐的规则。
在这里插入图片描述
推荐框架会自动分析集群的各种资源的运行情况并给出优化建议。Crane 的推荐模块会定期检测发现集群资源配置的问题,并给出优化建议。智能推荐提供了多种 Recommender 来实现面向不同资源的优化推荐。
这些推荐规则实际上在将 K8s 集群接入Dashboard时安装上的 RecommendationRule CRD 对象:
新开一个终端:

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

kubectl get RecommendationRule

在这里插入图片描述

2.8、推荐配置

查看一次闲置节点推荐规则的资源对象,如下所示:

kubectl get recommendationrule idlenodes-rule -oyaml

在这里插入图片描述
生成了多个优化建议 Recommendation 对象:

kubectl get recommendations -A

在这里插入图片描述
可以随便查看任意一个优化建议对象。


kubectl get recommend workloads-rule-resource-6tknq -n crane-system -oyaml

在这里插入图片描述

也有界面化效果:
在 dashboard 的资源推荐页面也能查看到优化建议列表。
在这里插入图片描述
通过查看监控查看详细的监控数据。
在这里插入图片描述
查看采纳命令:
在这里插入图片描述
执行命令即可完成优化,其实就是修改资源对象的 resources 资源数据。

三、Crane 的使用场景

下面是一些Crane平台的使用场景:

1、大规模容器化环境中的成本优化
在大规模的云原生环境中,成本优化是运营管理的一个重要问题。Crane平台提供了多种成本优化策略,来帮助企业和组织减少资源浪费和运营成本的支出。

2、开发者、运维人员和架构师的培训和实践
Crane平台除了提供完整的自动化服务外,同时也为容器化应用程序领域的开发者、运维人员和架构师提供了丰富的教程和实践指导。这些培训和实践可以帮助他们更好地理解和掌握容器化技术,从而提高整个团队的效率和生产力。

3、云计算厂商和解决方案提供商的服务支持
Crane平台可以帮助云计算厂商和解决方案提供商为其客户提供更加高效、灵活、可靠的容器化应用程序解决方案。

四、结论

通过本文的学习,知道了Crane是什么,它的背景和目标,以及Crane的工作原理是基于容器编排平台Kubernetes,并通过特定的控制器和组件提供自动化的成本优化策略,为企业和组织提供高效、可靠、经济的云原生应用程序管理方案。

此外,手把手带大家从零到壹搭建了crane平台,相信可以从搭建过程中,理解和掌握一些容器化技术。

本次分享还介绍了Crane平台的三个不错的使用场景:对大规模容器化环境中的成本优化,对开发者、运维人员和架构师的培训和实践,还有对云计算厂商和解决方案提供商的服务支持。

Crane平台是一个非常好的解决方案,相信未来,在这样一个快速变化的云原生时代中,Crane平台将会发挥越来越重要的作用。

最后的最后,@老板,给您省了这么多钱了!能给我涨多少薪!!哈哈哈~

五、参考

安装 kubectl:https://kubernetes.io/zh-cn/docs/tasks/tools/
安装 Helm:https://helm.sh/zh/docs/intro/install/
安装 kind:https://kind.sigs.k8s.io/docs/user/quick-start/#installation

我是虚竹哥,我们下文见~

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

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

相关文章

SpringBoot 简单多模块构建

前言 SpringBoot系列到现在虽然代码不多,但是感觉结构很乱,随着项目的复杂性提高,代码会越来越臃肿,耦合性高。 所以SpringBoot多模块很有必要,简单来说就是由以前按包分模块变为jar包分模块。在多模块jar模式下可以将…

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

重要通知 由腾讯云联合 CSDN 推出的“腾讯云 Finops Crane 开发者集训营”活动,主要面向广大开发者,旨在通过线上直播、组织动手实验、有奖征文,开源项目贡献者招募这一系列技术实践活动中既能通过活动对 Finops Crane 开源项目有一个深入的]…

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

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

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

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

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

本文目录 PyQt5桌面应用系列鼠标不要钱,手腕还不要钱吗?PyQt5源程序python文件资源定义界面定义文件 技术要素资源文件StyleSheetsQMainWindow设置窗体几何 结论 PyQt5桌面应用系列 PyQt5桌面应用开发(1):需求分析 PyQ…

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

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

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

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

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

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

java变量与方法

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

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;…