【腾讯云 FinOps Crane 集训营】Crane平台介绍与实践

news/2024/12/4 20:15:28/

🍁 作者:知识浅谈,CSDN博客专家,阿里云签约博主,InfoQ签约博主,华为云云享专家,51CTO明日之星
📌 擅长领域:全栈工程师、爬虫、ACM算法

🤞Crane平台介绍与实践总结🤞

⛳⛳⛳

📗Crane简介

Crane是一个开源的容器编排工具 ,Crane提供了一种简单而灵活的方式来管理容器应用程序的生命周期,包括构建、部署、运行和维护。它支持多个容器编排引擎,如Docker Compose、Kubernetes和Mesos等。

主要功能

  • 🎈容器编排:
    Crane支持使用多种容器编排引擎来管理容器应用程序的生命周期,包括Docker Compose、Kubernetes和Mesos等。

  • 🎈容器构建和发布:
    Crane提供了简单而灵活的方式来构建和发布容器镜像,支持使用模板和插件来自定义构建流程。

  • 🎈应用程序部署和管理:
    Crane支持将多个容器组合成一个完整的应用程序,并提供了灵活的网络和存储选项,以便更好地管理和扩展应用程序。

  • 🎈配置管理:
    Crane使用简洁明了的配置文件格式来管理容器应用程序的配置,同时还支持使用环境变量和参数来动态配置应用程序。

  • 🎈监控和日志记录:
    Crane提供了集成的监控和日志记录功能,可以帮助开发者及时发现和解决应用程序的问题。

  • 🎈负载感知的调度器
    动态调度器根据实际的节点利用率构建了一个简单但高效的模型,并过滤掉那些负载高的节点来平衡集群。

  • 🎈拓扑感知的调度器
    Crane Scheduler与Crane Agent配合工作,支持更为精细化的资源拓扑感知调度和多种绑核策略,可解决复杂场景下“吵闹的邻居问题",使得资源得到更合理高效的利用。

  • 🎈基于 QOS 的混部
    QOS相关能力保证了运行在 Kubernetes 上的 Pod 的稳定性。具有多维指标条件下的干扰检测和主动回避能力,支持精确操作和自定义指标接入;具有预测算法增强的弹性资源超卖能力,复用和限制集群内的空闲资源;具备增强的旁路cpuset管理能力,在绑核的同时提升资源利用效率。

整体架构

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+Crane的实践

随着云原生技术的发展,越来越多的公司正在选择将应用运行在云上或者自建的 Kubernetes 集群上,但是许多机构的调研发现,绝大多数的用户集群资源利用率并不高,使用Crane帮你快速提升资源利用率。

快速搭建一个基于Kubernetes+Crane的环境优化你的集群和应用。

实验涉及技术总结:

  1. Kubernetes:Kubernetes是用于自动部署、扩展和管理“容器化应用程序”的开源系统。
  2. Crane:Crane 是一个基于 FinOps 的云资源分析成本优化平台,Crane提供了一种简单而灵活的方式来管理容器应用程序的生命周期,包括构建、部署、运行和维护。它支持多个容器编排引擎,如Docker Compose、Kubernetes和Mesos等。使用Crane,您可以轻松地将多个容器组合成一个完整的应用程序,并在集群中进行管理和扩展。
  3. Prometheus:Prometheus是一个开源的系统监控和报警系统,一种在大规模分布式系统中进行度量、收集和聚合数据的标准方法。Prometheus使用一种称为PromQL的自定义查询语言来查询和分析收集的数据,并提供了图形化的Web界面和API。
  4. Grafana:Grafana是一个流行的开源数据可视化和监控平台,最初由Torkel Ödegaard于2013年创建。它可以连接多个数据源,包括Prometheus、InfluxDB、Elasticsearch、MySQL等,并使用图表、仪表盘、警报等工具进行数据可视化和分析。

🍮环境准备

  • 安装 kubectl

    curl.exe -LO "https://dl.k8s.io/release/v1.27.1/bin/windows/amd64/kubectl.exe" (WINDOWS环境)
    

    其它系统参考对应的文档安装 kubectl:https://kubernetes.io/zh-cn/docs/tasks/tools/

  • 安装 Helm

    choco install kubernetes-helm  (windows环境)
    

    其它系统参考对应的文档安装 Helm:https://helm.sh/zh/docs/intro/install/

  • 安装 kind

    choco install kind (windows环境)
    

    其它系统参考对应的文档安装 kind:https://kind.sigs.k8s.io/docs/user/quick-start/#installation

  • 安装 Docker
    安装kind的过程中会直接安装docker,如果没有安装在官网下载安装:https://docs.docker.com/get-docker/
    注意windows上需要开始硬件虚拟化支持和数据保护机制。

