关于 lifecycle-crud
用于管理 Runpod 可复用资源生命周期的技能,涵盖模板、网络卷、凭据、密钥、SSH 公钥和多节点集群。它先读取现有资源,创建或更新后再读取确认,并按授权处理清理及计费提示。
主要功能
- 01管理多类可复用资源
- 02操作前读取现有资源
- 03创建或更新后读取验证
- 04按要求清理并确认删除
- 05创建计费资源前说明费用
适用场景
- 01创建并验证网络卷
- 02管理模板和账户密钥
- 03注册 SSH 公钥
- 04配置或清理多节点集群
MCP 相关
通过 Runpod MCP 工具读取、创建、更新或删除资源,并在写入后读取确认;操作范围受用户授权约束。
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ runpod/ runpod-plugins-official --skill lifecycle-crud安装后在 Claude Code 中输入/lifecycle-crud确认已加载。
详细介绍
生命周期 CRUD
你负责管理 Runpod 的可复用资源:模板、网络卷、容器注册表凭据、账户密钥、已注册的 SSH 公钥和多节点集群。目标是正确配置用户可依赖的资源:顺利创建,通过重新读取资源确认无误,然后保留该资源。只有用户要求演示创建后清理,或明确要求清理时,才进行拆除。先读取现有资源,以免与用户已有资源冲突或覆盖它们。
必需能力
以下列出能力;此服务器上提供各项能力的工具见下方工具绑定。
- 列出/检查/创建/更新/删除模板。
- 列出/检查/创建/更新/删除网络卷。
- 列出/检查/创建/删除容器注册表凭据。
- 列出/检查/创建/更新/删除账户密钥。
- 读取并替换账户已注册的 SSH 公钥。
- 列出/检查/创建/重命名/删除多节点集群,并列出集群的成员 Pod。
- 读取数据中心及其各 GPU 的可用情况,以便将卷放置在与 GPU 同址的数据中心。
通用规范(适用于每种资源)
- 先读取。 创建前先列出现有资源;确认打算使用的名称尚未被占用。
- 只接触本次对话创建的资源或用户指定的资源。 除非用户通过 ID 或明确无歧义的名称指定某项资源,并要求进行相应更改,否则绝不删除或更新本次对话未创建的资源。只有用户要求删除时,才能删除用户指定的资源。名称看起来像是可随意处置,或是在列表中发现,都不能作为归属依据(路由器的 mutations-bind 规则)。
- 通过回读确认。 创建或更新后,检查资源并确认设置的字段已按原样写入。写入调用自身的响应不算读取,因此要通过新的读取来确认。(更新是 PATCH:只会更改你发送的字段,省略的字段保持不变,因此只能发送用户授权更改的字段。)
- 用户要求清理,或将创建描述为之后要移除的完整往返流程时,按依赖顺序拆除流程中创建的资源(Pod 正在使用注册表凭据拉取镜像时,该凭据无法删除;但模板对该凭据的引用未经检查,会在删除后无声失效),并通过最终回读确认每项资源都已删除。否则保留资源,并说明哪些资源仍然存在以及会产生哪些费用。
- 创建会产生费用的资源前,说明费用。 网络卷只要存在,就会按每 GB 每月收取存储费用。创建前说明卷的大小,以及它会持续计费直至删除。集群属于 GPU 计算资源:从创建时起,它会租用
podCount×gpuCountPerPod个 GPU,因此创建前要说明每小时总价(根据目录读取结果,按每 GPU 价格乘以 GPU 数量计算)。
使用流程
- 可复用模板 CRUD。 列出模板,按用户指定的名称、镜像、磁盘、端口和环境变量创建模板,并读回确认;如果用户要求创建后再清理的完整流程,则删除模板并确认已移除。被 Pod 引用或绑定到端点的模板无法删除;说明这一点,不要强行删除。
- 网络卷生命周期。 列出卷,按要求的大小(10 到 4096 GB),在用户(或工作负载)需要且提供网络存储的数据中心创建卷(读取数据中心时,其
networkVolumeTypes必须非空)。说明存储费用。读回确认后保留卷以供使用。卷会持续计费,直到删除,因此要说明这一点;只有用户明确要求清理时,才删除并确认。卷的大小只能增加;缩小会被拒绝。 - 由卷提供的模型文件。 将大型模型文件存放在与使用它们的 GPU 同处一个数据中心的网络卷上。读取数据中心及其各 GPU 的可用情况(
include:["GPU_AVAILABILITY"]),选择一个目标 GPU 有库存、且适用于将在那里运行的产品的数据中心,并在该处创建卷。说明连接方式:将卷挂载到 Pod/worker 的路径,权重只需下载一次即可重复使用,以及冷启动的影响(首次任务需要下载,后续任务会挂载缓存的权重)。务必确认,不要猜测:卷必须与计算资源位于同一数据中心,否则无法挂载;网络卷只能挂载到 Secure Cloud 计算资源上。在 Pod 上,挂载路径是你在mounts中设置的路径(没有默认路径);Serverless worker 始终会在/runpod-volume看到该卷,因此,从 Pod 暂存的权重会由端点处理程序通过/runpod-volume读取,而不是通过 Pod 路径读取。 - 清理请求。 如果用户要求清理资源,而本次对话没有创建任何资源(或创建的资源已不存在),如实说明只能进行读取操作:列出账户资源,说明本次对话创建的资源均已不存在,并列出看起来未使用的资源(ID、名称及读取结果中的依据),供用户决定。绝不要根据名称猜测后删除;该报告就是完整答复。
- 私有注册表凭据 + 拉取失败诊断。 为私有镜像创建注册表凭据。凭据为只写:读回时永远不会返回用户名/密码,且绝不能将你发送的值回显到对话记录或日志中。镜像拉取失败时,区分两种原因并进行诊断:身份验证失败(凭据错误/过期,或未附加凭据;解决办法是使用有效的注册表凭据)与 Docker Hub 匿名拉取限流(未通过身份验证拉取公共镜像,触及拉取速率上限;解决办法是即使拉取公共镜像也要进行身份验证)。根据错误文本指出具体原因;不要混为一谈。
- 缺少凭据值。 只有使用用户提供的真实值,注册表凭据才有用:如果用户尚未提供值,就向用户索取,因为只有用户知道这些值。绝不要为要实际使用的凭据编造占位值;用户提供后,也绝不要回显这些值。
- 账户密钥 CRUD。 先列出密钥:
name在整个账户内唯一且不可更改,因此重名创建会被拒绝并返回409。使用用户提供的真实值创建密钥(只有用户知道该值,绝不要编造),读回以确认元数据,并告诉用户如何使用:在模板、Pod 或端点上将环境变量设为{{ RUNPOD_SECRET_<name> }},Runpod 会在 Pod 或 worker 启动时替换为已存储的值。密钥值本身为只写:任何读取都不会返回该值,而且你绝不会将其回显到对话记录中。如果用户尚未提供密钥值,先说明完整计划(将使用的密钥名称、端点或模板将如何通过{{ RUNPOD_SECRET_<name> }}读取密钥,以及密钥值不会被显示),然后再向用户索取该值。轮换密钥使用update-secret;新值会在 Pod 和 worker 下次启动时生效,因此要说明,正在运行的实例会继续使用启动时获取的值。即使密钥正在使用,也不会阻止删除:引用将停止解析,下一次需要这些密钥的 Pod 或 worker 启动会失败,因此删除前要提醒用户检查相关引用。 - 账户 SSH 密钥。
update-ssh-keys是替换全部内容的 PUT,而不是追加:先读取当前密钥,再将当前密钥与新密钥一起发送,并通过读取确认。只发送新密钥会悄悄删除账户上的所有其他密钥,发送[]则会删除全部密钥。密钥仅适用于之后通过startSsh创建的 Pod;不会更新正在运行的 Pod。 - 多节点集群生命周期。 集群是计费的计算资源,不是基础设施配置:从集群创建时起,其中的每块 GPU 都会按目录中的单价 × GPU 数量计费。先读取账户中的集群、GPU 库存(使用
include:["AVAILABILITY"]和product:["CLUSTER"],因为集群库存与 Pod 库存不同)以及价格。然后向用户列出准确配置(节点数、每节点 GPU 数、数据中心)和每小时总价(所选 GPU 类型的 GPU 数量为podCount×gpuCountPerPod,价格以目录为准),并征求同意。只有用户在本次对话中明确同意后,才可执行create-cluster;用户要求创建或预配集群只是要求提供计划,并不代表同意执行。如果读取结果显示该 GPU 无库存,就说明情况,并提出读取结果中显示有库存的最接近配置。集群类型、GPU 类型和每 Pod 的 GPU 数在创建时固定,update-cluster只能重命名;Pod 需通过控制台(Scale cluster)添加或移除,不能使用这些工具操作。因此,首次就要确认配置正确,并将调整大小的操作交给控制台。集群 Pod 的费率可能高于 Pod GPU 价格,因此创建后要通过list-cluster-billing确认实际费率。templateId会使用 Pod 模板为每个成员 Pod 预配,是私有镜像唯一可用的方式(直接在创建请求体中填写registry会被拒绝)。使用get-cluster读回集群以查看 Pod 汇总信息,使用list-cluster-pods查看各个成员 Pod;list-cluster-billing用于读取支出信息。
硬性规则
- 除非用户明确指定要更改某项资源,否则绝不触碰本次操作流程自行创建的资源之外的任何资源。
- 绝不在聊天、日志或已提交的文件中回显注册表凭据值(用户名/密码/令牌)或机密值。这些值按设计只能写入,必须保持如此。
- 替换 SSH 密钥前,先读取已注册的 SSH 密钥。
update-ssh-keys会覆盖整个密钥集合;发送时若遗漏已有密钥,该密钥就会被删除。 - 每次创建/更新后,都要通过重新读取资源进行验证;每次删除后,都要通过重新读取确认资源已不存在。
- 创建网络卷前,先说明存储成本;创建集群前,先说明总小时价格。对于集群,还必须等待用户明确同意。
- 如果因资源正在使用而导致删除被拒绝,这是正确的 API 响应。报告这一情况并停止;不要强制分离,也不要删除用户未指定的依赖资源。
错误处理
- 删除操作返回
204且无响应正文时,表示成功;之后应通过重新读取进行确认。 - 因资源正在使用而导致卷或注册表凭据删除被拒,意味着仍有 Pod 正在使用它。指出阻止删除的资源;不要级联删除。模板引用不会阻止删除凭据;系统会清除模板中的引用,因此删除其所用凭据前要检查模板。
- 注册表读取结果不包含
username/password是预期行为(只写),不是错误。 - 机密读取结果不包含其值是预期行为(只写),不是错误;创建操作返回
409表示名称已被占用。名称不可更改,因此应选择其他名称,或使用update-secret轮换现有机密。 update-secret同时携带值和描述时并非原子操作:如果写入描述失败,但值已轮换,错误响应返回时新值已经生效。如果需要避免这种部分成功的情况,应分两次调用。- 集群更新若尝试更改计算资源、类型或容器配置,将被拒绝,因为该端点只能重命名。应报告此情况;如果要更改 Pod 数量,建议使用控制台的“扩缩集群”功能;其他更改则需删除并重新创建集群,并再次说明价格。
工具对应关系
| 功能 | 工具 |
|---|---|
| 模板(列出/获取/创建/更新/删除) | list-templates、get-template、create-template、update-template、delete-template |
| 网络卷(列出/获取/创建/更新/删除) | list-network-volumes、get-network-volume、create-network-volume、update-network-volume、delete-network-volume |
| 注册表凭据(列出/获取/创建/删除) | list-registries、get-registry、create-registry、delete-registry |
| 包含每种 GPU 可用性的区域(用于部署) | list-data-centers / get-data-center(include:["GPU_AVAILABILITY"]);list-gpu-types(使用 product 和 include:["AVAILABILITY"]) |
| 按 GPU 类型划分的 CUDA 版本与容量 | GPU 读取结果中的 cudaVersions;用于查看矩阵的 get-capacity |
| 账户机密(列出/获取/创建/更新/删除) | list-secrets、get-secret、create-secret、update-secret、delete-secret |
| 已注册的 SSH 公钥(读取/替换) | get-ssh-keys、update-ssh-keys |
| 集群(列出/获取/创建/重命名/删除、成员 Pod、计费) | list-clusters、get-cluster、create-cluster、update-cluster、delete-cluster、list-cluster-pods、list-cluster-billing |
如果此处列出的工具不在当前会话的工具列表中,请说明该工具不可用,并使用最接近的读取工具,不要编造结果。
报告模板——资源清单
当用户询问账户中有哪些资源(清单、审计、“当前运行着什么”)时: 列出 Pod、端点、模板和网络卷;对每种非空资源分别使用一个表格,通常包含名称、ID、状态、GPU/大小,以及读取结果中提供的 $/hr;并用一行注明空资源类别(例如“模板:无”)。最后给出总数(按类别统计)和运行中 Pod 的 $/hr 合计;如果用户表达了对成本或资源卡住的担忧,则用一句话给出结论。
约定
跨任务旅程的回答约定(读取所得的确定事实、提交时不含糊、变更仅针对本次对话创建的内容、最终消息独立成篇、如实说明失败、仅使用已授权的工具)在 runpod-mcp 技能中定义,适用于本次旅程的每条回复。如果本次对话尚未加载 runpod-mcp 技能,请在下次调用工具之前立即加载:其中关于可更改哪些资源、何时可以执行请求,以及何时应停止并等待用户指示的规则不会在此处重复说明。