بنقرة واحدة
aether-volume
管理 Nomad 节点的 host volume 配置。支持创建、列出、删除 volume。 使用场景:"配置 volume"、"创建 host volume"、"删除 volume"、"查看 volume"
التثبيت باستخدام Codex أو Claude انسخ هذا Prompt والصقه في Codex أو Claude أو مساعد آخر ليراجع صفحة Skill ويثبّتها لك.
القائمة
管理 Nomad 节点的 host volume 配置。支持创建、列出、删除 volume。 使用场景:"配置 volume"、"创建 host volume"、"删除 volume"、"查看 volume"
التثبيت باستخدام Codex أو Claude انسخ هذا Prompt والصقه في Codex أو Claude أو مساعد آخر ليراجع صفحة Skill ويثبّتها لك.
استنادا إلى تصنيف SOC المهني
新项目接入 Aether 集群。先分析项目特征生成部署方案,确认后生成部署文件。 两阶段流程:Phase 1 分析与设计 → Phase 2 生成文件。 使用场景:"接入新项目到 Aether"、"生成部署配置"、"初始化 CI/CD"、"规划部署方案"
Aether 集成规范速查 —— 四域 investigation-first hub。消费方项目里临时手写 dev env / 测试配置 / 连接串时的规范速查点 (#185→#186→#241 同根因三次复发的知识层加固)。 回答: "内网服务连接该用 consul 名还是 IP"、"数据库怎么连"、"DATABASE_URL 怎么写"、 "REDIS_URL 怎么写"、"连接串该用 IP 还是 consul"、"连 postgres/redis/内网服务的地址"、 "host volume 该注册几个节点/规范"、"stateful 服务模板规范"、"有状态服务该怎么配"、 "DB 密码该存哪"、"应用 secret 该存哪"、"连接串密码能不能硬编码进 HCL"。 使用场景: "Aether 集成规范速查"、"consul 名还是 IP"、"内网服务怎么连"、"数据库怎么连"、 "DATABASE_URL 怎么写"、"REDIS_URL 怎么写"、"连接串用 IP 还是 consul"、"连 postgres/redis 地址"、"host volume 该注册几个节点"、"volume 规范"、"stateful 服务模板规范"、"有状态服务 该怎么配"、"DB 密码该存哪"、"应用 secret 该存哪"、"连接串密码能不能硬编码进 HCL"
Aether 环境下 Forgejo 凭据的决策 / 诊断 / 轮换指南。回答"该用哪个 token"、 拆解人机两账号模型 (simonfish 人 / 10cg-ci-bot 机)、辨别 CF Access 与 forgejo PAT 两个凭据平面、诊断误导性 403 ("Only signed in user")、安全轮换 (先枚举全部 store)、 凭据卫生红线。深度内容指向 docs/guides/forgejo-token-map.md + .aether/pat-inventory.yaml。 使用场景: "该用哪个 forgejo token"、"which forgejo token"、"forgejo 401"、 "forgejo 403"、"Only signed in user"、"docker login forgejo"、"CF Access 403"、 "token rotation"、"凭据轮换"、"FORGEJO_TOKEN"、"forgejo credential"、 "人机账号"、"registry pull 401"、"docker push unauthorized"
Aether 集群上 owner-triggered 一次性 build container 原语 (walking skeleton, #27). 把本地 git ref 的 tracked 树打包送上 heavy 节点宿主 docker, build + push 到内网 registry, 返回 immutable image_sha256 契约。无 CLI 子命令、无版本 bump、零 Go 代码。 使用场景: "build 镜像", "build aria-runner", "构建容器镜像", "build container", "把 Dockerfile 推到 registry", "image build", "用 Aether 跑 build", "10CG 项目 build image", "首次镜像构建", "无 CI 触发的镜像 build"
向 Aether 维护团队报告 Bug 或提交功能建议。自动收集环境信息, 自动路由到 Forgejo(内部用户)或 GitHub(外部用户)。 使用场景:"报告 bug"、"report an issue"、"提交功能建议"、 "aether 有个问题想反馈"、"feature request"、"提 issue"、 "反馈问题"、"report bug to aether"
Forgejo PAT (Personal Access Token) 凭据轮换工具 (Tier 1 / Aether #45)。 自动化 list / rotate / resume / cleanup 完整闭环, 含 atomic rollback + journal-based interrupt recovery + 24h grace + token fingerprint guard。 使用场景: "轮换 PAT", "rotate token", "PAT 即将过期", "doctor pat_age 报警", "registry-auth", "Forgejo token 过期", "凭据轮换", "renew PAT", "credential rotation", "rotation drill", "cleanup _OLD"
| name | aether-volume |
| description | 管理 Nomad 节点的 host volume 配置。支持创建、列出、删除 volume。 使用场景:"配置 volume"、"创建 host volume"、"删除 volume"、"查看 volume" |
| argument-hint | [create|list|delete] [options] |
| disable-model-invocation | false |
| user-invocable | true |
| allowed-tools | Bash, AskUserQuestion |
| dependencies | {"cli":{"required":true,"min_version":"1.15.0"}} |
版本: 1.4.0 | 优先级: P1 集成规范: "该注册几个节点 / 有数据的卷怎么处理" 这类规范性问题,先查
aether-conventionsskill(Volume 域速记 + 铁律)
⚠️ 此 Skill 需要 aether CLI
# 使用共享检测脚本
source "${CLAUDE_PLUGIN_ROOT}/scripts/cli-functions.sh"
require_aether_cli || exit 1
aether volume create --node <node> --project <project> --volumes <list>
常用参数:
--dry-run: 预览操作--ssh-key: SSH 私钥路径--register-only: 跳过 mkdir/chmod,只注册 host_volume 配置 + 重启 Nomad(卷已有数据时必须用这个——补注册到其他节点若仍走完整 mkdir+chmod,chmod -R 会重写已有文件权限,可能破坏 postgres pgdata(要求 700)等权限敏感数据)⚠️ 生产 / 有状态服务铁律:
host_volume必须覆盖每一个 heavy 节点,只注册单节点 = blast-radius trap —— 该服务被 pin 死在一个节点,节点故障或 alloc 被重调度到其他 heavy 节点 即找不到数据(/opt/aether-volumes是 NFS-virtiofs 共享存储,数据物理上都在,只是 Nomad 没在其他节点上声明host_volume而已)。诊断:aether doctor host_volume_parity。
# 无状态 / 一次性测试: 单节点即可
aether volume create --node heavy-1 --project my-api --volumes data,logs
# 生产 / 有状态服务: 新建卷时对每个 heavy 节点重复注册
# (节点清单以实际集群为准: aether status 或 curl $NOMAD_ADDR/v1/nodes 核对,
# 不要硬编码假设节点数——集群会扩容)
aether volume create --node heavy-1 --project my-api --volumes data,logs
aether volume create --node heavy-2 --project my-api --volumes data,logs
aether volume create --node heavy-3 --project my-api --volumes data,logs
aether volume create --node heavy-4 --project my-api --volumes data,logs
aether volume create --node heavy-5 --project my-api --volumes data,logs
# 补注册到其他节点,但该卷已有数据 (例如把历史单节点卷补齐为全 heavy 注册):
# 用 --register-only 跳过 mkdir/chmod,只注册配置,不碰已有文件权限
aether volume create --node heavy-2 --project my-api --volumes data --register-only
aether volume list --node <node>
# 过滤项目
aether volume list --node heavy-1 --project my-api
# ⚠️ 会删除数据
aether volume delete --node <node> --project <project> --volumes <list> --yes
详细命令说明: 见 command-details.md
创建前先确认目标 volume 不存在,避免重复 host_volume 配置导致 Nomad 重启失败:
# 检查已有 volume
aether volume list --node heavy-1 --project my-api
如果目标 volume 已存在,提示用户跳过创建。
aether volume list 验证后,通过 SSH 直接检查目录确认实际状态:
# 验证目录存在和权限
ssh root@heavy-1 "ls -la /opt/aether-volumes/my-api/"
预期输出每个 volume 子目录权限为 drwxrwxrwx。
| 保障 | 机制 | 触发条件 |
|---|---|---|
| 幂等性 | 创建前检查 aether volume list | 每次创建 |
| 原子性 | 修改前备份 client.hcl → client.hcl.bak | 每次写配置 |
| 自动回滚 | Nomad 重启失败时恢复 .bak | systemctl restart nomad 失败 |
| 创建后验证 | SSH 检查目录存在性和权限 | 每次创建 |
为什么幂等性检查重要: Nomad client.hcl 不允许重复的 host_volume 块。重复插入会导致 Nomad 重启失败,需要手动恢复配置。
| 症状 | 原因 | 修复 |
|---|---|---|
permission denied | 密钥权限不是 600 | chmod 600 ~/.ssh/id_ed25519 |
host key verification failed | known_hosts 冲突 | ssh-keygen -R <node-ip> |
connection refused | SSH 服务未运行 | ping <node-ip> 确认网络,检查 sshd |
timeout | 网络不可达 | 检查 VPN/防火墙/路由 |
SSH 诊断步骤 (逐步升级):
ssh -v root@heavy-1 — 查看详细握手过程ssh-keygen -R <node-ip> — 清除旧 host keyls -la ~/.ssh/id_ed25519 — 确认权限为 -rw-------ssh-add ~/.ssh/id_ed25519 — 手动加载密钥CLI 自动从 .bak 回滚配置。如果自动回滚也失败:
ssh root@<node> "mv /opt/nomad/config/client.hcl.bak /opt/nomad/config/client.hcl && systemctl restart nomad"
根因排查: ssh root@<node> "journalctl -u nomad -n 50" 查看 Nomad 日志。
volume 命令需要 SSH 访问节点。推荐使用 SSH Config:
# ~/.ssh/config
Host heavy-* light-*
User root
IdentityFile ~/.ssh/id_ed25519
StrictHostKeyChecking no
详细 SSH 配置: 见 ssh-authentication.md
| 项目类型 | 推荐 volumes | 说明 |
|---|---|---|
| 数据库 | data | 数据文件 |
| Web 应用 | data,logs,uploads | 数据、日志、上传文件 |
| 静态站点 | logs | 访问日志 |
| API 服务 | logs | 应用日志 |
| 文件服务 | data,uploads | 文件存储 |
创建 Volume:
1. 幂等性检查 — 先用 aether volume list 确认目标 volume 是否已存在
→ 已存在: 提示用户,跳过创建(避免重复 host_volume 配置)
→ 不存在: 继续
2. 解析节点名 → IP
3. SSH 连接
4. 创建目录 + 设置权限
5. 备份配置
6. 插入 host_volume 到 client {} 块
7. 重启 Nomad
8. 验证服务
9. 清理备份 / 回滚
10. 创建后验证 — SSH 直接检查目录存在性和权限:
ssh root@<node> "ls -la /opt/aether-volumes/<project>/"
删除 Volume:
1. 确认操作
2. SSH 连接
3. 删除目录
4. 备份配置
5. 移除 host_volume 配置
6. 重启 Nomad
7. 验证服务
8. 清理备份 / 回滚
Skill 版本: 1.4.0 最后更新: 2026-07-15 维护者: 10CG Infrastructure Team