🍮安装 Crane

安装本地的 Kind 集群和 Crane 组件:以下命令将安装 Crane 以及其依赖 (Prometheus/Grafana).
在线安装和本地安装二选一
1.在线安装

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

2.本地安装(安装包为固定格式的,如公司使用,需要自行配置)
需要用的安装包都在这了:点击下载

# 必须在 installation 的上级目录例如:我们预设好的 training 跟目录中执行
# Mac/Linux
bash installation/local-env-setup.sh
# Windows(git bash中打开)
./installation/local-env-setup.sh

确保所有 Pod 都正常运行:

$ export KUBECONFIG=${HOME}/.kube/config_crane
$ kubectl get pod -n crane-systemNAME                                             READY   STATUS    RESTARTS       AGE
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-server-fb944f4b7-4qqlv                2/2     Running   0              4m46s
提示:Pod 的启动需要一定的时间,等几分钟后输入命令查看后集群状态是否都 Running

访问 Crane Dashboard

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

后续的终端操作请在新窗口操作,每一个新窗口操作前请把配置环境变量加上(不然会出现8080端口被拒绝的提示)
export KUBECONFIG=${HOME}/.kube/config_crane
点击 这里 访问 Crane Dashboard
添加本地集群:
在这里插入图片描述

🍮使用智能弹性 EffectiveHPA

  1. 安装Metrics Server

    用以下命令安装 Metrics Server:

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

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

    kubectl apply -f installation/php-apache.yamlkubectl apply -f installation/nginx-deployment.yaml
    
  3. 创建 EffectiveHPA

    kubectl apply -f installation/effective-hpa.yaml
    
  4. 运行以下命令查看 EffectiveHPA 的当前状态:

    kubectl get ehpa
    

    输出类似于:

    NAME         STRATEGY   MINPODS   MAXPODS   SPECIFICPODS   REPLICAS   AGE
    php-apache   Auto       1         10                       0          3m39s
    
  5. 增加负载
    在单独的终端中运行它
    如果你是新创建请配置环境变量

    export KUBECONFIG=${HOME}/.kube/config_crane$env:KUBECONFIG="${HOME}/.kube/config_crane" (whindows使用这个)# 以便负载生成继续,你可以继续执行其余步骤
    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 结束观察
#如果你是新创建请配置环境变量 
export KUBECONFIG=${HOME}/.kube/config_cranekubectl get hpa ehpa-php-apache --watch

成本展示:
在这里插入图片描述
在这里插入图片描述

🍮使用Grafana

登陆 Grafana 的方式可以通过以下命令建立一个 port-mapping:

# 如果你是新创建请配置环境变量 
export KUBECONFIG=${HOME}/.kube/config_cranekubectl -n crane-system port-forward service/grafana 8082:8082

🥽 访问本地 Grafana(账号密码:admin/admin): http://127.0.0.1:8082/grafana/login

创建 RecommendationRule 配置后,RecommendationRule 控制器会根据配置定期运行推荐任务,给出优化建议生成 Recommendation 对象,然后我们可以根据优化建议 Recommendation 调整资源配置。

比如我们这里集群中已经生成了多个优化建议 Recommendation 对象。

kubectl get recommendations -A
NAME                            TYPE       TARGETKIND    TARGETNAMESPACE   TARGETNAME       STRATEGY   PERIODSECONDS   ADOPTIONTYPE          AGE
workloads-rule-resource-8whzs   Resource   StatefulSet   default           nacos            Once                       StatusAndAnnotation   34m
workloads-rule-resource-hx4cp   Resource   StatefulSet   default           redis-replicas   Once                       StatusAndAnnotation   34m

在 dashboard 的资源推荐页面也能查看到优化建议列表。
在这里插入图片描述
优化应用配置
在 dashboard 中开箱后就可以看到相关的成本数据,是因为在添加集群的时候我们安装了推荐的规则。

推荐框架会自动分析集群的各种资源的运行情况并给出优化建议。Crane 的推荐模块会定期检测发现集群资源配置的问题,并给出优化建议。智能推荐提供了多种 Recommender 来实现面向不同资源的优化推荐。

在成本分析>推荐规则页面可以看到我们安装的两个推荐规则。
在这里插入图片描述

🍮实践环境清除

动手实践完成后,可以将本地的集群清理删除:

kind delete cluster --name=crane

🍚总结

