用 Claude Code 做运维自动化的几个心得
我用 Claude Code 做日常运维有半年了,从最初的"AI 写脚本"到现在的"Agent 半自动跑操作",踩了不少坑。
心得 1:永远先 read 再 write
Claude Code 默认会 Read 文件然后 Edit。但如果你跳过这步直接让它写,它会编造内容。
✅ 好:"看看 /etc/nginx/nginx.conf,把 worker_processes 改成 8"
❌ 差:"把 nginx worker_processes 改成 8"(没 read,可能改错地方)
心得 2:用 sandbox 限制 Bash 权限
settings.json 里配命令白名单:
{
"permissions": {
"allow": [
"Bash(kubectl get *)",
"Bash(kubectl describe *)",
"Bash(kubectl logs *)",
"Bash(ceph status)",
"Bash(ceph osd *)"
],
"ask": [
"Bash(kubectl apply *)",
"Bash(kubectl delete *)"
],
"deny": [
"Bash(rm -rf /*)",
"Bash(* | sudo *)"
]
}
}
allow 自动通过,ask 弹窗确认,deny 直接拒绝。运维任务大量是 read-only,配好白名单后 Agent 跑得飞快。
心得 3:把 SOP 写成 Skill
每个团队都有一堆 SOP:发布流程、回滚流程、扩容流程……手动告诉 Agent 太累。写成 Skill:
~/.claude/skills/k8s-deploy/SKILL.md
---
name: k8s-deploy
description: K8s 应用发布 SOP,包括灰度、监控、回滚
---
## 发布前
1. 检查 PR 是否合并到 main
2. 看 CI 是否通过
3. 确认值班人在线
## 发布
1. 改 values.yaml 里的 image tag
2. helm diff 确认变更
3. helm upgrade --set replicas=1 先灰度
4. 观察 5 分钟
5. 灰度 OK 全量
## 回滚
helm rollback <release> <revision>
之后说"发布 user-api 到 prod",Agent 自动按 SOP 走。
心得 4:长任务一定分步确认
我让 Agent 一次"清理 30 个 namespace 的过期资源",它真的删了……结果删多了。
改进:
"清理 30 个 ns 的过期资源。先列出每个 ns 要删什么,等我确认 OK 再删。"
Agent 会先 dry-run,把删除清单给你看,确认后再执行。
心得 5:跨机器操作用 SSH
Claude Code 默认只能操作本地。跨机器需要 SSH(最好 key 登录):
# 让 Agent 执行远程命令
ssh prod-node1 'docker ps'
# 复杂任务用 heredoc
ssh prod-node1 'bash -s' <<'EOF'
set -e
systemctl status nginx
nginx -t
systemctl reload nginx
EOF
心得 6:日志收集让 Agent 总结
排障最累的是翻日志。让 Agent 来:
"过去 24 小时 nginx access log 里 5xx 的请求,按 URL 分组统计 top 10"
Agent 自己组装 grep+awk 命令,几秒出结果。
心得 7:用 Plan 模式做大改动
任何超过 5 步的任务,先让 Agent 输出 plan:
"我要把整个集群从 1.27 升到 1.30。先给我升级 plan,不要执行。"
Agent 输出详细步骤后,你审核完再让它执行。
反面教训
❌ 让 Agent 直接改生产配置不留 git 痕迹:所有 IaC 改动走 PR
❌ 让 Agent 决定容量规划:它会给"经验值",不是基于你环境的真实数据
❌ 让 Agent 写 incident report:可以辅助,但不能代写——细节会被编造
最大的体会
Agent 适合做"重复、低风险、有明确成功标准"的事。决策和判断还得靠人。
教训:把 Agent 当成"超快的初级运维",给清晰的任务+边界,验证它的产出。