Co-authored-by: sundapeng <sundp@mail.zgclab.edu.cn> Co-authored-by: xuxt <xuxt@zgclab.edu.cn> Reviewed-on: #52
Swarm Tests (argus-sys-net)
快速在本机用 Docker Swarm + overlay 网络验证“服务端 + 单节点”端到端部署。保持对 src/sys/tests 兼容,不影响现有桥接网络测试。
先决条件
- Docker Engine 已启用 Swarm(脚本会自动
swarm init单机模式)。 - 已构建并加载以下镜像:
argus-master:latest、argus-elasticsearch:latest、argus-kibana:latest、argus-metric-prometheus:latest、argus-metric-grafana:latest、argus-alertmanager:latest、argus-web-frontend:latest、argus-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.nodes的MASTER_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/health(database=ok) - Grafana 数据源指向
prom.metric.argus.com:<port>并在容器内可解析该域名 - Prometheus
activeTargets全部 up nodes.json不包含172.22/16(docker_gwbridge)
- Grafana
常见问题
- Grafana/Kibana 启动报权限:检查
configs/build_user.local.conf与00_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 场景,如果在 worker(如 lm1)上直接运行 05_gpu_node_up.sh,docker 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 上执行)
前置:已在 manager(lm2)完成 00_bootstrap.sh 与 01_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
移除 stack:docker stack rm argus-swarm-gpu(不会删除 overlay 网络与数据目录)。