乐于分享
好东西不私藏

OpenClaw 插件开发从零到一:写一个 K8s 排障插件,把 3 小时排查缩到 5 分钟

OpenClaw 插件开发从零到一:写一个 K8s 排障插件,把 3 小时排查缩到 5 分钟

OpenClaw 插件开发从零到一:写一个 K8s 排障插件,把 3 小时排查缩到 5 分钟

用 OpenClaw 一段时间了,做内容创作、数据抓取、定时任务都很顺手。但我一直有个想法——能不能让 OpenClaw 直接帮我排查 K8s 问题?

比如,线上 Pod 出问题了,我只要说一句"看看这个 Pod 为什么 CrashLoopBackOff",OpenClaw 就能自动执行 kubectl describe、kubectl logs、kubectl get events,然后把分析结果告诉我。

这不是科幻,OpenClaw 的 Skill Workshop 和 Tool 机制就是干这个的。

为什么要自己写插件?

OpenClaw 内置了很多工具:文件读写、执行命令、网页搜索、图片生成。但特定领域的工具需要自己写。

比如排查 K8s 问题,我需要:

  1. 执行 kubectl 命令获取 Pod 状态

  2. 执行 kubectl logs 获取日志

  3. 执行 kubectl get events 获取事件

  4. 把这些信息汇总,让 AI 分析根因

OpenClaw 的 Skill Workshop 就是干这个的——把一系列操作封装成一个可复用的 Skill。

第一步:了解 Skill 的结构

OpenClaw 的 Skill 本质上是一个 Markdown 文件,用特定的 Front Matter 格式声明工具的元数据和行为。

一个 Skill 包含:

code
---
name: k8s-troubleshooter
description: K8s 排障助手,自动诊断 Pod 异常
metadata:
 type: skill
---

# k8s-troubleshooter

## 工具

提供 k8stroubleshoot 命令,输入 Pod 名称,自动执行排查流程。

## 排查流程

1. 获取 Pod 状态
2. 获取最近事件
3. 获取容器日志
4. 分析根因

第二步:定义 Tool

Tool 是 Skill 的核心——告诉 OpenClaw 可以执行什么命令,参数是什么。

kubectl 命令封装:

yaml
---
name: kubectl-exec
description: 在宿主机上执行 kubectl 命令
commands:
 - kubectl get pod {podname} -o wide
 - kubectl describe pod {podname}
 - kubectl logs {podname} --tail=100
 - kubectl get events --field-selector involvedObject.name={podname}
---

参数说明:

  • name:工具名称,OpenClaw 用这个来识别

  • description:告诉 AI 这个工具是干什么的

  • commands:可执行的命令模板,{podname} 是动态参数

第三步:写一个完整的排障 Skill

下面是我实际在用的 K8s 排障 Skill(为了阅读方便,我把 YAML 和命令分开展示):

Skill 定义文件:

yaml
---
name: k8s-troubleshoot
description: K8s Pod 故障诊断工具
metadata:
 type: skill
 author: 不怕慢
 version: 1.0
---

工具 1:诊断单个 Pod

bash
# 获取 Pod 状态
kubectl get pod {podname} -n {namespace} -o wide

# 获取 Pod 详细信息
kubectl describe pod {podname} -n {namespace}

# 获取最近事件
kubectl get events -n {namespace} \
 --field-selector involvedObject.name={podname} \
 --sort-by=.lastTimestamp

# 获取容器日志
kubectl logs {podname} -n {namespace} --tail=200

工具 2:检查 Node 健康状态

bash
# 查看所有 Node 状态
kubectl get nodes -o wide

# 查看单个 Node 详情
kubectl describe node {nodename}

# 查看 Node 资源使用
kubectl top node {nodename}

工具 3:检查 Pod 网络连通性

bash
# ping 测试
kubectl exec {podname} -- ping -c 3 {targetip}

# 端口连通性测试
kubectl exec {podname} -- curl -v telnet://{targetip}:{port}

使用示例:

用户:帮我看看 nginx-pod-xxx 为什么 CrashLoopBackOff
AI 自动执行:
1. kubectl get pod → 发现 Pod 在 CrashLoopBackOff
2. kubectl describe → 发现 Liveness 探针失败
3. kubectl logs → 看到应用启动超时
4. 分析结论:探针超时时间太短,建议从 5s 改为 15s

第四步:通过 Skill Workshop 注册

OpenClaw 提供了 skillworkshop 工具来管理 Skill:

bash
# 创建新 Skill
skillworkshop create \
 --name k8s-troubleshoot \
 --description "K8s Pod 故障诊断工具" \
 --proposal-content "$(cat k8s-troubleshoot.md)"

创建后,Skill 会进入"待审核"状态。OpenClaw 会提示你确认,确认后 Skill 就生效了。

第五步:实际效果

注册 Skill 后,我只要说:

"看看 production 命名空间里那个 nginx-pod-xxx 为什么一直重启"

OpenClaw 就会自动:

  1. 识别出要用 k8sdiagnosepod 工具

  2. 执行 kubectl get pod 获取状态

  3. 执行 kubectl describe pod 获取详细信息

  4. 执行 kubectl logs 获取日志

  5. 执行 kubectl get events 获取事件

  6. 综合分析,告诉我根因和修复建议

整个过程不到 5 分钟,原来手动排查要 1-3 小时。

踩坑记录

坑 1:kubectl 命令必须在宿主机上执行 OpenClaw 默认在沙箱环境执行命令,但 kubectl 需要访问 kubeconfig。需要在 Skill 里指定 host: node 或 host: auto 来执行。

坑 2:命令超时 有些命令(如 kubectl logs --tail=5000)输出很大,需要设置合理的 timeout 参数,避免 AI 等待太久。

坑 3:权限问题 OpenClaw 的 exec 工具默认有权限限制,需要在 OpenClaw 配置里允许 kubectl 命令的执行。在 tools.exec.security 配置中放行 kubectl 即可。

扩展思路

Skill 不只是写一个排查工具,还能做更多:

1. 定时巡检 Skill 每天早上自动检查集群健康状态,如果发现异常直接推送到 Telegram。

2. 自动化修复 Skill 排查出问题后,自动执行修复命令(需要谨慎,建议加人工确认步骤)。

3. 多集群管理 Skill 在 Skill 里切换 kubeconfig,一个命令管理多个集群。

4. 日志分析 Skill 把 kubectl logs 的输出接入 AI,让 AI 分析日志中的异常模式。

总结

OpenClaw 的 Skill Workshop 让 AI 从"聊天助手"变成了"能干活的操作系统"。

你不需要写复杂的代码,也不需要搞微服务架构。写一个 Markdown 文件,定义几个命令,AI 就能帮你执行复杂的运维操作。

下次遇到 K8s 问题,别再手动 kubectl describe 翻来翻去了。写个 Skill,让 AI 帮你干。

——◆——

延伸阅读:

OpenClaw 记忆系统升级:从 nomic-embed-text 切换到 mxbai-embed-largeOpenClaw Agent 协作踩坑:3 个 Agent 一起干活,为什么比单打独斗还慢?

你在用 OpenClaw 写过什么 Skill?留言说说你的玩法,我帮你优化。

——◆——

🤔 互动话题

关于OpenClaw 插件开发从零到一,你有什么踩坑经历或心得?评论区聊聊~

📖 阅读原文 👈 底部查看

👍 点赞 + 在看 + 转发 是对我最大的支持!

本文首发于「不怕慢」

📂 查看本系列更多文章 →

相关学习资料