以上是关于Crane的介绍与应用实践,具体的使用详情可移步官方仓库了解:https://github.com/gocrane/crane
通过动手实践收获:
通过本次实践,熟悉Crane的基本概念和使用方法,使用多个容器编排引擎来管理容器应用程序,通过使用crane与Grafana以及Prometheus联合使用,充分体现出Crane不仅简单易用,可视化操作。

  • 简单易用:Crane提供了简单易用的命令行工具和配置文件格式,使得用户可以快速地构建和部署容器化应用程序。
  • 灵活性高:Crane提供了丰富的配置选项和插件,用户可以根据实际需求自定义构建流程和容器编排引擎。
  • 生态系统完备:Crane与其他工具和技术生态系统相集成,如Docker、Kubernetes、Prometheus等,可以满足各种应用场景和需求。
  • 开放源代码:Crane是一款完全开放源代码的容器编排工具,用户可以根据自己的需求进行修改和定制,官方仓库地址。

Crane是一个灵活性高、易于使用的容器编排工具,可以帮助开发者更加高效地构建、部署和管理容器化应用程序。

🍚Crane 使用方向建议

DevOps:Crane可以用于DevOps自动化流程中,帮助开发团队更加高效地构建、测试和部署应用程序。

云原生应用程序:Crane可以用于构建和管理云原生应用程序,这些应用程序通常是分布式的、可扩展的和高可用的。

容器化微服务:Crane可以用于管理容器化的微服务,帮助开发者更加容易地部署、升级和管理微服务架构。

大规模集群:Crane可以用于大规模集群的部署和管理,例如使用Kubernetes等容器编排引擎管理的集群。


http://www.ppmy.cn/news/70364.html

相关文章

Windows平台Qt超详细安装——5.9.6版本以及5.9都差不多,(仔细看,一定学会,学不会怪我)

目录 一、Qt 开发环境(Windows) 二、设置 QtCreator 编译路径 三、设置 Qt 源码路径 四、QtCreator 介绍 一、Qt 开发环境(Windows) ①官网下载地址:(对应版本,可以在这个网址下面自己找&a…

【LED子系统】五、核心层详解(二)

个人主页:董哥聊技术 我是董哥,高级嵌入式软件开发工程师,从事嵌入式Linux驱动开发和系统开发,曾就职于世界500强公司! 创作理念:专注分享高质量嵌入式文章,让大家读有所得! 文章目录…

鸿蒙Hi3861学习十五-Huawei LiteOS-M(Socket客户端)

一、简介 在网络编程的时候,不管是客户端还是服务端,都离不开Socket。那什么是Socket,这里做个简单介绍。详细的内容,可以参考这篇文章:WIFI学习一(socket介绍)_wifi socket_t_guest的博客-CSDN…

JSON+AJAX+ThreadLocal+文件上传下载

文章目录 JSON和AJAX文档介绍1. JSON介绍1.1 JSON快速入门1.2 JSON和字符串转换1.2.1 JSON转字符串1.2.2 字符串转JSON1.2.3 JSON和字符串转换细节 1.3 JSON在java中使用1.3.1 Java对象和JSON字符串转换1.3.2 List对象和JSON字符串转换1.3.3 Map对象和JSON字符串转换 2. Ajax介…

leetcode-二叉树专题

1. 判断相同 100. 相同的树 class Solution { public:bool isSameTree(TreeNode* p, TreeNode* q) {if(!p&&!q) return true;if(!p||!q) return false;if(p->val!q->val) return false;return isSameTree(p->left,q->left)&&isSameTree(p->ri…

gl-opendrive插件(车俩3D仿真模拟自动驾驶)

简介 本插件基于免费opendrive开源插件、Threejs和Webgl三维技术、vue前端框架,blender开源建模工具等进行二次开发。该插件由本人独立开发以及负责,目前处于demo阶段,功能还需待完善,由于开发仓促代码还需优化。 因此&#xff…

基于卷积的图像分类识别(七):SENet

系列文章目录 本专栏介绍基于深度学习进行图像识别的经典和前沿模型,将持续更新,包括不仅限于:AlexNet, ZFNet,VGG,GoogLeNet,ResNet,DenseNet,SENet,MobileN…

Redis的日常使用小结

一、数据类型 五大数据类型String型&#xff1a;String 是redis中最基本的数据类型,二进制安全的,即它可以包含任何数据,如序列化的对象、jpg图片,大小上限是512M。Hash型(存储消耗高于字符串): 键值对集合,适合存储对象&#xff0c;类似 Java的Map<String,Object>。Lis…