文章目录
- 前言
- 一、Crane是什么?
- 二、Crane的特点
- 三、Crane使用
- 1、环境准备
- 安装 kubectl
- 安装 Helm
- 安装 kind
- 安装 Docker
- 2、安装Crane
- 3、访问dashboard
- 4、页面展示
- 集群总览
- 成本洞察
- 成本分析
- 5、功能应用
- 智能弹性 EffectiveHPA
- 推荐规则
- 四、Crane的优势
- 总结
- 参考文献
前言
很荣幸参加了由腾讯云联合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产品是一款新兴的产品,社区支持相对较弱。用户在使用过程中可能会遇到一些问题和困难,需要自己进行摸索和解决,可能会带来一些不便和障碍。 - 加强产品的创新与技术研发,持续优化产品性能和用户体验。
例如提升推荐命令的精准性、推荐页面异常情况等等
参考文献
- Crane github:https://github.com/gocrane/crane
- Crane官网: https://gocrane.io/