argus/src/sys/swarm_tests
yuyr 7430896fab v1.0.0 发布合并回master (#52)
Co-authored-by: sundapeng <sundp@mail.zgclab.edu.cn>
Co-authored-by: xuxt <xuxt@zgclab.edu.cn>
Reviewed-on: #52
2025-11-25 16:00:50 +08:00
..
2025-11-25 16:00:50 +08:00
2025-11-25 16:00:50 +08:00

Swarm Tests (argus-sys-net)

快速在本机用 Docker Swarm + overlay 网络验证“服务端 + 单节点”端到端部署。保持对 src/sys/tests 兼容,不影响现有桥接网络测试。

先决条件

  • Docker Engine 已启用 Swarm脚本会自动 swarm init 单机模式)。
  • 已构建并加载以下镜像:argus-master:latestargus-elasticsearch:latestargus-kibana:latestargus-metric-prometheus:latestargus-metric-grafana:latestargus-alertmanager:latestargus-web-frontend:latestargus-web-proxy:latest、以及节点镜像 argus-sys-metric-test-node-bundle:latest(见下文)。
  • 本地 UID/GID 建议通过 configs/build_user.local.conf 指定,脚本会读取:
    • UID=1000\nGID=1000(示例)。

构建节点 bundle 镜像

./deployment/build/build_images.sh --with-node-bundle --client-version 20251106

说明:--client-version 支持 YYYYMMDD 日期包或 1.xx.yy 组件版本。打包完成后镜像 argus-sys-metric-test-node-bundle:latest 会内置 argus-metric_*.tar.gz,容器启动时优先从本地 bundle 安装。

运行步骤

cd src/sys/swarm_tests
cp .env.example .env

bash scripts/00_bootstrap.sh
bash scripts/01_server_up.sh
bash scripts/02_wait_ready.sh   # 写 MASTER_ENDPOINT/AGENT_* 到 .env.nodes
bash scripts/03_nodes_up.sh
bash scripts/04_metric_verify.sh

清理:

bash scripts/99_down.sh

说明与注意事项

  • 00_bootstrap.sh:先加载 scripts/common/build_user.sh,打印并写入 .env 中的 ARGUS_BUILD_UID/GID,再准备 private-server/private-nodes/ 目录,并 chown 到对应 UID/GID。
  • 01_server_up.sh:启动服务端 compose。可用 SWARM_FIX_PERMS=1 打开“容器内 chmod + supervisor 重启”的兜底逻辑,默认关闭。
  • 02_wait_ready.sh:等待 Master/ES/Prom/Grafana 就绪Kibana 可延迟),随后写入 .env.nodesMASTER_ENDPOINT/AGENT_*,供节点 compose 使用DNS 由 Docker 自带服务负责,不再依赖 BINDIP/FTPIP
  • 03_nodes_up.sh启动单节点容器bundle 版)。容器内 node-bootstrap.sh 优先本地安装,成功后执行健康检查并等待 /private/argus/agent/<hostname>/node.json 出现。
  • 04_metric_verify.sh:在本套件内执行详细校验(不再直接调用 tests 脚本):
    • Grafana /api/healthdatabase=ok
    • Grafana 数据源指向 prom.metric.argus.com:<port> 并在容器内可解析该域名
    • Prometheus activeTargets 全部 up
    • nodes.json 不包含 172.22/16docker_gwbridge

常见问题

  • Grafana/Kibana 启动报权限:检查 configs/build_user.local.conf00_bootstrap.sh 的输出 UID/GID 是否一致;必要时设置 SWARM_FIX_PERMS=1 重新 01_server_up.sh
  • 节点容器 fallback 到 FTP通常为 bundle 结构异常或健康检查失败(早期脚本在 sh 下执行)。当前 node-bootstrap.sh 已使用 bash 执行健康检查,并在本地安装成功后跳过 FTP。
  • 代理 502查看容器 argus-web-proxy/var/log/nginx/error.log 与启动日志中 upstream check 行;若后端未就绪(尤其 Kibana等待 02_wait_ready.sh 通过后再访问。

在 worker 上用 compose 起 GPU 节点的网络预热overlay not found

在多机 Swarm 场景,如果在 workerlm1)上直接运行 05_gpu_node_up.shdocker compose 对 external overlay argus-sys-net 的本地预检查可能报错 network ... not found。这是因为 worker 尚未在本地“加入”该 overlay。

Workaround先在 worker 启一个临时容器加入 overlay 进行“网络预热”,随后再运行 GPU compose。

# 在 worker 节点lm1
cd src/sys/swarm_tests
set -a; source .env; source .env.nodes; set +a

# 预热 overlay默认 600s 超时自动退出,可重复执行)
bash scripts/05a_net_warmup.sh

# 然后再启动 GPU 节点
bash scripts/05_gpu_node_up.sh

清理时 scripts/99_down.sh 会顺带移除预热容器 argus-net-warmup

更推荐的做法是改用 docker stack deploy 由 manager 调度 GPU 节点(支持渐进式扩容与节点约束),详见 specs/issues/2025-11-07-swarm-compose-worker-overlay-network-not-found-lm1.md

可选Stack 部署 GPU 节点manager 上执行)

前置:已在 managerlm2完成 00_bootstrap.sh01_server_up.sh,并通过 02_wait_ready.sh 生成 .env.nodes;给目标 GPU 节点打标签 argus.gpu=true

cd src/sys/swarm_tests
# 给 GPU 节点打标签(示例)
docker node update --label-add argus.gpu=true lm1

# 可按需覆盖挂载路径(每个 GPU 节点都需存在同一路径)
export AGENT_VOLUME_PATH=/data1/yuyr/dev/argus/src/sys/swarm_tests/private-gpu-nodes/argus/agent

# 在 manager 上部署global 模式,自动在打标节点各拉起 1 副本)
bash scripts/05b_gpu_stack_deploy.sh

# 查看
docker stack services argus-swarm-gpu
docker stack ps argus-swarm-gpu

移除 stackdocker stack rm argus-swarm-gpu(不会删除 overlay 网络与数据目录)。