重要通知
由腾讯云联合 CSDN 推出的“腾讯云 Finops Crane 开发者集训营”活动,主要面向广大开发者,旨在通过线上直播、组织动手实验、有奖征文,开源项目贡献者招募这一系列技术实践活动中既能通过活动对 Finops Crane 开源项目有一个深入的]解,同时也能帮助广大开发者在云原生技能上有实质性收获,而且还有好多精美礼品哦!!! 还等什么跟我一起来体验一下吧!!!(全程免费哦!!)
项目开源地址
如果朋友们对开源有兴趣,或对产品感兴趣可以点击链接进入gitlab 查看哦! 不要忘记你的Star 和收藏哟!!!
介绍
Crane 是由腾讯云主导开源的国内第一个基于云原生技术的成本优化项目,遵循 FinOps 标准,已经获得FinOps基金会授予的全球首个认证降本增效开源方案。它为使用 Kubernetes 集群的企业提供了一种简单、可靠且强大的自动化部署工具。
Crane 的设计初衷是为了帮助企业更好地管理和扩展其 Kubernetes 集群,从而实现更高效的云原生应用管理。
它易于使用、高度可定制和可扩展。它提供了一组简单易用的命令行工具,使得开发者和管理员都能轻松地将应用程序部署到 Kubernetes 集群中。Crane 还支持多种云平台,并且可以根据具体的业务需求进行定制。
Crane 并已经被腾讯、网易、思必驰、酷家乐、明源云、数数科技等公司部署在生产系统,其主要贡献者来自腾讯、小红书、谷歌、eBay、微软、特斯拉等知名公司。
Crane中的成本优化
如今,随着云计算技术的不断成熟和普及,越来越多的企业选择将应用和服务部署到云端,以实现更高的灵活性、可扩展性和效率。然而,云计算也带来了新的挑战,其中最重要的一点是成本管理。因为云计算所涉及的成本非常复杂且变化万千,要想真正掌握好云计算成本就需要使用专门的工具和方法。
勝讯云 Finops Crane 就是一个专门面向云计算领域的 FinOps 解决方案。该解决方案提供了一系列功能和工具,让企业能够更好地管理云端资源,实现成本优化和ROI最大化。具体来说,Finops Crane 的主要优势包括以下几个方面:
首先,Finops Crane 提供了全方位的成本展示,能够针对 Kubernetes 资源进行多维度聚合并展示,从而帮助企业更好地了解云计算成本的情况。
其次,Finops Crane 提供了周期性的成本分析功能,可以定期分析集群资源的状态,并给出优化建议,帮助企业更好地控制和优化云计算成本。
第三,Finops Crane 提供了丰富的优化工具,可以帮助企业更新配置以达到降本的目标。这些工具细致而实用,能够有效地解决云计算成本管理时的各种挑战和问题。
综上所述,勝讯云 Finops Crane 是一套非常优秀的云计算 FinOps 解决方案,适用于不同规模的企业。该解决方案提供了全面的功能和工具,可以帮助企业有效地管理云端资源,降低成本,提高效率和服务质量。
Crane主要特征
随着云计算的快速发展,越来越多的企业选择将应用和服务部署到云端,以实现更高的灵活性、可扩展性和效率。然而,云计算也带来了新的挑战,其中最重要的一点是成本管理。因为云计算所涉及的成本非常复杂且变化万千,要想真正掌握好云计算成本就需要使用专门的工具和方法。
在这个背景下,勝讯云提供了一套非常优秀的云计算 FinOps 解决方案——Finops Crane。该解决方案不仅提供了全面的功能和工具,帮助企业有效地管理云端资源,降低成本,并提高效率和服务质量,还包括以下几个核心模块:
首先是成本可视化和优化评估。该模块可以实现云资源计费和账单数据的多维度成本分析,并利用 Prometheus 监控系统存储,在多云环境下支持不同云服务商的计费优化评估。这样,企业可以清晰地了解云计算成本的情况,快速优化成本,节约开支。
其次是推荐框架。Finops Crane 的推荐框架支持多种云资源的分析,并包含多种推荐器,如资源、副本、HPA及闲置资源推荐等,且具备可扩展性。这样企业可以根据推荐框架的指引进行配置优化,有效地提高云端资源的利用率和工作效率。
第三是基于预测的水平弹性器。在社区 HPA 的基础上,EffectiveHorizontalPodAutoscaler 支持预测、观测和周期等更多的弹性触发策略,以实现基于预测的弹性控制,提升弹性效率并保障服务质量。这一功能,充分考虑了不同时段下应用的使用情况和数据量变化,实现了更加高效和精准的弹性控制。
第四是负载感知的调度器。动态调度器根据节点的实际利用率构建了一个简单而高效的模型,并在平衡集群时过滤掉负载高的节点。这样可以有效地解决了在云计算环境中出现的负载不均衡问题,提高了资源利用率和工作效率。
第五是拓扑感知的调度器。Scheduler 和 Crane Agent 的协同作业,可以实现更加细致的资源拓扑感知调度和多种 CPU 绑定策略,解决复杂场景下“吵闹的邻居问题”,提高资源利用效率。这一功能可以让企业在高并发的场景下更好地管理和控制资源,提高了应用性能和稳定性。
最后是基于 QOS 的混部。在 Kubernetes 上运行的 Pod 的稳定性得到了 QOS 相关能力的保证。QOS 具有多维指标条件下的干扰检测和主动回避能力,并支持精确操作和自定义指标接入;此外,QOS 采用预测算法增强了弹性资源超卖能力,对集群内闲置资源进行复用和限制;同时,QOS 还具备增强的旁路cpuset管理能力,可以在绑核的同时提高资源利用效率。这一功能可以有效地提高 Kubernetes 集群的性能和可用性。
综上所述,勝讯云 Finops Crane 是一套非常优秀的云计算 FinOps 解决方案。该解决方案不仅提供了全面的功能和工具,帮助企业有效地管理云端资源,降低成本,并提高效率和服务质量,还能够满足不同规模企业的需求。我相信在未来,Finops Crane 还会继续推出更加创新和实用的功能和工具,满足不断变化的云计算市场需求。
Crane架构设计
Crane 的整体架构如下:
Craned
Craned 是 Crane 的最核心组件,它管理了 CRDs 的生命周期以及API。Craned 通 过 Deployment 方式部署且由两个容器组成:
- Craned: 运行了 Operators 用来管理 CRDs,向 Dashboard 提供了 WebApi,Predictors 提供了 TimeSeries API
- Dashboard: 基于 TDesign’s Starter 脚手架研发的前端项目,提供了易于上手的产品功能
Fadvisor
Fadvisor 提供一组 Exporter 计算集群云资源的计费和账单数据并存储到你的监控系统,比如 Prometheus。Fadvisor 通过 Cloud Provider 支持了多云计费的 API。
Metric Adapter
Metric Adapter 实现了一个 Custom Metric Apiserver. Metric Adapter 读取 CRDs 信息并提供基于 Custom/External Metric API 的 HPA Metric 的数据。
Crane Agent
Crane Agent 通过 DaemonSet 部署在集群的节点上。
架构感知
上述四个技术方案都是针对在 Kubernetes 集群中的不同需求而设计的。Craned 是 Crane 的核心组件,用于管理 CRDs 的生命周期和 API,提供了 Operators、WebApi 和 TimeSeries API 等功能;Dashboard 则是基于 TDesign’s Starter 脚手架研发的前端项目,提供易于上手的产品功能。Fadvisor 提供了一组 Exporter,可计算集群云资源的计费和账单数据,并将其存储到监控系统(如 Prometheus)中,支持多云计费的 API。Metric Adapter 则实现了一个 Custom Metric Apiserver,通过读取 CRDs 信息,提供基于 Custom/External Metric API 的 HPA Metric 数据。最后,Crane Agent 通过 DaemonSet 部署在 Kubernetes 集群的节点上,用于实现节点级别的监控和管理。这些技术方案的运用可以帮助企业在 Kubernetes 集群中提升资源利用效率、监控集群状态并进行合理的资源分配,保障服务质量,提高集群运行效率。
实操
环境安装
注意事项:本人电脑系统为: MacBook Pro M2 不同电脑安装时可能会有差别
- 安装 Docker
我直接安装的是desktop application
打开链接就是 - 安装 kubectl
这一步的安装可以直接在docker 中直接打开Kubernetes
就可以, 打开的过程中就下载好了 - 安装 Helm
直接 终端运行brew install helm
就可以下载完成后输入helm search repo bitnami
看看有没有一个表头出现,有的话就对了 , 我忘记截图了 - 安装 kind
同样终端运行brew install kind
下载完成后 输入kind create cluster --help
看下有没有对应的指令 就可以了, 同样忘记截图了
到此前期的准备工作算是完成了
本地安装 Crane
安装本地的 Kind 集群和 Crane 组件
- 新建一个文件夹,打开文件夹的终端通过
curl -sf https://raw.githubusercontent.com/gocrane/crane/main/hack/local-env-setup.sh | sh -
安装 Crane 以及其依赖 (Prometheus/Grafana)[可能要使用一下魔法] - 上面的命令执行完成之后 ,执行 下面两个命令
2.1export KUBECONFIG=${HOME}/.kube/config_crane
2.2kubectl get deploy -n crane-system
注意:一定要确保所有 Pod 都正常运行:
Pod
的启动需要一定的时间等几分钟后输入命令查看后集群状态是否都Running
(我已经等了10min了 状态如图)
出现了一个 ImagePullBackOff
错误 , 不过等了一会再次运行就成功了!!
补充一下Pod状态解释
CrashLoopBackOff 容器退出,kubelet正在将它重启
InvalidImageName 无法解析镜像名称
ImageInspectError 无法校验镜像
ErrImageNeverPul 策略禁止拉取镜像
ImagePullBackOff 正在重试拉取
RegistryUnavailable 连接不到镜像中心
ErrImagePull 通用的拉取镜像出错
CreateContainerConfigError 不能创建kubelet使用的容器配置
CreateContainerError 创建容器失败
m.internalLifecycle.PreStartContainer 执行hook报错
RunContainerError 启动容器失败
PostStartHookError 执行hook报错
ContainersNotInitialized 容器没有初始化完毕
ContainersNotReady 容器没有准备完毕
ContainerCreating 容器创建中
PodInitializing pod 初始化中
DockerDaemonNotReady docker还没有完全启动
NetworkPluginNotReady 网络插件还没有完全启动
Evicted 即驱赶的意思,意思是当节点出现异常时,kubernetes将有相应的机制驱赶该节点上的Pod。 多见于资源不足时导致的驱赶。
访问 Crane Dashboard
在终端输入指令kubectl -n crane-system port-forward service/craned 9090:9090
浏览器访问地址 http://localhost:9090/
就可以了
注意:后续的终端操作新窗口操作,每一个新窗口操作前请把配置环境变量加上
export KUBECONFIG=${HOME}/.kube/config_crane
添加本地集群
如图所示:浏览器访问Crane Dashboard 后, 进行如下操作
设置 => 添加集群 => 集群名称 => CRANE URL(当前Crane的地址就可以) => 快速填入页面地址作为集群地址 => 确认
使用 EffectiveHPA
Kubernetes HPA 支持了丰富的弹性扩展能力,Kubernetes 平台开发者部署服务实现自定义 Metric 的服务,Kubernetes 用户配置多项内置的资源指标或者自定义 Metric 指标实现自定义水平弹性。
EffectiveHorizontalPodAutoscaler(简称 EHPA)是 Crane 提供的弹性伸缩产品,它基于社区 HPA 做底层的弹性控制,支持更丰富的弹性触发策略(预测,观测,周期),让弹性更加高效,并保障了服务的质量。
- 提前扩容,保证服务质量:通过算法预测未来的流量洪峰提前扩容,避免扩容不及时导致的雪崩和服务稳定性故障。
- 减少无效缩容:通过预测未来可减少不必要的缩容,稳定工作负载的资源使用率,消除突刺误判。
- 支持 Cron 配置:支持 Cron-based 弹性配置,应对大促等异常流量洪峰。
- 兼容社区:使用社区 HPA 作为弹性控制的执行层,能力完全兼容社区。
安装Metrics Server
依次执行以下命令安装 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 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
输出结果如图:
增加负载
执行命令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
进行监控数据
界面展示
集群总览
成本洞察->集群总览
整体来说还是不错的
实验环境清理
实验完成后可以通过 kind delete cluster --name=crane
将本地的集群清理删除
总结
在使用勝讯云 Finops Crane 时从环境搭建到运行整体感觉上还是很丝滑的, 遇见的一些问题,助教也会积极解答,也让自己进一步成长了🤡,不过还是存在一些小小的问题, 搭建过程中,有些依赖下载太慢了, 当然不排除我自身网络的原因哈😀 , 其次
WEB
端的页面设计及展现上并不是很友好, 例如添加集群时, url 的输入时 反斜杠 总是加不上去,必须先输入后面的字符之后再回来输入反斜杠才可以 , 折扣这里也存在会出现负数的情况, 另外,如果输入一个没有的集群, 没有任何提示 , 在其他页面展示出来的内容是错版的,这块个人觉的还是多多修复一下比较好 ,毕竟核心代码再牛,但是展示出来很low , 也是很让人捉急啊!
另一个方面的话,不得不说<由腾讯云主导开源的国内第一个基于云原生技术的成本优化项目的Crane
> 在一定程度上确实很牛的,在架构上针对在Kubernetes
集群中的不同需求而设计看起来就是经过了深思熟虑之后的决定了, 框架底层的逻辑也是硬的一批,整体感知说实在的只有一个字"真牛啊!!",如果对这个产品感兴趣的话,可以搭建一下,一起玩一玩的,不错呦!!!
结语
以上所写的个人观点,仅为本人在进行实操,及整体体验过程中的部分心得体会,如有问题欢迎评论区留言.
---------------------------------------------------------完结撒花-----------------------------------------------------------------