前言:
有幸参加了腾讯云Finops Crane 集训营,学到了很多东西,现在将内容分享给大家。
Finops Crane :是一个基于 FinOps 的云资源分析与成本优化平台。
它的目标是希望在保证客户应用运行质量的前提下,实现极致的降本。
今天学习一下相关的内容
文章标记颜色说明:
- 黄色:重要标题
- 红色:用来标记结论
- 绿色:用来标记一级论点
- 蓝色:用来标记二级论点
1 问题思考
我们先思考两个问题
- 什么是云成本
- 上云之后,如何管理服务器以及控制云成本
随着云计算的普及,越来越多的企业开始将其业务迁移到云上。 那如何控制云成本,就成了一个需要关注的问题。
云成本:是指企业使用云计算服务所需支付的费用
云成本类型:
计算资源成本:虚拟机、容器、数据库等计算资源的使用费用。
存储资源成本:云存储、备份和恢复服务等存储资源的使用费用。
网络资源成本:云内网络、云间网络、公网网络等网络资源的使用费用。
应用程序成本:云应用程序的使用费用。
其他杂项成本:安全服务、支持和维护服务等其他费用。
那下一步就需要思考下面这个问题了。
从上面成本类型可以看出来,云计算的成本比传统的 IT 环境更加复杂和难以管理,因为它涉及很多种不同的服务、资源和计费模式。
这也让我们很难准确地估算和控制云计算的成本,从而导致了高昂的费用支出。
为了解决这个问题,云成本管理工具就出现了。
开源社区、一些组织开始开发和维护一些成本管理工具,以帮助企业更好地管理其云计算成本。
这些工具可以帮助企业实时监控其云资源的使用情况,识别出潜在的成本问题,并提供优化建议,从而帮助企业降低云计算的成本。
同时,这些工具还可以帮助企业了解其在不同云服务提供商之间的成本差异,从而更好地制定云战略和预算计划。
云成本管理工具开源项目
以下是几个开源的云成本管理工具项目:
FinOps Crane:一个开源的云成本管理工具,是一个基于 FinOps 的云资源分析与成本优化平台。
Cloud Custodian:是一个开源的云成本管理和资源优化工具,可以自动化云资源管理和成本优化。
Costimator:一个开源的云成本管理工具,可以实时跟踪和分析在云中的成本。
Kubecost:一个开源的Kubernetes成本和性能管理工具,侧重于表达服务在Kubernetes上的成本和性能。
CostModel:一个开源的云成本建模工具,可以建立云中的成本模型,实现更好的成本管理和优化。
这些开源的云成本管理工具,可以更好管理在云中的资源使用和成本,提供:
- 实时的成本分析
- 预算管理
- 资源利用率分析
等功能,从而更好地控制云服务成本。
今天我们详细学习一下FinOps Crane
2 FinOps Crane介绍
2.1 什么是FinOps
先简单了解一下:什么是FinOps
FinOps(Financial Operations)是一种管理云计算成本的方法论,它主要是希望可以帮助企业更好地了解他们在云中使用资源的成本,并优化他们的支出。
FinOps 方法论强调将云计算成本视为一个团队的责任,而不仅仅是财务或 IT 部门的责任。
FinOps 的目标是让组织在云中获得更好的价值,同时控制成本。为了实现这一目标,提出了一系列最佳实践,其中有:
成本意识
成本可见性
成本优化
成本控制
成本预测
FinOps Crane,就是在这一套理论的前提下,被提出来的。
它的目标也与FinOps高度相似,都是希望可以帮助组织更好地管理云计算成本,提高云资源的利用率和效率,从而实现更好的业务结果。
2.2 主要功能
Crane 它本身是一种云成本管理工具。与 Kubernetes /其他工具,集成之后就是一种容器编排的开源工具,
云成本管理工具
作为一个云成本管理工具,它主要用于帮助用户在多云环境中进行成本管理和优化。
其主要功能包括:
- 成本可视化
- 成本分析
- 预算和警报
- 自动化优化
- 多云管理
⭐️成本可视化⭐️
Crane 提供了可视化的仪表板,我们可以直观地了解多个云平台上的成本和使用情况。
⭐️成本分析⭐️
Crane 可以对多个云平台的账户成本进行深入分析,帮助我们找出成本高昂的资源和服务,并提供优化建议。
⭐️预算和警报⭐️
Crane 支持设置预算和警报,让我们能够及时获知其成本超支情况,并采取相应的措施。
⭐️自动化优化⭐️
Crane 可以自动识别并优化云环境中的资源和服务,以降低成本并提高效率。
例如,它可以根据实际使用情况自动调整计算资源的规模,比如有的使用多,就会自动去调整增加,从而确保我们服务器最佳性能和最低成本。
⭐️多云管理⭐️
Crane 可以管理多个云平台的账户和资源,如果在多个云厂商都有部署,就十分方便。
它为我们提供一站式的云成本管理解决方案。
容器编排工具
与 Kubernetes 集成之后,作为容器编排工具,它主要用于管理和协调 Docker 容器和 Kubernetes pod。
其主要功能包括:
- 容器编排
- 容器管理
- 负载均衡
- 服务发现
- 自动扩展
- 日志管理
- 安全管理
⭐️容器编排⭐️
Crane 提供了一个简单的 YAML 文件格式,用于定义容器编排方案,包括容器的镜像、端口映射、环境变量、数据卷等。
⭐️容器管理 ⭐️
Crane 可以通过命令行或 Web 界面对容器进行启动、停止、重启、删除等操作。
⭐️负载均衡⭐️
Crane 可以通过反向代理实现容器的负载均衡,支持多种负载均衡算法。
⭐️服务发现⭐️
Crane 支持通过 DNS 或 HTTP API 实现服务发现,支持自动注册和注销服务。
⭐️自动扩展⭐️
Crane 支持根据负载情况自动扩展容器实例数量,提高应用的可用性和性能。
⭐️日志管理⭐️
Crane 可以收集和管理容器的日志,支持将日志导出到外部存储系统。
⭐️安全管理⭐️
Crane 支持通过访问控制和安全加固等措施提高容器的安全性。
⭐️⭐️总结 ⭐️⭐️
总的来说,:
- gocrane/Crane 提供了全面的云成本管理和优化功能,帮助我们在多云环境中实现更好的成本控制和效率提升。
- 另外,与其他工具集成之后,Crane 也可以是一个功能强大的容器编排工具,可以帮助我们快速搭建和管理容器化应用。
下面是功能介绍示意图:
2.5 项目架构
项目架构图如下所示:
核心组件介绍
核心组件有:
- Craned
- Fadvisor
- Metric Adapter
- Crane Agent
⭐️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⭐️
是一个用于在 Kubernetes 集群中管理 Docker 镜像的工具
通过
DaemonSet
部署在集群的节点上。
2.5 开源地址
项目GitHub地址:gocrane/crane
3 实战演练
环境要求
- kubectl
- Kubernetes 1.18+
- Helm 3.1.0
- Kind 0.16+
需要先安装k8s、docker相关,具体步骤:
- 安装 kubectl
- 安装 Helm
- 安装 kind
- 安装 Docker
- 安装Crane
3.1 安装kubectl
今天主要讲解crane,k8s的详细安装步骤就不展开说了,可参考官方安装步骤,链接如下:
安装工具 | Kubernetes
3.2 安装 Helm
我使用的是在线安装,步骤较简单,这里介绍下吧。
步骤如下:
除了通过官方的二进制安装包来安装 Helm 之外,还可以使用包管理器在 Linux 上在线安装 Helm。以下是在 CentOS/RHEL 系统上使用 yum 包管理器安装 Helm 的步骤:
添加 Helm 官方存储库到 yum 包管理器的源列表中:
sudo rpm --import https://baltocdn.com/helm/signing.asc sudo tee /etc/yum.repos.d/helm-stable.repo <<EOF [helm-stable] name=Helm Stable baseurl=https://baltocdn.com/helm/stable/rhel/7/\$basearch enabled=1 gpgcheck=1 repo_gpgcheck=1 gpgkey=https://baltocdn.com/helm/signing.asc EOF ````
更新 yum 包管理器的索引:
sudo yum update
安装 Helm:
sudo yum install helm
验证 Helm 是否安装成功:
helm version
如果没有任何错误信息,显示出版本,说明 Helm 安装成功。
这是helm的官方,有兴趣的可以看下:Helm
3.3 安装 kind
简单介绍下:
Kind(Kubernetes IN Docker)是一个用于在本地环境中快速创建 Kubernetes 集群的工具。它使用 Docker 作为底层虚拟化技术,可以在一台主机上创建一个或多个 Kubernetes 集群,
这些集群可以用于开发、测试或演示等用途。
安装kind,可以参考官方地址:kind – Quick Start
brew install kind
结果
3.4 安装 Docker
安装docke比较简单,可以本地创建一个install-docker.sh,复制下面的内容,
curl -sSL https://get.daocloud.io/docker | sh
curl -L https://get.daocloud.io/docker/compose/releases/download/v2.15.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
sudo systemctl start docker
sudo systemctl enable docker
docker -v
docker-compose -v
然后执行
sh install-docker.sh
就可以一键安装docker+docker-compose,如果不想要docker-compose,直接删除相关内容就行了
3.5 安装Crane⭐️⭐️⭐️
⭐️⭐️⭐️来到了重头戏,安装Crane!!!⭐️⭐️⭐️
1 安装 Crane 以及其依赖
安装 Crane 以及其依赖 (Prometheus/Grafana).
curl -sf https://raw.githubusercontent.com/gocrane/crane/main/hack/local-env-setup.sh | sh -
如果上面安装命令报网络错误,可以用本地的安装包执行安装,在命令行中执行以下安装命令:
必须在 installation 的上级目录例如:预设好的 training 跟目录中执行
# Mac/Linux bash installation/local-env-setup.sh
3 查看deploy
执行命令,查看deploy
get deploy -n crane-system
4 查看pod
执行命令
kubectl get pos -n crane-system
5 查看svc
执行命令:
kubectl get svc -n crane-system
6 查看
执行命令:
kubectl get recommendations -A
3.6 展示界面
1 添加集群
2 查看资源推荐
点击左边导航栏--成本分析-->资源推荐
4 总结&建议
总结
整体体验下来,gocrane/Crane 是一个功能丰富、易于使用的管理工具,总结一下,具有以下几个特点:
简单易用:有简单易用的用户界面和命令行界面,可以方便地监控和管理云资源的使用情况和成本。
实时监控:它能够实时监控云资源的使用情况和成本,可以及时发现资源浪费和成本异常的情况。
自动化管理:它提供了自动化管理的功能,例如自动化资源调度和分配,可以帮助用户优化资源使用和降低成本。
可视化分析:有可视化分析功能,可以直观地了解云资源的使用情况和成本。
安全性:通过加密数据传输和存储等方式来保护数据的安全
建议
gocrane/Crane 是一个有潜力的云成本管理工具,未来建议可以通过以下几个方面的发展来提高自身竞争力和用户体验:
- 增强可视化功能
- 增强自动化功能
- 提供更多的 API 和插件
- 强化成本优化
增强可视化功能
在用户界面方面,目前展示形式有些单调,gocrane/Crane 可以考虑增强可视化功能。
例如提供更多的图表和数据可视化工具,以便用户更直观地了解云资源的使用情况和成本。
增强自动化功能
自动化是云成本管理工具的重要功能之一,如果想要很好的发展,这一块肯定要进一步强化。
因此可以考虑继续增强自动化功能,例如自动化容器调度和资源分配等。
提供更多的 API 和插件
目前gocrane/Crane 提供的插件有:
- RESTful API
- Prometheus 插件
- Slack 插件
- Alertmanager 插件
- 数据库插件
- Webhook 插件
当然,官方也在不断更新和完善中……
可以考虑提供更多的 API 和插件,以便用户可以自定义和扩展工具的功能和使用方式。比如:
- GitLab CI/CD 插件
- Elasticsearch 插件
- Jira 插件
等等,主要看gocrane/Crane的未来发展规划吧
总之,上述建议仅代表个人观点,具体的发展,还是应该根据用户需求和市场趋势来确定工具的发展方向。