【腾讯云 Finops Crane 集训营】心得体会

一直在关注技术社区的活动,希望看到更多的新技术,最近在逛 CSDN 的过程中,让我有机会参加了腾讯云的 Finops Crane 开源项目的第一季活动,从而深入了解了这个项目。Crane是一种云资源分析和成本优化平台,为云原生领域的开发者和企业提供了一种更加简单、高效的 Kubernetes 集群管理机制。Crane 的愿景是在确保客户应用程序运行质量的前提下实现极致的成本降低,这也是其最大的目标。因此,实现降低成本和提高效率的云原生应用管理是 Crane 的核心使命。接下来我们一起来了解一下Crane的具体内容。

Crane到底是什么?

FinOps(Financial Operations)是一种管理云计算成本的方法,它强调将云计算资源的成本与使用情况及业务需求相匹配,从而提高企业的效率和效益。在当前云计算环境下,FinOps 已经成为了越来越多企业的管理方法。

Crane 是一个基于 FinOps 的云资源分析与成本优化平台,它的愿景是在保证客户应用运行质量的前提下实现极致的降本。Crane 已经在腾讯内部自研业务实现了大规模落地,部署数百个 K8s 集群、管控 CPU 核数达百万,在降本增效方面取得了阶段性成果。以腾讯某部门集群优化为例,通过使用 FinOps Crane,该部门在保障业务稳定的情况下,资源利用率提升了 3 倍;腾讯另一自研业务落地 Crane 后,在一个月内实现了总 CPU 规模 40 万核的节省量,相当于成本节约超 1000 万元/月。

Crane有哪些功能?

  • 功能结构图如下:

以下是 Crane 的架构图,它整体上由 Craned 管理 CRDs 的生命周期以及 API,Craned 也是 Crane 的最核心组件。Fadvisor 用于提供一组 Exporter 计算集群云资源的计费和账单数据并存储至监控系统。Metric Adapter 读取 CRDs 信息并提供基于 Custom/External Metric API 的 HPA Metric 的数据。Crane Agent 通过 DaemonSet 部署在集群的节点上。底层则是 Linux 内核(Linux Kernel)。

  • 系统架构图如下:

搭建Crane

安装本地的 Kind 集群和 Crane 组件

安装前,请确保本地Docker已启动。

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

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

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

必须在 installation 的上级目录例如:我们预设好的 training 跟目录中执行

bash installation/local-env-setup.sh

确保所有 Pod 都正常运行:

$ export KUBECONFIG=${HOME}/.kube/config_crane$ kubectl get deploy -n crane-systemNAME READY STATUSRESTARTS AGEcrane-agent-5r9l21/1 Running 04m40scraned-6dcc5c569f-vnfsf2/2 Running 04m41sfadvisor-5b685f4cd6-xpxzq1/1 Running 04m37sgrafana-64656f6d54-6l24j 1/1 Running 04m46smetric-adapter-967c6d57f-swhfv 1/1 Running 04m41sprometheus-kube-state-metrics-7f9d78cffc-p8l7c 1/1 Running 04m46sprometheus-node-exporter-4wk8b 1/1 Running 04m40sprometheus-server-fb944f4b7-4qqlv2/2 Running 04m46s

提示:Pod 的启动需要一定的时间等几分钟后输入命令查看后集群状态是否都 Running

kubectl get pod -n crane-system

访问 Crane Dashboard

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

后续的终端操作请在新窗口操作,每一个新窗口操作前请把配置环境变量加上

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

添加本地集群:

使用智能弹性 EffectiveHPA

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

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

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

安装Metrics Server

用以下命令安装 Metrics Server:

kubectl apply -f installation/components.yamlkubectl get pod -n kube-system
  • 创建测试应用

用以下命令启动一个 Deployment 用 hpa-example 镜像运行一个容器, 然后将其暴露为一个 服务(Service):

kubectl apply -f https://raw.githubusercontent.com/gocrane/crane/main/examples/autoscaling/php-apache.yamlkubectl 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

输出类似于:

NAME STRATEGY MINPODS MAXPODS SPECIFICPODS REPLICAS AGEphp-apache Auto 1 10 03m39s
  • 增加负载
# 在单独的终端中运行它# 如果你是新创建请配置环境变量 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"
  • 现在执行:
# 准备好后按 Ctrl+C 结束观察kubectl get hpa ehpa-php-apache --watch随着请求增多,CPU利用率会不断提升,可以看到 EffectiveHPA 会自动扩容实例。

说明:预测数据需要两天以上的监控数据才能出现。

Crane 总结&建议

通过本次 Finops Crane 集训营活动,我对于新的降本增效方法有了新的认知,对于集群的管理也有了更多的理解,Crane对于k8s集群的管理效率明细提高,一是其通过可视化的界面很便捷的观测到集群状态,通过rest api方便集成到公司系统中,为开发者省去了很多繁琐的操作,无论是新入职的员工,还是集群老鸟,都可以快速的上手Crane,真正0成本进行集群治理。而且这次活动举办感觉也是满满的诚意,我先观看了 Finops Crane 开源项目的直播和开发者集训营直播,后来又实际上手体验了 Crane 的安装与使用操作。群里还有专门的助教进行讲解,可以说是十分满意了。

在使用腾讯云 Finops Crane 文档的过程中,我觉得可以将用户手册、操作教程更加细化,以加强用户的体验,因为肯定是有初次入门或者无技术经验的用户上手 Crane 的,对于这部分人群来说我觉得文档还是有点偏难;其次就是建议 Finops Crane 持续进行产品升级创新,引入更多先进的技术和方案,满足不断变化的市场和行业需求,让平台更加实用和灵活。

关于腾讯云 Finops Crane 集训营

关于腾讯云 Finops Crane 集训营:

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

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

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