원클릭으로
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