腾讯云 Finops Crane 开发者集训营 - 云原生如何助力企业搞定成本优化

引言:

随着docker的技术普及,越来越多的企业加入了云计算发展进程,云原生产业发展迅猛,云原生建设投入比例明显,面对大规模的集群投入、部署、维护等问题也逐渐产生,越来越多的企业对云原生不断提出更高要求,同时云原生技术简化运维的效能提 升开始显著,但深化应用后的测试投入开始攀升。

如今,云原生技术和理念正在不断外延和丰富,越来越多的企业正在基于云原生技术,构建适应业务快速发展的技术架构和绿色可持续发展模式。在此背景下,腾讯云推出了国内首个基于云原生技术的降本增效开源平台——FinOps Crane。

FinOps定义了一系列云财务管理规则和最佳实践,强调通过数据驱动的方式,进行成本决策,使组织能够获得最大收益;腾讯云基于 FinOps 打造云资源分析与成本优化平台Crane,Crane 支持多云成本观测,优化预期测算,浪费看板以及资源优化能力,帮助分布式云架构下的云客户降本。

为推进云原生用户在确保业务稳定性的基础上做到真正的极致降本,腾讯推出了国内第一个基于云原生技术的成本优化开源项目 Crane( Cloud Resource Analytics and Economics )。

当前 Crane 项目主要贡献者包括有腾讯、小红书、谷歌、eBay、微软、特斯拉等知名公司的行业专家。


一、Crane:

腾讯云云原生成本优化平台FinOps Crane荣获“云计算中心科技奖卓越奖”,成为国内首个获得该国家级奖项的云原生工具

Crane 是国内第一个基于云原生技术的成本优化开源项目,遵循 FinOps 标准,旨在为云原生用户提供云成本优化一站式解决方案。

  1. FinOps与Crane关系:

在这里插入图片描述
FinOps 定义了一系列云财务管理规则和最佳实践等的方法论,腾讯开源了一个成本优化项目Crane,腾讯的云原生降本增效最佳实践是基于 FinOps 框架开展的。

2.Crane能力模型:

在这里插入图片描述

那能帮忙我们解决哪些业务的痛点呢?

  • 预测为王
    • 可扩展的预测算法
    • 针对大量离线指标数据评估预测算法准确性
    • 资源利用率报表
    • 避免云计算收入的失控
  • 优化为本
    • 计费方式推荐
    • 识别资源浪费
    • 优化云的应用和老本效率
    • 推动财务问责制和可见性
  • 稳定性为根
    • 异常识别
    • 识别资源浪费
    • 为跨组织的信赖及合作赋能
    • 减速商业价值的实现及业务翻新
  1. Crane有哪些功能:
    在这里插入图片描述
  • 成本可视化和优化评估
3. 提供一组 Exporter 计算集群云资源的计费和账单数据并存储到你的监控系统,比如 Prometheus。
4. 多维度的成本洞察,优化评估。通过 Cloud Provider 支持多云计费。
  • 推荐框架
1. 提供了一个可扩展的推荐框架以支持多种云资源的分析
2. 内置了多种推荐器:资源推荐,副本推荐,HPA 推荐,闲置资源推荐。
  • 基于预测的水平弹性器
1. EffectiveHorizontalPodAutoscaler 支持了预测驱动的弹性。
2. 它基于社区 HPA 做底层的弹性控制,支持更丰富的弹性触发策略(预测,观测,周期),让弹性更加高效,并保障了服务的质量。
  • 负载感知的调度器
1. 动态调度器根据实际的节点利用率构建了一个简单但高效的模型,并过滤掉那些负载高的节点来平衡集群。
  • 拓扑感知的调度器
1. Crane Scheduler与Crane Agent配合工作,支持更为精细化的资源拓扑感知调度和多种绑核策略。
2. 可解决复杂场景下“吵闹的邻居问题",使得资源得到更合理高效的利用。
  • 基于 QOS 的混部
1. QOS相关能力保证了运行在 Kubernetes 上的 Pod 的稳定性。
2. 具有多维指标条件下的干扰检测和主动回避能力,支持精确操作和自定义指标接入。
3. 具有预测算法增强的弹性资源超卖能力,复用和限制集群内的空闲资源。
4. 具备增强的旁路cpuset管理能力,在绑核的同时提升资源利用效率。
  1. Crane有什么优势:

Crane 基于两级调度能力,实现高优先级延迟敏感业务和低优先级高吞吐业务在相同节点上的混合运行:

在这里插入图片描述

1.一级调度能力,确保应用的高效调度,实现真正的“用多少占多少”。

  • 基于应用历史负载信息进行画像构建

  • 基于应用画像和节点画像实现智能调度

  • 基于DSP算法、AI算法等实现弹性预测

2.二级调度能力,在保障服务质量的同时,实现资源利用率的大幅提升。

  • 节点画像和闲置资源回收。运行在每个节点的代理采集节点负载,基于 DSP等预测算法预测未来负载走势,并将闲置资源回收成为节点扩展资源供低优业务使用。

  • 资源隔离和服务质量保障。定义资源隔离规则,确保当混部业务发生资源竞争时,高优业务的稳定性不受影响;开源方案基于 CPU Quota 完成低优业务的资源压制;闭源方案基于腾讯 TLinux 如意内核完成高优业务的绝对资源抢占。

  • 干扰检测和低优主动回避。节点代理探测资源隔离策略生效后,节点是否依然有干扰发生,如有干扰则驱逐低优业务确保高优业务不受影响。

  1. Crane的战绩:

目前,Crane 已经被腾讯、小红书、网易、思必驰、酷家乐、明源云、数数科技等公司部署在生产系统,其主要贡献者来自腾讯、小红书、谷歌、eBay、微软、特斯拉等知名公司。

  • 在腾讯内部自研业务大规模落地,部署至数百个 Kubernetes 集群,管控数百万 CPU 核,全面上线一个月内,大盘总核数缩减 25%。

  • 以腾讯内部部门集群优化为例,通过使用FinOps Crane,该部门在保障业务稳定的情况下,资源利用率提升了3倍;腾讯另一自研业务落地FinOps后,在一个月内实现了总CPU规模40万核的节省量,相当于每月成本节约超千万元。

  • 只利用Crane的Request推荐等基本能力,设备资源利用率从原来的不到10%提升了现在的16.6%,从而使得成本整体降低了30%。


二、动手实验:

1.安装项目需要的基础软件:

# 安装docker
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun

# 安装kubectl
# 下载最新发行版:
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
# 下载 kubectl 校验和文件:
   curl -LO "https://dl.k8s.io/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl.sha256"
# 基于校验和文件,验证 kubectl 的可执行文件:
echo "$(cat kubectl.sha256)  kubectl" | sha256sum –check
# 安装 kubectl
sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl
# 执行测试,以保障你安装的版本是最新的:
kubectl version --client

# 安装helm
curl https://baltocdn.com/helm/signing.asc | gpg --dearmor | sudo tee /usr/share/keyrings/helm.gpg > /dev/null
sudo apt-get install apt-transport-https --yes
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/helm.gpg] https://baltocdn.com/helm/stable/debian/ all main" | sudo tee /etc/apt/sources.list.d/helm-stable-debian.list
sudo apt-get update
sudo apt-get install helm

# 安装kind
# For AMD64 / x86_64
[ $(uname -m) = x86_64 ] && curl -Lo ./kind https://kind.sigs.k8s.io/dl/v0.19.0/kind-linux-amd64
# For ARM64
[ $(uname -m) = aarch64 ] && curl -Lo ./kind https://kind.sigs.k8s.io/dl/v0.19.0/kind-linux-arm64
chmod +x ./kind
sudo mv ./kind /usr/local/bin/kind
  • kind用来快速创建和测试k8s的工具
  • helm是k8s的包管理工具

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

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

3.确保所有 Pod 都正常运行:

export KUBECONFIG=${
    
    HOME}/.kube/config_crane
kubectl get pod -n crane-system

NAME                                              READY   STATUS    RESTARTS       AGE
craned-6dcc321sd-vnfsf                            2/2     Running   0              4m41s
fadvisor-5b6321dsd6-xpxzq                         1/1     Running   0              4m37s
grafana-3213ds54-6l24j                            1/1     Running   0              4m46s
metric-adapter-2314ds-swhfv                       1/1     Running   0              4m41s
prometheus-kube-state-metrics-432312d-p8l7c       1/1     Running   0              4m46s
prometheus-server-fdsad23223-4qqlv                2/2     Running   0              4m46s

提示:Pod 的启动需要一定的时间,等几分钟后输入命令查看后集群状态是否都 Running

