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

news2024/12/28 19:52:04

🍁 作者:知识浅谈,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-system

NAME                                             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.yaml
    
    kubectl 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_crane

kubectl get hpa ehpa-php-apache --watch

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

🍮使用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

创建 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.coloradmin.cn/o/502933.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

腾讯云轻量4核8G12M服务器带宽CPU流量系统盘测评

腾讯云轻量应用服务器4核8G12M带宽,12M公网带宽,下载速度峰值为1536KB/s,即1.5M/秒,2000GB月流量,折合每天66GB流量,系统盘为180GB SSD盘,腾讯云百科来详细说下轻量4核8G12M配置服务器CPU计算性…

【SpringCloud】Eurake注册中心与Ribbon负载均衡原理

目录 一、服务提供者与服务消费者 二、远程调用存在的问题 三、Eureka原理 四、Eureka架构 五、搭建Eureka服务 六、Eureka服务注册 七、Eureka服务发现 八、Ribbon负载均衡流程 九、Ribbon负载均衡源码 十、Ribbon负载均衡策略 十一、Ribbon饥饿加载 一、服务提供者…

【Linux】进程间通信 —— 管道

文章目录 📕 进程间通信介绍📕 匿名管道原理使用读写规则特点 📕 命名管道原理使用匿名管道和命名管道的区别 📕 进程间通信介绍 进程间通信,顾名思义,就是两个进程之间的 “交流” ,我们知道&…

Alibaba开发十年,写出这本“MQ技术手册”,看完我愣住了

前言 消息队列已经逐渐成为企业IT系统内部通信的核心手段。它具有低耦合、可靠投递、广播、流量控制、最终一致性等一系列功能,成为异步RPC的主要手段之一。虽然说,目前状况是Kafka更为火热,但更为广泛的应该还属老牌的RabbtiMQ和Alibaba自主…

Android WebRtc+SRS/ZLM视频通话(2):安装SRS

Android WebRtcSRS/ZLM视频通话(2):安装SRS 来自奔三人员的焦虑日志 接着上一章内容,继续来安装开源流媒体系统(SRS),可以按官方教程或者直接问ChatGPT安装教程,又或者百度一下照着大…

别开玩笑了!特种兵式旅游,胆小勿进!

【大学生特种兵旅游】是什么梗? 最近在多御浏览器上看新闻的时候看到一个热梗【大学生特种兵旅游】这又是什么梗!!!老阿姨震惊了! 我随即搜索了一下,看到了下面这段介绍: 近日,“特种…

【SpringBoot集成Nacos+Dubbo】企业级项目集成微服务组件,实现RPC远程调用

文章目录 一、需求环境/版本 二、须知2.1、什么是RPC?2.2、什么是Dubbo?2.3、什么是Nacos? 三、普通的SpringBoot项目集成微服务组件方案(笔者给出两种)方案一(推荐)1、导入maven依赖&#xff0…

rocketmq4.9.4 docker安装

rocketmq4.9.4 给对应的路径赋权 chmod -R 777 文件名 不然启动可能报错后者看不到容器日志 systemctl status firewalld 查看防火墙状态 https://www.jianshu.com/p/0c1c3c679ef8 Docker部署RocketMQ(4.9.4)官方镜像和控制台windows、mac、linux全平…

20230508在Ubuntu22.04下使用python3批量转换DOCX文档为TXT

20230508在Ubuntu22.04下使用python3批量转换DOCX文档为TXT 2023/5/8 16:27 在WIN10下请参考本文,在Ubuntu22.04下需要不通的插件! https://blog.csdn.net/weixin_46255747/article/details/129961988 python实现批量docx转txt docx文档放到input目录中。…

Origin如何绘制二维图形?

文章目录 0.引言1.函数绘图2.线图3.符号图4.点线符号图5.柱状/条形/饼图6.多面板/多轴图7.面积图8.专业图9.主题绘图 0.引言 因科研等多场景需要绘制专业的图表,笔者对Origin进行了学习,本文通过《Origin 2022科学绘图与数据》及其配套素材结合网上相关资…

stable diffusion模型讲解

AI模型最新展现出的图像生成能力远远超出人们的预期,直接根据文字描述就能创造出具有惊人视觉效果的图像,其背后的运行机制显得十分神秘与神奇,但确实影响了人类创造艺术的方式。 AI模型最新展现出的图像生成能力远远超出人们的预期&#xf…

PyCharm使用 Anaconda安装TensorFlow

1.安装python全家桶Anaconda 1.1 官网 https://www.anaconda.com/ 进入官网后如下图所示,点击Download即可开始下载(若无法下载,请转至清华源下载) 1.2 清华 https://repo.anaconda.com/archive/ 2.Anaconda安装 点击Next -…

libssh2交叉编译和测试

目录 官方地址:https://www.libssh2.org/ 1.源码下载 2.交叉编译 3.测试代码 官方地址:https://www.libssh2.org/ 正常来说,看官网说明和例子都能正常编译和使用,想偷个懒的就参考以下步骤。 1.源码下载 我当前看到的版本是li…

【二分查找】求解单调方程的解 C++实现

目录 1 问题2 想法3 二分查找4 实现4-1 伪代码说明4-2 C11 1 问题 有函数 f ( x ) a x ( a > 1 ) f(x)a^x(a>1) f(x)ax(a>1) ,单调递增,现在给一个正整数 N N N,求使得 f ( x ) N f(x)N f(x)N的正整数解 x x x。    2 想法 x l o g a N xl…

Spring Boot集成ShardingSphere分片利器 AutoTable (二)—— 自动分片算法示例 | Spring Cloud 46

一、前言 在前面我们通过以下章节对ShardingSphere的AutoTable 有了基础的了解: Spring Boot集成ShardingSphere分片利器 AutoTable (一)—— 简单体验 | Spring Cloud 45 书接上回,本章进行对AutoTable 支持的自动分片算法进行…

【JAVAEE】使用wait()方法和notify()方法解决线程不安全中的有序性问题

目录 1.wait()方法 2.notify()方法 3.notifyAll()方法 4.wait()和sleep()方法的区别 由于线程之间是抢占式执行的,因此线程之间执行的先后顺序难以预知。但是在实际开发中有时候我们希望合理的协调多个线程之间的执行先后顺序。 完成这个协调工作,主…

QML之HTML5画布移植(Porting from HTML5 Canvas)

移植一个HTML5画布图像到QML画布非常简单。在成百上千的例子中,我们选择了一个来移植。 螺旋图形(Spiro Graph) 我们使用一个来自Mozila项目的螺旋图形例子来作为我们的基础示例。原始的HTML5代码被作为画布教程发布。 下面是我们需要修改…

OpenGL(十)——基础光照

目录 一、前言 二、环境光照 三、漫反射光照 3.1 法向量 3.2顶点着色器 3.3 VAO属性解释 3.4 片段着色器 四、镜面光照 4.1 片段着色器 一、前言 现实世界光照十分复杂,冯氏光照模型是对现实世界光照的抽象,主要由3部分组成,环境amb…

【JAVAEE】使用synchronized关键字和volatile关键字解决线程安全问题中的原子性,内存可见性和有序性问题

目录 1.synchronized关键字---监视器锁monitor lock 1.1synchronized的特性 互斥 刷新内存 可重入 1.3synchronized使用注意事项 2.volatile关键字 2.1volatile保证内存可见性问题 MESI缓存一致性协议 内存屏障 2.2volatile解决有序性问题 3.总结synchronized和vola…