博客/工程

Grafana K6和Flagger的部署时间测试

2022年4月28日6分钟

在构建和部署应用程序方面,如今一种日益流行的方法是使用微服务Kubernetes。它提供了一种简单的方式来跨组织边界进行协作,并且是扩展的好方法。

但是,它带来了许多操作挑战。一个大问题是,在让生产流量达到它们之前,很难在现实生活中测试微服务。

但是有一些方法可以解决。在这篇文章中,我将查看我们在Grafana Labs这里使用的工具,以测试部署时间的各种服务之间的集成,每次更改:bob电竞频道Grafana K6测试我们的服务和弗拉格处理与Kubernetes的互动。

拼图

Grafana K6主要是性能测试工具 - 查看这个帖子要了解有关我们如何将其用于该目的的更多信息 - 它是多才多艺的。您不仅可以编写以性能为中心的负载测试,而且还可以编写结构化测试用例,烟雾测试或触摸服务HTTP API的任何类型的工作流程。可以根据各种断言来验证响应,并且可以使用响应的属性来制定进一步的请求。K6的一件很棒的事情是,它的基于JavaScript,可以更灵活。

这是一个简单的示例,调用API并检查请求持续时间:

从“ K6/HTTP”导入HTTP;从'k6'导入{sleep};导出const options = {持续时间:'1m',vus:1,阈值:{http_req_duration:['p(95)<500'],},},};导出默认函数(){const res = http.get('https://test.k6.io');睡眠(1);}

弗拉格,来自Weaveworks,用于分析Kubernetes部署。它可以启用金丝雀或蓝色/绿色版本,A/B测试以及交通镜(阴影)。它支持查询各种指标来源,以确定从前版本中,期间,期间和之后的加那利健康状况。

弗拉格本身取决于服务所示的外部流量和指标,以确定新部署的健康状况。为了模拟外部流量,还提供了负载测试仪以生成流量,然后将其完全暴露于用户。

Flagger是通过金丝雀Kubernetes资源配置的。这是一个简单的示例,说明了配置的金丝雀资源是什么样的:

种类:金丝雀元数据:名称:my-app命名空间:my-app规格:分析:间隔:1M#迭代迭代之间的长时间:1#迭代(增加流量 +分析)阈值:2#加那利之前进行了多少失败分析失败指标:...#要在每次迭代中检查的指标列表(本文未涵盖)服务:#由Flagger名称创建的服务描述:My-App端口:80 TargetPort:80 TargetRef:#参考Flagger Apiversion管理的工作负载:Apps/V1类型:部署名称:my-app

创建了这种金丝雀资源后,my-app部署配置被复制到my-app-primary部署和my-app部署被缩小。在新版本上my-app进行缩放,测试,然后晋升为-基本的

结合Grafana K6和Flagger部队

在Grbob电竞频道afana Labs,我们的目标是确保对生产进行的每项部署的正确性。我们还想跟踪部署的各种属性,例如随着时间的推移的平均请求持续时间。

Grafana K6和Flagger都不会这样做。K6不提供对部署的任何控制。它必须指向可从跑步者到达的现有服务。Flagger不提供适合所有HTTP服务的测试解决方案。它自己的负载测试仪不能根据响应拒绝金丝雀 - 它是火灾和武器客户。这意味着所有经过测试的服务都必须使用指标适当地使用,并且无法实施复杂的测试用例。

但是,当将这两个出色的工具组合在一起时,它们提供了完整的解决方案。

完成Flagger和K6之间的集成的缺少是一个简单的Flagger Webhook处理程序,它代表Flagger称为K6。与弗拉格(Flagger)一起部署时,“ Flagger-k6-webhook”提供可以运行任何K6脚本,通过Slack通知用户,并根据K6脚本中定义的阈值失败或成功支票的任何K6脚本,通过Slack通知用户的前检查前检查(在发送到金丝雀之前)。

可以使用Flagger Webhook单独配置每个金丝雀。配置传递了完整的K6脚本,这意味着用于此目的的任何脚本也可以在本地运行,以开发目的或用于其他过程。

这是结合前两个示例(来自K6和Flagger)的示例:

apiversion:flagger.app/v1beta1类型:金丝雀元数据:名称:my-app namespace:my-app spec:分析:分析:1M迭代:1个阈值:1个阈值:2个指标:... webhooks:... name:k6-load-load-test-test:超时:5M类型:前滚动URL:http://k6-loadtester.flagger/launch-test元数据:slack_channels:flagger-test脚本:|从“ K6/HTTP”导入HTTP;从'k6'导入{sleep};导出const options = {持续时间:'1m',vus:1,阈值:{http_req_duration:['p(95)<500'],},},};导出默认函数(){const res = http.get('https://test.k6.io');睡眠(1);}服务:... TargetRef:...

当前,测试运行产生的日志和结果最容易通过Slack访问。弗拉格(Flagger)和“ flagger-k6-webhook”都在本地支持松弛,因此,当我们启用两者的松弛集成时,消息以您期望的顺序出现:

在所有零件中,手动测试过程现在可以编码和自动化。这也是记录关键API端点,预期行为以及如何测试的好方法。对于新开发人员学习服务和既定开发人员提出更改的知识,这都是无价的信息。

观察Grafana K6云的结果

可以通过使用Grafana K6云,您可以在其中发送所有版本的测试结果。重要的是要注意,测试仍将在Load Tester流程中进行,而不是K6 Cloud的跑步者。(请参阅Webhook的文档有关如何设置此设置的更多信息。)

这是我们一项服务的屏幕截图,随着时间的推移,您可以看到许多部署的结果概述:

要查看每个不同请求结果的详细视图,您要做的就是单击每个运行。

下一步是什么

“ Flagger-k6-webhook”集成已经处于非常强大的状态,但是我们将随着要求的出现而继续修复和改进。但是,大多数繁重的工作是由Grafana K6和Flagger(都是非常活跃的项目)而不是集成本身完成的。

在Grafanabob电竞频道 Labs,我们拥有非常成功的试点项目来扩大内部服务的使用,我们的团队正在发现很多潜在的用例。例如,我们将探索如何在部署后如何测试服务与Slack或电子邮件的集成。希望这将导致社区也可以从中受益的集成的新功能和可用性改进。

快来找到我们存储库的讨论部分,如果您有任何疑问或反馈!