【腾讯云 Finops Crane 集训营】学习云原生成本优化

news2024/12/1 0:38:23

目录

  • 开篇
  • 介绍
  • 搭建环境
    • 第一步
    • 第二步
    • 第三步
  • 添加集群
  • 成本洞察
  • 成本分析
    • 资源推荐与副本数
    • 智能预测与自动扩缩容
      • EHPA
        • 安装Metrics Server
        • 创建测试应用
        • 创建 EffectiveHPA
        • 增加负载
        • 整体流程
  • 调度优化
    • 负载感知调度
    • 拓扑感知调度
  • 混部
  • 清理环境

开篇

某次闲逛CSDN,发现了这样一个活动:腾讯云 Finops Crane 集训营。

正好我在上一家公司负责过 Kubernetes 容器集群管理,所以抱着学(na)习(jiang)的目的报名了,想看看这个获得 FinOps 基金会授予的全球首个认证降本增效开源的方案有何过人之处。

介绍

一直以来,云原生用户在确保业务稳定和优化运营成本之间,做着两难的选择,为了保证业务的稳定运行,多数用户面临着服务资源配置浪费、现有资源难以管理、计费方式不够灵活透明等诸多问题。

在这里插入图片描述

基于越来越多的企业开始拥抱云上服务,腾讯云率先在国内推出了基于云原生技术的成本优化开源项目 Crane。

Crane 遵循 FinOps 标准,依托云原生技术,结合智能预测、自动调度、业务混部等多种手段,将优化措施应用到了云成本优化的多个关键环节,以可视化的方式帮助用户快速决策、简化运维效率、提升系统稳态、全面降本增效,从而为云原生用户提供一站式的云成本优化解决方案。

在这里插入图片描述
那么其实际效果如何呢?

众所周知网易新闻的体量是非常巨大的,而以其自身的使用来看,Grane 在落地的两个月内,管控数万 CPU 核 ,大盘总核数缩减11%,下线30台56C物理机,每个月节省10W费用。这样的降本增效效果,堪称一绝。

在这里插入图片描述

搭建环境

作为一个云服务管理的菜鸟,在先后经历了 Finops Crane 项目直播简介、开发者集训营实战指导后,我信心满满的开始实操了。

第一步

首先需要安装这几个东西:kubectl、helm、kind、Docker

分别运行下面的命令

# install kubectl
brew install kubectl
# install helm
brew install helm
# 如果 brew 安装不成功,试试
curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash
# 如果还是不能成功,需要配置下科学上网

如果是版本问题,helm 会告诉你,然后升级下系统版本就好了。我用的是个老的mac 直接在 helm 这里就卡住了,然后换了公司的电脑,还算顺利。
在这里插入图片描述

# install kind
brew install kind
# 这里需要验证下是否装成功了,运行
kind create cluster --help

最后安装下 docker
传送门,直接点击对应的版本,下载,安装就可以了。

在这里插入图片描述

第二步

接下来,本地安装 Crane 并成功启动

mkdir training 
cd training
# 这一步可能需要科学上网
curl -sf https://raw.githubusercontent.com/gocrane/crane/main/hack/local-env-setup.sh | sh -

这一步也是有点慢,最后装完的时候会提示你运行两个命令来访问 Crane Dashboard,看下图
在这里插入图片描述

# 按照上图的提示执行这两个命令,这一步配置 KUBECONFIG 环境变量,
export KUBECONFIG=${HOME}/.kube/config_crane
# 这一步部署运行 crane-system项目
kubectl get deploy -n crane-system

出现下面的截图就算是成功
在这里插入图片描述
继续运行

kubectl get pod -n crane-system

在这里插入图片描述
看到系统中的镜像状态,有的已经启动,有的则还在拉取,有的正在创建,这时候依然耐心等待,一直到所有的镜像都运行

在这里插入图片描述

第三步

直接运行下面的命令

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

这一步是把 Kubernetes 内部 service/craned 服务的端口 9090 映射到宿主机的9090,这样可以通过本地主机访问 Kubernetes 操作的内部集群

在这里插入图片描述
这样就可以访问 Grane 的 dashboard 了。

在这里插入图片描述
⚠️:后续的所有操作都需要在一个新的终端上进行,开始一个新终端,需要再次运行export KUBECONFIG=${HOME}/.kube/config_crane

添加集群

在页面中点击添加集群,地址填写: http://dashboard.gocrane.io
在这里插入图片描述

链接成功后就可以在首页看到数据信息

在这里插入图片描述

成本洞察