4.访问 Crane Dashboard:

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

# 后续的终端操作请在新窗口操作,每一个新窗口操作前请把配置环境变量加上(不然会出现8080端口被拒绝的提示)
export KUBECONFIG=${
    
    HOME}/.kube/config_crane

5.访问 Crane Dashboard:

在这里插入图片描述- 当月总成本:过去一个月集群总成本。从安装Crane时间开始,按小时累加集群成本

  • 预估每月成本:以最近一小时成本估算未来一个月的成本。每小时成本 * 24 * 30
  • 预估CPU总成本:以最近一小时CPU成本估算未来一个月的CPU成本。每小时CPU成本 * 24 * 30
  • 预估Memory总成本:以最近一小时Memory成本估算未来一个月的Memory成本。每小时Memory成本 * 24 * 30
    在这里插入图片描述
    在这里插入图片描述5.使用智能弹性 EffectiveHPA:

Kubernetes HPA 支持了丰富的弹性扩展能力,Kubernetes 平台开发者部署服务实现自定义 Metric 的服务,Kubernetes 用户配置多项内置的资源指标或者自定义 Metric 指标实现自定义水平弹性。

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

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

5.1安装Metrics Server:

用以下命令安装 Metrics Server:

kubectl apply -f installation/components.yaml
kubectl get pod -n kube-system

5.2创建测试应用:

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

kubectl apply -f installation/php-apache.yaml

kubectl apply -f installation/nginx-deployment.yaml

5.3创建 EffectiveHPA:

kubectl apply -f installation/effective-hpa.yaml

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

kubectl get ehpa

输出类似于:

NAME         STRATEGY   MINPODS   MAXPODS   SPECIFICPODS   REPLICAS   AGE
php-apache   Auto       1         10                       0          3m39s

5.4 增加负载:

以便负载生成继续,你可以继续执行其余步骤

# 如果你是新创建请配置环境变量 
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"
kubectl get hpa ehpa-php-apache --watch

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

说明:预测数据需要两天以上的监控数据才能出现。

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

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

在这里插入图片描述
原理

Fadvisor 成本模型提供了一个方法来估计和分析每个容器,pod 或其他资源在 Kubernetes 中的资源价格。

请注意,成本模型只是预估成本,而不是替代云订单,因为实际的计费数据取决于更多原因,比如各类计费逻辑。以下是计算理论:

  • 最简单的成本模型是以相同的价格估算所有节点或 pod 的资源价格。例如,在计算成本时,您可以假设所有容器的 CPU 和 RAM 单位价格相同,2/小时核心,0.3/小时 Gib
  • 高级成本模型是通过成本分摊来估计资源价格。 这一理论的基础是不同实例类型和计费类型的每个云机器实例的价格不同,不过 CPU 和 RAM 的价格比率是相对固定的,可以通过这个价格比率来计算资源成本。

成本分摊模型下的具体的计算公式如下:

  • 集群整体成本:cvm 成本之和
  • CPU/mem 价格比率相对固定
  • cvm 的成本 = CPU 成本 * CPU 数量 + mem 成本 * mem 数量
  • CPU 申请成本:整体成本 * (CPU 占 cvm 成本的比例)得到整体 CPU 成本,再按申请的 CPU 总览占整体CPU 总量的比例计算出 CPU 申请的成本
  • namespace 下的 CPU 申请成本: CPU 申请成本按 namespace 聚合

7.实验环境清理:
动手实验完成后,可以将本地的集群清理删除:

kind delete cluster --name=crane

8.相关截图:

在这里插入图片描述在这里插入图片描述在这里插入图片描述

在这里插入图片描述


三、总结:

在整个实验过程中,Crane的官方人员和CSDN人员还是比较细心的指导,这里要特别感谢一下丢哥,在我遇到问题的时候,耐心的解答,并且协助我。特别是在Mac环境中不太熟悉。

最后,Crane是一个开源的云计算成本管理工具,它可以帮助企业在使用云计算资源时更好地管理成本。Crane可以帮助企业在云计算环境中实现资源成本的透明化管理,从而更好地控制成本,提高效益。Crane可以通过API将云计算资源的使用情况与成本进行关联,并提供实时的成本分析和预测功能。

猜你喜欢

转载自blog.csdn.net/2301_77888392/article/details/130500757