❤️作者主页:小虚竹
❤️作者简介:大家好,我是小虚竹。2022年度博客之星评选TOP 10🏆,Java领域优质创作者🏆,CSDN博客专家🏆,华为云享专家🏆,掘金年度人气作者🏆,阿里云专家博主🏆,51CTO专家博主🏆
❤️技术活,该赏
❤️点赞 👍 收藏 ⭐再看,养成习惯
文章目录
- 零、前言
- 一、什么是Crane
- 1.1、Crane 的背景和目标
- 1.2、Crane 的工作原理
- 二、Crane实战
- 2.1、安装环境
- 2.2、安装配套环境
- 安装 kubectl
- 安装 Helm
- 安装 kind
- 安装 Docker
- 配置阿里云加速
- 2.3、本地安装 Crane
- 2.4、使用智能弹性 EffectiveHPA
- 安装Metrics Server
- 创建测试应用
- 创建 EffectiveHPA
- 2.5、增加负载
- 2.6、成本展示
- 2.7、如何计算成本
- 2.8、推荐配置
- 三、Crane 的使用场景
- 四、结论
- 五、参考
零、前言
虚竹哥很荣幸参加了由腾讯云联合CSDN推出的“腾讯云 Finops Crane 集训营”,在该课程中,老师通过直播的方式手把手地指导从零到壹搭建Crane平台。虚竹哥迅速地完成了本地环境上的实验,并且得到了老师的认可,哈哈,开心~
把直播学到的内容整理成博客,分享给大家~
一、什么是Crane
Crane 是一个基于 FinOps 的云资源分析与成本优化平台。它的愿景是在保证客户应用运行质量的前提下实现极致的降本。
1.1、Crane 的背景和目标
云原生应用程序是一种以容器、微服务和云平台作为基础架构的应用程序开发和部署方式,具有高度的可扩展性、灵活性和可移植性等特点。随着云计算技术的不断发展,云原生应用程序已经成为了未来的趋势。
然而,在大规模的云原生环境下,云原生应用程序的成本管理变得越来越重要。
- 传统的基础架构和应用程序监控方法已无法满足日益复杂的云原生应用程序的管理需求;
- 云计算的成本模式由按量计费转向保留购买,企业需要一个能够有效降低运营成本和管理难度的方案。
因此,如何通过有效的成本优化,提高云原生应用程序的效率和可靠性,已成为了云原生领域的重要问题。追求更高效、更经济的云原生应用程序成本优化方案,能够对企业和组织的业务发展产生积极的影响。
为了解决这个问题,腾讯推出了 Crane 平台,该平台通过部署在 Kubernetes 集群上的控制器及其他组件,提供一种自动化、高效、可靠的方式来优化云原生应用程序成本。Crane 平台提供了一系列的优化策略和方案,可以轻松地对其云原生应用程序的成本进行跟踪、分析和管理。
1.2、Crane 的工作原理
Crane平台主要利用Kubernetes集群的能力,来对云原生应用程序进行成本优化。具体而言,它通过部署在集群上的控制器和其他组件来监控和管理云原生应用程序的资源使用情况,并提供一些自动化的策略和方案,以减少运行成本和提高效率。
实现这一目标的基础是Kubernetes(K8s),这是一个开源的容器编排平台,可以协调应用程序在容器化环境中的部署、扩展和管理。Crane平台依靠K8s提供的API和机制来实现自动化的成本优化策略。
针对不同的优化场景,Crane平台提供了多种自动化策略和方案,例如:
-
成本可视化和优化评估:
- 提供一组 Exporter 计算集群云资源的计费和账单数据并存储到你的监控系统,比如 Prometheus。
- 多维度的成本洞察,优化评估。通过 Cloud Provider 支持多云计费。
-
推荐框架:提供了一个可扩展的推荐框架以支持多种云资源的分析,内置了多种推荐器:资源推荐,副本推荐,HPA 推荐,闲置资源推荐
-
基于预测的水平弹性器:EffectiveHorizontalPodAutoscaler 支持了预测驱动的弹性。它基于社区 HPA 做底层的弹性控制,支持更丰富的弹性触发策略(预测,观测,周期),让弹性更加高效,并保障了服务的质量。
-
负载感知的调度器:动态调度器根据实际的节点利用率构建了一个简单但高效的模型,并过滤掉那些负载高的节点来平衡集群。
-
拓扑感知的调度器:Crane Scheduler与Crane Agent配合工作,支持更为精细化的资源拓扑感知调度和多种绑核策略,可解决复杂场景下“吵闹的邻居问题",使得资源得到更合理高效的利用。
-
基于 QOS 的混部:QOS相关能力保证了运行在 Kubernetes 上的 Pod 的稳定性。具有多维指标条件下的干扰检测和主动回避能力,支持精确操作和自定义指标接入;具有预测算法增强的弹性资源超卖能力,复用和限制集群内的空闲资源;具备增强的旁路cpuset管理能力,在绑核的同时提升资源利用效率。
综述,Crane平台的工作原理是基于容器编排平台Kubernetes,并通过特定的控制器和组件提供自动化的成本优化策略,为企业和组织提供高效、可靠、经济的云原生应用程序管理方案。
二、Crane实战
从零到壹搭建Crane平台
2.1、安装环境
MacBook Pro
芯片:Apple M1 Pro
内存:32 GB
2.2、安装配套环境
安装 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
验证通过:
将 kubectl 置为可执行文件:
chmod +x ./kubectl
将可执行文件 kubectl 移动到系统可寻址路径 PATH 内的一个位置:
# 查看path路径
echo $PATH
sudo mv ./kubectl /usr/local/bin/kubectl
sudo chown root: /usr/local/bin/kubectl
查看版本的详细信息:
kubectl version --client --output=yaml
安装 Helm
下载 需要的版本
解压
然后移动到需要的目录中
mv darwin-arm64/helm /usr/local/bin/helm
查看版本号:
helm version
安装 kind
下载包:
curl -Lo ./kind https://kind.sigs.k8s.io/dl/v0.18.0/kind-darwin-arm64
chmod +x ./kind
查看版本号:
kind version
安装 Docker
点击链接下载Docker for Mac:
阿里云传送门
注:对于10.10.3以上的用户
双击下载的 .dmg 文件,把应用图标拖拽到 Application 文件夹。
启动终端后,查看安装后的docker版本。
docker --version
配置阿里云加速
阿里云加速器:传送门
针对安装了Docker for Mac的用户,您可以参考以下配置步骤:
在任务栏点击 Docker Desktop 应用图标 -> Perferences,在左侧导航菜单选择 Docker Engine,在右侧输入栏编辑 json 文件。将
https://0vq0qofd.mirror.aliyuncs.com加到"registry-mirrors"的数组里,点击 Apply & Restart按钮,等待Docker重启并应用配置的镜像加速器。
验证镜像是否配置成功:docker info
2.3、本地安装 Crane
在线安装:
curl -sf https://raw.githubusercontent.com/gocrane/crane/main/hack/local-env-setup.sh | sh -
我没开github加速,所以采用本地安装包安装的方式。
链接: https://pan.baidu.com/s/1YVsHa1xHeiDPPiRi9-hMMA 提取码: 5pgf
有需要自取
用本地的安装包执行安装,在命令行中执行以下安装命令:
# 必须在 installation 的上级目录执行命令:
bash installation/local-env-setup.sh
安装过程比较久,要几分钟时间,有耐心等待一会。
确保所有 Pod 都正常运行:
export KUBECONFIG=/Users/zhw/.kube/config_crane
kubectl get deploy -n crane-system
kubectl get pod -n crane-system
如图各个服务是running的,说明启动正常。
访问 Crane Dashboard
kubectl -n crane-system port-forward service/craned 9090:9090
2.4、使用智能弹性 EffectiveHPA
EffectiveHorizontalPodAutoscaler(简称 EHPA)是 Crane 提供的弹性伸缩产品,它基于社区 HPA 做底层的弹性控制,支持更丰富的弹性触发策略(预测,观测,周期),让弹性更加高效,并保障了服务的质量。
- 提前扩容,保证服务质量:通过算法预测未来的流量洪峰提前扩容,避免扩容不及时导致的雪崩和服务稳定性故障。
- 减少无效缩容:通过预测未来可减少不必要的缩容,稳定工作负载的资源使用率,消除突刺误判。
- 支持 Cron 配置:支持 Cron-based 弹性配置,应对大促等异常流量洪峰。
- 兼容社区:使用社区 HPA 作为弹性控制的执行层,能力完全兼容社区。
安装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 installation/php-apache.yaml
kubectl apply -f installation/nginx-deployment.yaml
创建 EffectiveHPA
kubectl apply -f installation/effective-hpa.yaml
运行以下命令查看 EffectiveHPA 的当前状态:
kubectl get ehpa
输出类似于:
kubectl get hpa ehpa-php-apache --watch
随着负载请求增多,CPU利用率会不断提升,可以看到 EffectiveHPA 会自动扩容实例。
2.5、增加负载
新开一个终端:
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"
再去看EffectiveHPA的终端:
2.6、成本展示
Crane Dashboard 提供了各式各样的图表展示了集群的成本和资源用量
当月总成本:过去一个月集群总成本。从安装Crane时间开始,按小时累加集群成本
预估每月成本:以最近一小时成本估算未来一个月的成本。每小时成本 * 24 * 30
预估CPU总成本:以最近一小时CPU成本估算未来一个月的CPU成本。每小时CPU成本 * 24 * 30
预估Memory总成本:以最近一小时Memory成本估算未来一个月的Memory成本。每小时Memory成本 * 24 * 30
更多的成本分析图表可以通过登陆 Grafana 的页面或者分析源码研究。
登陆 Grafana 的方式可以通过以下命令建立一个 port-mapping:
新开一个终端:
export KUBECONFIG=${HOME}/.kube/config_crane
kubectl -n crane-system port-forward service/grafana 8082:8082
访问本地 Grafana(账号密码:admin/admin)
http://127.0.0.1:8082/grafana/login
2.7、如何计算成本
成本计算功能是由组件 Fadvisor 实现,在安装 Crane 时会一起安装,一起提供了成本展示和成本分析功能:
- Server:收集集群 Metric 数据并计算成本
- Exporter:将成本 Metric 暴露出来
在 dashboard 中开箱后就可以看到相关的成本数据,是因为在添加集群的时候我们安装了推荐的规则。
推荐框架会自动分析集群的各种资源的运行情况并给出优化建议。Crane 的推荐模块会定期检测发现集群资源配置的问题,并给出优化建议。智能推荐提供了多种 Recommender 来实现面向不同资源的优化推荐。
这些推荐规则实际上在将 K8s 集群接入Dashboard时安装上的 RecommendationRule CRD 对象:
新开一个终端:
export KUBECONFIG=${HOME}/.kube/config_crane
kubectl get RecommendationRule
2.8、推荐配置
查看一次闲置节点推荐规则的资源对象,如下所示:
kubectl get recommendationrule idlenodes-rule -oyaml
生成了多个优化建议 Recommendation 对象:
kubectl get recommendations -A
可以随便查看任意一个优化建议对象。
kubectl get recommend workloads-rule-resource-6tknq -n crane-system -oyaml
也有界面化效果:
在 dashboard 的资源推荐页面也能查看到优化建议列表。
通过查看监控查看详细的监控数据。
查看采纳命令:
执行命令即可完成优化,其实就是修改资源对象的 resources 资源数据。
三、Crane 的使用场景
下面是一些Crane平台的使用场景:
1、大规模容器化环境中的成本优化
在大规模的云原生环境中,成本优化是运营管理的一个重要问题。Crane平台提供了多种成本优化策略,来帮助企业和组织减少资源浪费和运营成本的支出。
2、开发者、运维人员和架构师的培训和实践
Crane平台除了提供完整的自动化服务外,同时也为容器化应用程序领域的开发者、运维人员和架构师提供了丰富的教程和实践指导。这些培训和实践可以帮助他们更好地理解和掌握容器化技术,从而提高整个团队的效率和生产力。
3、云计算厂商和解决方案提供商的服务支持
Crane平台可以帮助云计算厂商和解决方案提供商为其客户提供更加高效、灵活、可靠的容器化应用程序解决方案。
四、结论
通过本文的学习,知道了Crane是什么,它的背景和目标,以及Crane的工作原理是基于容器编排平台Kubernetes,并通过特定的控制器和组件提供自动化的成本优化策略,为企业和组织提供高效、可靠、经济的云原生应用程序管理方案。
此外,手把手带大家从零到壹搭建了crane平台,相信可以从搭建过程中,理解和掌握一些容器化技术。
本次分享还介绍了Crane平台的三个不错的使用场景:对大规模容器化环境中的成本优化,对开发者、运维人员和架构师的培训和实践,还有对云计算厂商和解决方案提供商的服务支持。
Crane平台是一个非常好的解决方案,相信未来,在这样一个快速变化的云原生时代中,Crane平台将会发挥越来越重要的作用。
最后的最后,@老板,给您省了这么多钱了!能给我涨多少薪!!哈哈哈~
五、参考
安装 kubectl:https://kubernetes.io/zh-cn/docs/tasks/tools/
安装 Helm:https://helm.sh/zh/docs/intro/install/
安装 kind:https://kind.sigs.k8s.io/docs/user/quick-start/#installation
我是虚竹哥,我们下文见~