成本洞察可以快速查看集群中的相关信息,比如 cpu 、 内存等占用信息,各个应用信息,成本,碳排放等。这里不做过多的赘述。

在这里插入图片描述

成本分析

成本分析模块会自动分析集群中各种资源的运行情况并给出优化的建议。其实现的流程为:

在这里插入图片描述

从上图可以看出,成本分析模块会执行四个步骤:

  1. 从监控系统拉取用量数据
  2. 从Kubernetes平台拉取作业配置信息
  3. 从云厂商计费API拉取资源单价
  4. 通过多种算法分析成本组成并给出优化建议

整个分析过程中的数据会首先通过可视化面板展示给用户

在这里插入图片描述
那么,Grane 是通过什么东西进行的成本分呢?点开推荐规则,可以看到系统内置了两条规则

在这里插入图片描述
Grane正是依据这两个文件中的规则来进行成本分析的。

我们可以运行这个命令(新终端):kubectl get RecommendationRule,来查看这两个内置的文件。

在这里插入图片描述

资源推荐与副本数

通过上面的成本分析,最后会生成一个资源推荐列表,并且资源推荐会提供多种 Recommender 来实现针对不同资源的优化建议。

这样做的一个显而易见的好处在于,我们在配置应用资源时常常是基于自己的经验或者网上的信息来设置 request 和 limit,但是这种设置是否真的适用于当前场景犹未可知。

通过成本分析的算法分析应用的真实用量,从而推断出更有效的资源配置,可以帮助我们大大提升集群的资源利用效率。

在这里插入图片描述

当然,对于副本数也是一样的。大部分用户在创建应用资源时通常基于过往经验来配置副本数。副本数推荐算法能够分析应用的真实用量,因此能推荐给用户更合适的副本配置,参考它可以大大提升集群的资源利用率。

在这里插入图片描述

智能预测与自动扩缩容

除了推荐的相关内容,成本分析还列出了一段时间内的闲置节点,从而让用户根据需要来自由的扩容或者缩容。

⚠️:应用在监控系统(比如 Prometheus)中的历史数据越久,推荐结果就越准确,建议生产上超过两周时间。对新建应用的预测往往不准。

在这里插入图片描述

EHPA

当然了,除了手动的扩容与缩容,Grane 还能自动实现扩缩容。Grane 基于社区 HPA 做底层的弹性控制实现了一个名为 EffectiveHorizontalPodAutoscaler(简称 EHPA)的弹性伸缩产品,支持丰富的弹性触发策略(预测,观测,周期),例如:

  • 提前扩容:算法预测未来的流量洪峰,如保证节假日的流量洪峰,避免服务器突增大量流量导致的拥堵甚至宕机。
  • 减少无效缩容:预测未来可减少不必要的缩容,稳定工作负载的资源使用率,消除突刺误判。
  • 支持 Cron 配置:支持 Cron-based 弹性配置,应对大促等异常流量洪峰。
  • 兼容社区:使用社区 HPA 作为弹性控制的执行层,能力完全兼容社区。

EHPA 采用时间序列算法(FFT快速傅里叶变换算法),基于 Custom Metric,可靠性与准确性都比较高,而且完全兼容社区 HPA ,支持 Dryrun 观测,指标支持 Prometheus Metric,可以说是 Grane 的超级手指。

那么如何使用这个超级手指呢?

安装Metrics Server

首先安装 Metrics Server,依然是在新的那个终端上运行下面的命令:

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

可以看到这样的数据即是成功

在这里插入图片描述

增加负载

# 在单独的终端中运行它
# 如果你是新创建请配置环境变量 
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"
# 现在执行
# 准备好后按 Ctrl+C 结束观察
kubectl get hpa ehpa-php-apache --watch

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

整体流程

其整体流程如下图所示:

在这里插入图片描述

调度优化

Kubernetes 原生调度器只能通过资源的 requests 值来调度 pod,这很容易导致负载不均的问题:

  • 实际负载与资源请求相差不大,导致很大概率出现稳定性问题。

  • 实际负载远小于资源请求,导致资源的巨大浪费。

基于这个问题,Grane 也交出了一份比较给力的答卷。Crane-scheduler 是一个可以实现负载感知调度和拓扑感知调度的调度器插件。

在这里插入图片描述

负载感知调度

  1. 基于真实负载的调度器
  2. 底层依赖 Prometheus 采集的真实负载,代替Request值
  3. 引入节点历史负载指标 (1h内最大利用率,1天内最大利用率),感知业务波峰

在这里插入图片描述

