前言

很荣幸参加了由腾讯云联合CSDN推出的“腾讯云 Finops Crane 集训营”,在集训过程,从0到1体验了Crane平台的搭建,也积极参与github的发言,提交两个issue帮助提升体验感。好了,话不多说,下面跟着我一起走入Finops Crane。

FinOps(Financial Operations)是一种管理云计算成本的方法,它强调将云计算资源的成本与使用情况及业务需求相匹配,从而提高企业的效率和效益。在当前云计算环境下,FinOps已经成为了越来越多企业的管理方法。本文将会介绍Crane这个云计算成本管理工具,并详细介绍如何在实际应用中使用Crane进行云计算资源成本管理。
在这里插入图片描述


一、Crane是什么?

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

在这里插入图片描述

Crane的出现可以解决K8S原生能力的不足:

  • 资源配置浪费
    基于经验的资源配置不准导致大量浪费
  • 弹性不及时
    基于阈值的弹性的滞后性导致业务来不及弹
  • 业务稳定性
    CPU是可压缩资源,CPU承压时,所有Pod等比受损,独占式绑核能力造成较大资源浪费

二、Crane的特点

在这里插入图片描述

  • 成本透明化
    Crane可以帮助企业在云计算环境中实现资源成本的透明化管理。它可以帮助企业实时监控云计算资源的使用情况,并将其与成本进行关联,提供实时的成本分析和预测功能。这样,企业就可以更好地控制成本,提高效益。
  • 基于预测的水平弹性器
    EffectiveHorizontalPodAutoscaler 支持了预测驱动的弹性。它基于社区 HPA 做底层的弹性控制,支持更丰富的弹性触发策略(预测,观测,周期),让弹性更加高效,并保障了服务的质量。
  • 推荐框架
    提供了一个可扩展的推荐框架以支持多种云资源的分析,内置了多种推荐器:资源推荐,副本推荐,HPA 推荐,闲置资源推荐。
  • 负载感知的调度器
    动态调度器根据实际的节点利用率构建了一个简单但高效的模型,并过滤掉那些负载高的节点来平衡集群。
  • 拓扑感知的调度器
    Crane Scheduler与Crane Agent配合工作,支持更为精细化的资源拓扑感知调度和多种绑核策略,可解决复杂场景下“吵闹的邻居问题",使得资源得到更合理高效的利用。
  • 基于 QOS 的混部
    QOS相关能力保证了运行在 Kubernetes 上的 Pod 的稳定性。具有多维指标条件下的干扰检测和主动回避能力,支持精确操作和自定义指标接入;具有预测算法增强的弹性资源超卖能力,复用和限制集群内的空闲资源;具备增强的旁路cpuset管理能力,在绑核的同时提升资源利用效率。
  • 易于使用
    Crane非常易于使用。它可以与各种云计算平台集成,并提供简单易懂的用户界面,使用户可以轻松地使用它来管理云计算资源的成本。
  • 开源
    Crane是一个开源的工具,它可以帮助企业在使用云计算资源时更好地管理成本。Crane的开源性质使得企业可以自由地使用它,并根据自己的需求进行二次开发。

三、Crane使用

1、环境准备

安装 kubectl

kubectl官方文档:https://kubernetes.io/zh-cn/docs/tasks/tools/
下载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

安装 Helm

Helm官方文档:https://helm.sh/zh/docs/intro/install/

下载

curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3

赋权

chmod 777 get_helm.sh

安装

./get_helm.sh

安装 kind

kind官方文档:https://kind.sigs.k8s.io/docs/user/quick-start/#installation

下载

curl -Lo ./kind https://kind.sigs.k8s.io/dl/v0.18.0/kind-linux-amd64

赋权

chmod +x ./kind

安装 Docker

docker官方文档:https://docs.docker.com/get-docker/
参考往期文章:docker安装部署实战详细手册

2、安装Crane

以下命令将安装 Crane 以及其依赖 (Prometheus/Grafana)

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

如果上面安装命令报网络错误,可以下载本地的安装包执行安装,在命令行中执行以下安装命令:

bash installation/local-env-setup.sh

增加环境变量

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

验证安装完成,服务都为running即可
在这里插入图片描述

3、访问dashboard

增加端口映射后,访问127.0.0.1:9090即可

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

