拓冰建站拓冰建站
首页 / 资讯中心 / 正文

Consul 负载测试 AMI 构建实战:使用 Packer 定制 Consul 与 k6 压测镜像

Consul 负载测试 AMI 构建实战使用 Packer 定制 Consul 与 k6 压测镜像【免费下载链接】consulConsul is a distributed, highly available, and data center aware solution to connect and configure applications across dynamic, distributed infrastructure.项目地址: https://gitcode.com/gh_mirrors/con/consul本指南以 Consul 仓库中的test/load/packer/README.md为核心完整讲解如何用 Packer 在 AWS 上构建两类负载测试镜像预装 Consul 并接入 Datadog 遥测的 Consul AMI以及预装 k6 压测引擎的 Load Test AMI。读完本文你将掌握完整的环境变量配置、packer build流程、镜像内各配置脚本的作用以及 k6 压测脚本的参数含义并能为后续 Terraform 部署负载测试基础设施准备好 AMI ID。负载测试体系概览在深入 Packer 构建之前先了解这套 AMI 在整个负载测试体系中的位置。根据 test/load/README.md该负载测试用于在压力场景下采集 Consul 的基准性能指标确保版本发布或重大变更期间不出现性能回退。默认情况下测试运行10 分钟由 k6 发起25 个虚拟用户的并发请求测试实例规格为t2.smallConsul 集群节点规格为m5n.largeConsul 的全部指标会推送到 Datadog 仪表盘供分析。基础设施搭建依赖 Gruntwork 的 Terraform AWS Consul 模块默认在3 个可用区创建3 台 Consul Server。负载测试实例预装了 k6将请求发送到负载均衡器负载均衡器把流量分发到 Consul Client再由 Client 转发到 Server。整个流程分为两个阶段使用Packer生成 Consul AMI 与 Load Test AMI即本文主题使用Terraform在 AWS 中拉起基础设施packer与terraform两个目录分别对应这两个阶段目录结构见 test/load/packer 与 test/load/terraform。前置准备开始构建前需要准备以下内容安装 Terraform 与 Packer一个 AWS 账户并配置好凭据——最简便的方式是设置AWS_ACCESS_KEY_ID、AWS_SECRET_ACCESS_KEY、AWS_DEFAULT_REGION三个环境变量一个 Datadog 账户并在账户设置中创建 API Key无需下载 Datadog 客户端。构建成功后Packer 会输出 AMI ID务必保存因为后续 Terraform 阶段会用到。生成的 AMI 带有公共标签Environment consul-load-test便于在 AWS 控制台或 Terraform 中筛选识别。典型输出如下 Builds finished. The artifacts of successful builds are: -- amazon-ebs: AMIs were created: us-east-1: ami-19601070构建 Consul AMIConsul AMI 的目标是产出一个预装 Consul、并已接入 Datadog 遥测的 Ubuntu 18.04 镜像。所有相关文件位于 test/load/packer/consul-ami 目录。环境变量配置在consul-ami/目录下依次执行# 1) 获取你的 Datadog API Key并设置为环境变量 export DD_API_KEY$YOURDDAPIKEYHERE # 2) 设置 Packer 使用的 AWS 区域 export AWS_DEFAULT_REGIONus-east-1 # 3) 配置 AWS 凭据 export AWS_ACCESS_KEY_ID#YOURAWSKEYID export AWS_SECRET_ACCESS_KEYYOURAWSKEY这三个环境变量分别对应consul.pkr.hcl中声明的两个变量aws_region默认取${env(AWS_DEFAULT_REGION)}dd_api_key默认取${env(DD_API_KEY)}源码见 consul.pkr.hcl。执行构建packer build consul.pkr.hcl构建模板源码剖析consul.pkr.hcl 的关键逻辑如下基础镜像选择通过data amazon-ami数据源在指定区域过滤ubuntu/images/hvm-ssd/ubuntu-bionic-18.04-amd64-server-*命名的官方 Ubuntu 18.04 AMIowner 为099720109477取最新一个作为源镜像要求架构x86_64、卷类型gp2、根设备ebs构建源使用amazon-ebs构建器实例类型t2.microAMIs 命名格式为consul-ubuntu-日期T时间-uuid并打上Environment consul-load-test标签构建流程依次执行多个 provisioner创建/home/ubuntu/scripts目录将本地scripts/目录上传到/home/ubuntu执行 setup-systemd-resolved 脚本配置系统 DNS 转发到 Consul通过 Datadog 官方安装脚本安装 Datadog Agent 7DD_AGENT_MAJOR_VERSION7以 sudo 执行 move-files.sh把 Datadog 与 Consul 的配置放到正确位置。镜像内配置脚本详解DNS 转发脚本 setup-systemd-resolved仅支持 Ubuntu 18.04通过iptables将本机 53 端口的 UDP/TCP 流量重定向到 Consul DNS 端口默认 8600并修改/etc/systemd/resolved.conf使~consul域的查询转发到 Consul默认127.0.0.1。相关配置可参考 Consul 官方文档与 hashicorp/consul 的 issue #4155。配置文件移动脚本 move-files.sh负责把conf.yaml移动到 Datadog Consul 集成目录、datadog.yaml移动到 Datadog Agent 配置目录、telemetry.json移动到/opt/consul/config/并用sed将DD_API_KEY写入datadog.yaml的api_key字段同时设置dd-agent用户对相关文件的所有权。Datadog Consul 集成配置 conf.yaml启用 Consul check采集http://localhost:8500的指标并开启 leader 自检self_leader_check、网络延迟检查network_latency_checks与目录检查catalog_checks。Datadog Agent 配置 datadog.yaml除了api_key、logs_enabled外还定义了一组dogstatsd_mapper_profiles用正则把 Consul 的 DogStatsD 指标映射为更易查询的指标名匹配模式映射后的指标名附加标签consul\.http\.([a-zA-Z])\.(.*)consul.http.requesthttp_method、pathconsul\.raft\.replication\.appendEntries\.logs\.([0-9a-f-])consul.raft.replication.appendEntries.logsconsul_node_idconsul\.raft\.replication\.appendEntries\.rpc\.([0-9a-f-])consul.raft.replication.appendEntries.rpcconsul_node_idconsul\.raft\.replication\.heartbeat\.([0-9a-f-])consul.raft.replication.heartbeatconsul_node_id这意味着你在 Datadog 仪表盘中可以直接按 HTTP 方法、请求路径、节点 ID 维度检索 Consul 的通信指标——测试完全基于对 Consul HTTP 端点的请求这部分指标恰恰是评估压测结果最相关的。Consul 遥测配置 telemetry.json声明 Consul 所在数据中心与 DogStatsD 上报地址{ datacenter: us-east-2, telemetry: { dogstatsd_addr: 127.0.0.1:8125 } }注意README 说明该文件中的 datacenter 默认值为us-east-1而当前仓库中实际值为us-east-2。构建前请按你的实际测试区域调整。自定义 Consul AMI添加 Datadog 标签可在scripts/datadog.yaml文件的tags字段中追加自定义标签例如consul_version : consulent_175。这些标签会随指标上报可在 Datadog 仪表盘中直接检索过滤修改数据中心通过调整scripts/telemetry.json中的datacenter字段实现。构建 Load Test AMILoad Test AMI 预装了 k6 压测引擎与压测脚本相关文件位于 test/load/packer/loadtest-ami 目录。构建步骤# 1) 设置 Packer 使用的 AWS 区域 export AWS_DEFAULT_REGIONus-east-1 # 2) 执行构建 packer build loadtest.pkr.hcl构建模板与安装脚本loadtest.pkr.hcl 与 Consul AMI 的模板结构类似同样基于 Ubuntu 18.04 官方 AMI、t2.micro实例、associate_public_ip_address true构建时上传scripts/目录后执行 install-k6.sh。install-k6.sh 完成三件事调高系统文件句柄上限写入fs.file-max 2097152并提升ulimit保证高并发压测时不因句柄耗尽而失败通过官方 APT 源安装 k6导入 GPG 公钥C5AD17C747E3415A3642D57D77C6C491D6AC1D69并添加https://dl.k6.io/deb软件源为压测脚本设置可执行权限。k6 压测脚本解析k6 执行的压测脚本为 loadtest.js。每个虚拟用户VU的迭代会做两件事写入 K/V生成 UUID 作为 key向/v1/kv/key发起PUT写入 JSON 值断言响应码必须为 200否则fail中止注册服务读取service.json模板并覆写Name字段为 UUID向/v1/agent/service/register发起PUT同样断言 200。请求目标地址由环境变量LB_ENDPOINT在运行时注入http://${__ENV.LB_ENDPOINT}:8500指向负载均衡器。脚本选项options定义了默认压测参数export let options { // 25 virtual users vus: 25, // 10 minute duration: 10m, // 95% of requests must complete below 2.5s thresholds: { http_req_duration: [p(95)2500] }, };即25 个虚拟用户、持续 10 分钟并设置阈值95% 的请求必须在 2.5 秒内完成否则视为测试不达标。如需向更多 Consul 端点发起请求直接修改此脚本即可k6 的更多用法可参考其官方文档。服务注册模板 service.json定义了注册服务的默认载荷包括Address127.0.0.1、Port8000、Meta如redis_version以及 HTTP 健康检查Check配置请求方法、Header、Body、超时、间隔、临界后自动注销时间等。从 AMI 到完整压测链路构建完成两类 AMI 后接下来保存输出的 AMI ID两条构建各产出一个阅读 test/load/terraform/README.md按说明在 AWS 中拉起负载测试基础设施测试结果可在 Datadog 仪表盘查看也可直接查看 Terraform Apply 的输出。关于结果分析Consul 暴露了数百个指标压测本质是持续向 HTTP 端点发起请求因此 Datadog 关于 Consul 通信类指标communication的分析最值得关注——这也正是 datadog.yaml 中那些映射规则存在的意义把consul.http.*、consul.raft.replication.*指标解析成带方法、路径、节点 ID 标签的规范化指标方便在仪表盘上直接聚合对比。相关文件索引构建模板consul.pkr.hcl、loadtest.pkr.hclConsul AMI 配置脚本install-consul安装 Consul 二进制、创建用户与目录、支持 TLS 证书、run-consul生成 Consul 配置与 systemd 单元并启动支持 server/client 模式、加密、Autopilot 参数遥测配置conf.yaml、datadog.yaml、telemetry.json压测相关loadtest.js、install-k6.sh、service.json上层流程test/load/README.md、test/load/terraform/README.md【免费下载链接】consulConsul is a distributed, highly available, and data center aware solution to connect and configure applications across dynamic, distributed infrastructure.项目地址: https://gitcode.com/gh_mirrors/con/consul创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门