如图所示:根据预选策略(剔除高负载节点)和优选策略(优先低负载节点),动态地调度任务到不同的节点上,以达到负载均衡的目的,可以有效地提高系统的资源利用率和任务执行效率。

在这里插入图片描述

拓扑感知调度

  1. 优先选择Pod能绑定在单NUMA Node内的节点
  2. 优先选择在同一个NUMA Socket内的NUMA Node
  3. 优先选择空闲资源更多的NUMA Node
  4. 解决原生CPU Manager导致集群负载过低的问题

在这里插入图片描述

Grane 拓扑感知调度基于TEG星辰算力团队的技术支撑,通过感知网络的拓扑结构,将任务分配到网络拓扑结构相近的节点上,从而减小任务执行的时延和能耗,并提高任务执行的效率,保证系统的性能和可靠性。

混部

  1. 业界首创无侵入架构
  2. 声明式节点和业务QoS规则管理
  3. 多算法支持
  4. 依托腾讯TencentOS的全维度资源隔离

在这里插入图片描述

混部内核确保高优业务稳定性,可参考下面的图
在这里插入图片描述

以上就是关于 Grane 的一些知识整理。

清理环境

实操完成以后,可以将本地的集群清理删除:

kind delete cluster --name=crane

由于本人也是一枚菜鸟,还在持续不断的学习之中,所以内容就先到这里了,后续学习新的内容我也会随时更新,欢迎志同道合的朋友们评论留言收藏。

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

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

相关文章

(文章复现)基于电力系统碳排放流理论的碳排放分摊模型研究(含matlab代码)

参考文献:基于电力系统碳排放流理论的碳排放分摊模型研究 之前写过一篇博客复现论文《电力系统碳排放流的计算方法初探》,那篇文章模型比较简单,没有考虑网损。(文章复现)电力系统碳排放流的计算方法初探(含matlab代码) 今天要复现的这篇文献…

1行命令本地部署 AgentGPT

本地部署 AgentGPT 部署 AgentGPT访问 AgentGPT 部署 AgentGPT 运行下面命令部署 AgentGPT,输入你的 OpenAI Key, git clone https://github.com/reworkd/AgentGPT.git; cd AgentGPT; ./setup.sh --docker访问 AgentGPT 使用浏览器打开 http://localh…

万得后端一面

目录 1.说说重载和重写2.内连接和外连接3.如果有一个任务来了,线程池怎么运行5.hashset怎么判断重复6.list和set说说7.说说有哪些list8.单例模式的饿汉式和懒汉式,怎么样可以防止反射。9.volatile关键字说说 1.说说重载和重写 1、重载发生在本类&#x…

MySQL创建索引时提示“Specified key was too long; max key length is 767 bytes”

MySQL创建索引时提示“Specified key was too long; max key length is 767 bytes” 问题描述 数据库RDS MySQL版在创建表索引时,出现如下错误信息。 Error 1071: Specified key was too long; max key length is 767 bytes.ERROR 1709 (HY000): Index column siz…

基于ESP32/ESP8266的单通道LoRaWAN网关设计-网页界面介绍

资料下载链接》》 网页界面介绍 对于单通道网关的第六版用户界面,我们专注于 Web 界面。本文档仅涉及 Web 界面。有几个部分要讨论: 用户界面说明web界面可以设置哪些参数单通道接口配置涉及的文件。 Web 界面的各个部分 启动 Web 界面时&#xff0…

【评测】腾讯云服务器的性能怎么样?