4、页面展示

集群总览

在这里插入图片描述

在这里插入图片描述

成本洞察

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

成本分析

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

5、功能应用

智能弹性 EffectiveHPA

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

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

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

测试验证
安装 Metrics Server:

kubectl apply -f installation/components.yaml

启动一个 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

增加负载:

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 会自动扩容实例。

推荐规则

推荐框架会自动分析集群的各种资源的运行情况并给出优化建议。Crane 的推荐模块会定期检测发现集群资源配置的问题,并给出优化建议。智能推荐提供了多种 Recommender 来实现面向不同资源的优化推荐。

推荐规则查看:

kubectl get RecommendationRule

在这里插入图片描述
workloads-rule 这个推荐规则的资源对象如下所示:

  • 每隔 24 小时运行一次分析推荐,runInterval 格式为时间间隔,比如: 1h,1m,设置为空表示只运行一次。
  • 待分析的资源通过配置 resourceSelectors 数组设置,每个 resourceSelector 通过 kind、apiVersion、name 选择 K8s 中的资源,当不指定 name 时表示在 namespaceSelector 基础上的所有资源。
  • namespaceSelector 定义了待分析资源的命名空间,any: true 表示选择所有命名空间。
  • recommenders 定义了待分析的资源需要通过哪些 Recommender 进行分析。目前支持两种 Recommender:
    • 资源推荐(Resource): 通过 VPA 算法分析应用的真实用量推荐更合适的资源配置
    • 副本数推荐(Replicas): 通过 HPA 算法分析应用的真实用量推荐更合适的副本数量

四、Crane的优势

  • 1、实时监控成本
    Crane可以帮助企业实时监控云计算资源的使用情况,并将其与成本进行关联,提供实时的成本分析和预测功能。这样,企业就可以更好地控制成本,提高效益。
  • 2、优化资源利用率
    Crane可以帮助企业优化云计算资源的利用率。它可以帮助企业发现不必要的资源浪费,并提供优化建议,使企业可以更好地利用云计算资源,提高资源利用效率。
  • 3、提高决策效率
    Crane可以帮助企业更好地了解云计算资源的成本和使用情况。这样,企业就可以更好地做出决策,以满足业务需求,并在成本和效益之间取得平衡。
  • 4、智能预测
    Crane可以帮助企业完成流量智能预测,进行自动扩缩容,应对大促节假日等有规律的流量洪峰。

总结

经过一段时间的试用,说一下我对Finops Crane的个人看法。

首先从安装部署到落地实践测试的过程中,没有遇到什么疑难杂症,易用性非常好,无论是初学者还是专业人士,都可以很容易地上手使用。这使得Finops Crane在使用过程中非常方便,能够帮助用户更快地完成任务。

其次在UI页面的视觉上,清爽度很高、简约而又不简单,配置与管理上也很便捷,可以快速地进行参数设置和管理,包括一键带入、生成命令等功能。

再者在功能的体验上,确实很强大,包括成本的计算、弹性伸缩的预判、资源推荐等等让人眼前一亮,这使得公司很容易计算K8S的整体成本并减少资源的浪费。

最后有两个建议希望后续能够加强:

  • 加强用户社区的建设、加强品牌营销与推广。
    由于Finops Crane产品是一款新兴的产品,社区支持相对较弱。用户在使用过程中可能会遇到一些问题和困难,需要自己进行摸索和解决,可能会带来一些不便和障碍。
  • 加强产品的创新与技术研发,持续优化产品性能和用户体验。
    例如提升推荐命令的精准性、推荐页面异常情况等等

参考文献

关于腾讯云 Finops Crane 集训营:
Finops Crane集训营主要面向广大开发者,旨在提升开发者在容器部署、K8s层面的动手实践能力,同时吸纳Crane开源项目贡献者,鼓励开发者提交issue、bug反馈等,并搭载线上直播、动手实验组队、有奖征文等系列技术活动。既能让开发者通过活动对 Finops Crane 开源项目有深入了解,同时也能帮助广大开发者在云原生技能上有实质性收获。
为奖励开发者,我们特别设立了积分获取任务和对应的积分兑换礼品。

活动介绍送门:https://marketing.csdn.net/p/038ae30af2357473fc5431b63e4e1a78

开源项目: https://github.com/gocrane/crane

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