跳转到主要内容

Galileo 实验项目

项目描述

Galileo 实验项目

此存储库包含调用galileo shell以启动实验的代码。它还包括必要组件的部署文件,并详细说明了启动实验所需的其他服务。此外,该项目旨在统一edgerun的不同子项目,使部署和实验设置变得简单。主要目标和功能包括

  • 分布式负载测试实验框架
  • 细粒度遥测数据收集
  • 任何服务的HTTP跟踪记录
  • 容器编排适应性,易于使用

此项目面向谁?

面向所有希望通过轻松配置的工作负载创建来查看资源使用情况和应用程序性能的人。所有组件都针对低性能设备(例如,树莓派)进行定制和调整,但也可在默认服务器虚拟机上运行。

可以通过执行和分析Galileo实验来回答的常见问题

  • 我的应用程序使用了多少CPU?
  • 我的应用程序在集群中的平均执行时间是多少?
  • 同一应用程序运行在两个节点上,在资源使用方面有哪些差异?
  • 一个节点上运行多个应用程序会有什么影响?

所有这些问题都可以轻松回答,并且具有简单的流程

  1. 部署基础基础设施
  2. 部署我的应用程序
  3. 启动请求
  4. 在Jupyter笔记本中分析

总结:简单的分析任务。但是,此框架还针对全面端到端测试,以评估重要的集群组件(例如,负载均衡器、调度器和扩展)。

因此,可以对上述组件的新实现进行实验。

高级概述

Kubernetes集群设置

Cluster components

概述

主要组件

集群设置包括以下主要组件

  • Kubernetes
  • 伽利略(用于客户端和实验外壳)
  • Telemd
  • 控制器(即,负载均衡器)
  • MySQL(即,MariaDB)
  • InfluxDB v2
  • Etcd(Kubernetes需要运行实例!)

Kubernetes用于托管客户端(在Pod中运行的伽利略)、遥测代理(Telemd)、负载均衡器和测试应用程序。Redis用作发布/订阅系统,通过该系统发送所有数据(即,遥测)并由伽利略外壳(即,准备和执行实验的程序)记录。伽利略外壳在MariaDB和InfluxDB中持久化数据。提供的负载均衡器实现使用etcd监视轮询算法的权重,伽利略使用Redis为客户端提供路由规则(rtbl)。

主要交互

上图描述了所有组件,并突出显示重要的交互。这些交互简而言之是

  • 客户端节点向控制器(负载均衡器)发送HTTP请求,控制器将请求转发到托管应用程序Pod的工作节点。
  • 客户端节点通过Redis报告每个请求的结果(即,跟踪)。
  • 基于Go的负载均衡器实现从etcd实例获取权重和IP地址。
  • 客户端从Redis实例(通过伽利略的rtbl设置)获取路由规则。
  • 工作节点通过Redis报告资源使用情况(即,Telemd),该信息保存在InfluxDB中。
  • 伽利略外壳启动实验,并将元数据(即,集群主机,其他数据)保存在MariaDB中。

部署

本项目为以下组件提供部署文件

  • 伽利略(用于客户端和实验外壳)
  • Telemd
  • 控制器(即,负载均衡器)

这留下了以下组件需要额外部署

  • Kubernetes
  • MySQL(即,MariaDB)
  • InfluxDB v2
  • Etcd(Kubernetes需要运行实例!)

部署文件位于deployment/kubernetes。注意,我们使用Kubernetes节点标签来安排工作(即,客户端)。在应作为客户端的节点上执行以下命令

kubectl label node <node> node-role.kubernetes.io/client=true

以下标签用于识别具有托管能力的节点(即,工作节点)

kubectl label node <node> node-role.kubernetes.io/worker=true

如果您有多个区域(即,集群),并且希望有独立的客户端,则调整zone参数(默认为main)。您可以通过以下命令轻松地对节点进行分组

kubectl label node <node> ether.edgerun.io/zone=main

伽利略工作节点

伽利略工作节点在每个客户端节点上运行,并通过Redis接收命令和路由规则。路由规则是简单的键值对,其中键表示您的服务名称,值是具有相应权重的主机列表。

您可以通过rtbl.set('service', ['127.0.0.1:8080'], [1])轻松地在程序中设置这些。

数据存储

伽利略需要以下数据组件,这些组件要么部署在集群中,要么外部部署

  • Redis(遥测和跟踪的发布/订阅)
  • MySQL(即,MariaDB)(实验元数据的持久存储)
  • InfluxDB v2(存储运行时数据 - 遥测和跟踪)

所有连接参数均通过环境变量设置。

扩展

扩展存储库旨在提供如何实现和使用项目来运行实验的示例。它将不断更新,并包括新的服务。

环境变量

以下表格显示了所有要设置的环境变量。为了方便使用,包含所有变量的.env文件(位于bin/.env)。

变量 默认 描述
galileo_expdb_driver 混合 使用SQL数据库存储实验元数据,并使用InfluxDB存储运行时数据(即,跟踪)
galileo_logging_level DEBUG 日志记录器级别(DEBUG,INFO,WARN,ERROR)
galileo_expdb_mysql_host localhost MySQL主机
galileo_expdb_mysql_port 3307 MySQL端口
galileo_expdb_mysql_db db MySQL数据库
galileo_expdb_mysql_user user MySQL用户
galileo_expdb_mysql_password 密码 MySQL密码
galileo_expdb_influxdb_url http://localhost:8086 InfluxDB URL
galileo_expdb_influxdb_token 认证令牌 InfluxDB认证令牌
galileo_expdb_influxdb_timeout 10000 InfluxDB超时时间(毫秒)
galileo_expdb_influxdb_org 组织 InfluxDB组织名称
galileo_expdb_influxdb_org_id 组织ID InfluxDB组织ID
galileo_redis_host localhost Redis主机
galileo_redis_password 可选 Redis端口
KUBECONFIG 未设置 kubeconfig路径

项目详情


下载文件

下载适用于您平台的文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。

源分发

edgerun-galileo-experiments-0.0.1.tar.gz (12.4 kB 查看散列)

上传时间

构建分发

edgerun_galileo_experiments-0.0.1-py3-none-any.whl (16.5 kB 查看散列)

上传时间 Python 3

支持者