一直在关注技术社区的活动,希望看到更多的新技术,最近在逛 CSDN
的过程中,让我有机会参加了腾讯云的 Finops Cran
e 开源项目的第一季活动,从而深入了解了这个项目。Crane
是一种云资源分析和成本优化平台,为云原生领域的开发者和企业提供了一种更加简单、高效的 Kubernetes
集群管理机制。Crane
的愿景是在确保客户应用程序运行质量的前提下实现极致的成本降低,这也是其最大的目标。因此,实现降低成本和提高效率的云原生应用管理是 Crane
的核心使命。接下来我们一起来了解一下Crane
的具体内容。
FinOps(Financial Operations)
是一种管理云计算成本的方法,它强调将云计算资源的成本与使用情况及业务需求相匹配,从而提高企业的效率和效益。在当前云计算环境下,FinOps
已经成为了越来越多企业的管理方法。
Crane
是一个基于 FinOps
的云资源分析与成本优化平台,它的愿景是在保证客户应用运行质量的前提下实现极致的降本。Crane
已经在腾讯内部自研业务实现了大规模落地,部署数百个 K8s
集群、管控 CPU
核数达百万,在降本增效方面取得了阶段性成果。以腾讯某部门集群优化为例,通过使用 FinOps Crane
,该部门在保障业务稳定的情况下,资源利用率提升了 3 倍;腾讯另一自研业务落地 Crane
后,在一个月内实现了总 CPU
规模 40 万核的节省量,相当于成本节约超 1000 万元/月。
以下是 Crane 的架构图,它整体上由 Craned 管理 CRDs 的生命周期以及 API,Craned 也是 Crane 的最核心组件。Fadvisor 用于提供一组 Exporter 计算集群云资源的计费和账单数据并存储至监控系统。Metric Adapter 读取 CRDs 信息并提供基于 Custom/External Metric API 的 HPA Metric 的数据。Crane Agent 通过 DaemonSet 部署在集群的节点上。底层则是 Linux 内核(Linux Kernel)。
安装前,请确保本地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-system
NAME READY STATUS RESTARTS AGE
crane-agent-5r9l2 1/1 Running 0 4m40s
craned-6dcc5c569f-vnfsf 2/2 Running 0 4m41s
fadvisor-5b685f4cd6-xpxzq 1/1 Running 0 4m37s
grafana-64656f6d54-6l24j 1/1 Running 0 4m46s
metric-adapter-967c6d57f-swhfv 1/1 Running 0 4m41s
prometheus-kube-state-metrics-7f9d78cffc-p8l7c 1/1 Running 0 4m46s
prometheus-node-exporter-4wk8b 1/1 Running 0 4m40s
prometheus-server-fb944f4b7-4qqlv 2/2 Running 0 4m46s
提示: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
Kubernetes HPA 支持了丰富的弹性扩展能力,Kubernetes 平台开发者部署服务实现自定义 Metric 的服务,Kubernetes 用户配置多项内置的资源指标或者自定义 Metric 指标实现自定义水平弹性。
EffectiveHorizontalPodAutoscaler(简称 EHPA)是 Crane 提供的弹性伸缩产品,它基于社区 HPA 做底层的弹性控制,支持更丰富的弹性触发策略(预测,观测,周期),让弹性更加高效,并保障了服务的质量。
用以下命令安装 Metrics Server:
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
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 AGE
php-apache Auto 1 10 0 3m39s
# 在单独的终端中运行它
# 如果你是新创建请配置环境变量
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 会自动扩容实例。
说明:预测数据需要两天以上的监控数据才能出现。
通过本次 Finops Crane 集训营活动,我对于新的降本增效方法有了新的认知,对于集群的管理也有了更多的理解,Crane对于k8s集群的管理效率明细提高,一是其通过可视化的界面很便捷的观测到集群状态,通过rest api方便集成到公司系统中,为开发者省去了很多繁琐的操作,无论是新入职的员工,还是集群老鸟,都可以快速的上手Crane,真正0成本进行集群治理。而且这次活动举办感觉也是满满的诚意,我先观看了 Finops Crane 开源项目的直播和开发者集训营直播,后来又实际上手体验了 Crane 的安装与使用操作。群里还有专门的助教进行讲解,可以说是十分满意了。
在使用腾讯云 Finops Crane 文档的过程中,我觉得可以将用户手册、操作教程更加细化,以加强用户的体验,因为肯定是有初次入门或者无技术经验的用户上手 Crane 的,对于这部分人群来说我觉得文档还是有点偏难;其次就是建议 Finops Crane 持续进行产品升级创新,引入更多先进的技术和方案,满足不断变化的市场和行业需求,让平台更加实用和灵活。
关于腾讯云 Finops Crane
集训营:
Finops Crane
集训营主要面向广大开发者,旨在提升开发者在容器部署、K8s层面的动手实践能力,同时吸纳 Crane
开源项目贡献者,鼓励开发者提交 issue
、bug
反馈等,并搭载线上直播、动手实验组队、有奖征文等系列技术活动。既能让开发者通过活动对 Finops Crane
开源项目有深入了解,同时也能帮助广大开发者在云原生技能上有实质性收获。
为奖励开发者,我们特别设立了积分获取任务和对应的积分兑换礼品。
活动介绍送门:https://marketing.csdn.net/p/038ae30af2357473fc5431b63e4e1a78
开源项目: https://github.com/gocrane/crane