转载请注明出处:小锋学长生活大爆炸[ http://xfxuezhang.cn] 最近腾讯云推出了5年款服务器,性价比非常的高。但这么便宜的服务器,性能怎么样呢?学长特地领取了新人试用版测试了一下性能,这里与大家分享一下。 服务器领…

与对应负数同时存在的最大正整数

一、2441. 与对应负数同时存在的最大正整数 思路 这个题我想的是将数组中的负数全部找出来放进另一数组,然后再将原数组的元素与与之相比,如果相加等于0,那么就使num; 代码实现 int findMaxK(int* nums, int numsSize){int max0…

学系统集成项目管理工程师(中项)系列21b_整体管理(下)

1. 监控项目工作 1.1. 跟踪、审查和报告项目进展,以实现项目管理计划中确定的绩效目标的过程 1.2. 输入 1.2.1. 项目管理计划 1.2.2. 进度预测 1.2.2.1. 基于实际进展与进度基准的比较而计算出进度预测 1.2.2.1.1. 完工尚需时间估算(ETC) 1.2.2.1.2. 进度偏差(SV…

威胁报告检测到物理后果呈指数增长的OT网络攻击

2023年威胁报告 - 具有物理后果的 OT 网络攻击 在过去一年(2022 年),我们看到了 57 起针对工业系统的 OT 相关网络攻击,这些攻击在现实世界中造成了物理后果。这是我们在 2021 年看到的 22 次类似攻击的 2.5 倍多,是 …

网路通信-路由交换协议

目录 一、什么是协议 二、为什么要有协议 三、协议分类 (1)OSI通信模型 (2)tcp/ip通信模型 (3)数据传输的过程 1.传输路线 2.发送者封装数据 3.数据经过交换机 4.数据经过路由器 5.路由器转发到目…

深度学习环境配置系列文章(四):WSL2配置Windows11和Linux双系统

深度学习环境配置系列文章目录 第一章 专业名称和配置方案介绍 第二章 Anaconda配置Python和PyTorch 第三章 配置VS Code和Jupyter的Python环境 第四章 WSL2配置Windows11和Linux双系统 第五章 配置Docker深度学习开发环境 第四章文章目录 深度学习环境配置系列文章目录前言一…

横截面收益率(二) 阿尔法策略是如何构建的

资本资产定价模型自从首次被提出以来在金融经济学中一直处于中心地位。 在一系列简化假定条件下,资本资产定价模型表明,任何证券的收益率与该证券 的系统性风险(或者贝塔值)呈线性关系。因此,依据资本资产定价模型横截…

【STM32】基础知识 第十三课 中断

【STM32】基础知识 第十三课 中断 概述中断是什么中断的作用 & 意义STM32 中断体系NVIC中断向量表STM32 中断优先级基本概念 STM32 外部中断器 (EXTI)EXTI 简介EXTI 配置 AFIOAFIO 与中断 案例 概述 今天小白我将带领大家详细介绍 STM32 单片机中的中断处理机制, 包括中断…

Python每日一练(20230514) 不同路径 I\II\III UniquePaths

目录 1. 不同路径 I Unique Paths 1 2. 不同路径 II Unique Paths 2 3. 不同路径 III Unique Paths 3 🌟 每日一练刷题专栏 🌟 Golang每日一练 专栏 Python每日一练 专栏 C/C每日一练 专栏 Java每日一练 专栏 1. 不同路径 I Unique Paths 1 一个…

Java每日一练(20230514) 滑动窗、最大子序和、转罗马数字

目录 1. 滑动窗口最大值 🌟🌟 2. 最大子序和 🌟 3. 整数转罗马数字 🌟🌟 🌟 每日一练刷题专栏 🌟 Golang每日一练 专栏 Python每日一练 专栏 C/C每日一练 专栏 Java每日一练 专栏 1.…

C/C++每日一练(20230514) 全排列、分数转小数、排序链表去重II

目录 1. 全排列 🌟🌟 2. 分数到小数 🌟🌟 3. 删除排序链表中的重复元素 II 🌟🌟 🌟 每日一练刷题专栏 🌟 Golang每日一练 专栏 Python每日一练 专栏 C/C每日一练 专栏 Ja…

【C++】unordered_map与unordered_set(系列关联式容器)

文章目录 1.unordered系列关联式容器2. unordered_map3.unordered_set 1.unordered系列关联式容器 在C98中,STL提供了底层为红黑树结构的一系列关联式容器,如map和set,它们在查询时效率可达logN,即最差情况下需要比较红黑树的高度…

【UnavailableInvalidChannel: The channel is not accessible or is invalid.】

Collecting package metadata (current_repodata.json): failedUnavailableInvalidChannel: The channel is not accessible or is invalid.channel name: simplechannel url: http://pypi.douban.com/simpleerror code: 404.condarc以点开头,一般表示 conda 应用程…

前端016_文章管理模块_列表功能

文章管理模块_列表功能 1、需求分析2、Mock模拟接口数据3、Api调用接口4、列表模版6、分页查询7、条件查询1、需求分析 文章管理模块主要进行对文章的增删改查,一篇文章可以选择多个标签。 首先开发模块中的列表功能,包含数据列表、分页、查询。 2、Mock模拟接口数据 请求…

『MySQL 实战 45 讲』14 - count(*) 慢的根本原因

count(*) 慢的根本原因 count(*) 的实现方式 MyISAM 引擎会把一个表的总行数存在了磁盘上InnoDB 引擎需要把数据一行行读出,累计计数 为什么 InnoDB 不跟 MyISAM 一样,也把数字存起来呢 由于多版本并发控制的原因(和快照读有关系&#xf…