把 OpenClaw 放进 Kubernetes,目标不是「能起 Pod」,而是升级可回滚、配置可审计、密钥可轮换、故障可复现。下面按团队最常踩的三块写:Helm Chart 与裸脚本怎么选、三类探针如何压住误杀、Secret 变更怎样不静默失效,最后用 CrashLoopBackOff 一条命令链把排错顺序钉死。生产里还要约定谁持有 kubeconfig、变更是否走 MR 与签名镜像;具体镜像名、端口与健康路径以你锁定的 OpenClaw 版本文档为准,编排侧原则跨版本成立。
一、Helm 与脚本部署:对照与边界
Helm 适合「同一套 values 要在 dev/stage/prod 分层」:依赖顺序(ServiceAccount、RBAC、ConfigMap、Workload)写进 Chart,helm diff 或 CI 里的 dry-run 能进评审,发布单可附 revision 号。kubectl apply -k 或 shell 流水线则适合一次性 PoC:改得快,但漂移难查、谁 last-write-wins 不透明。实践上:PoC 用脚本跑通探针与 Secret 挂载,再把稳定字段抽进 Chart;与 GitHub Actions 或远程 Runner 的衔接可对照 了解更多:OpenClaw 手把手部署与自动化集成手册。
二、探针:别让 kubelet 替你「误杀」
startupProbe 拉长冷启动窗口,避免 Java/Node 类进程还没 listen 就被 liveness 判死;没有 startup 时至少把 initialDelaySeconds 写足并压测冷启动曲线。readiness 只应对「能否接流量」:依赖下游不可用时,宁可 NotReady 也不要反复重启。liveness 要极轻:命中本地 /healthz 或 TCP 端口即可,别在里面打外部 API,否则网络抖动直接 CrashLoop。超时、阈值与 terminationGracePeriodSeconds 一起调,否则滚动发布时旧 Pod 拖不干净。
三、Secret 与轮换:挂载不是「一次读终身」
把令牌放进 Secret 再挂进 Pod,多数应用只在进程启动时读一次:你在控制面 kubectl edit secret 后,业务仍用旧值,直到滚动重启。团队级做法:用 Reloader/Stakater 注解触发滚动,或在 CI 里改 Secret 后紧跟 kubectl rollout restart。不要把同一 Secret 既给网关又给 Sidecar 却不同步版本号——和 macOS 上 launchd 双份 plist 一样难查,常驻进程排错可平行参考 了解更多:OpenClaw 网关 launchd 稳定性排错手册。
四、CrashLoopBackOff:可复现排错顺序
看到 CrashLoopBackOff,按固定顺序减变量:1)kubectl describe pod 看 Last State、OOMKilled、Exit Code;2)kubectl logs --previous 取上一次崩溃前日志;3)进容器 -- sh 手工起主进程看环境变量与文件挂载;4)对照镜像默认用户与只读根文件系统(readOnlyRootFilesystem)是否挡了写配置。若只有新版本才崩,再比对 helm get values 与上一版差异。刻意复现:把探针调苛刻或注入错误 Secret,再回滚 Helm revision,确认「可观测 + 可回滚」闭环。
- Events 里是否反复 Back-off restarting 且间隔指数增长?
- 是否只有某个节点上的 Pod 失败(镜像拉取、本地盘)?
- 是否升级后首包才崩(依赖迁移脚本未跑)?
编排之外:网关与 Runner 仍需要可靠的 macOS 底座
K8s 管的是副本与发布,但 iOS 构建、签名与图形化排障仍落在 macOS。把控制面放在集群里、把重活丢给独占 Mac mini,能同时吃到 Apple Silicon 内存带宽与 macOS 原生工具链;机器侧 静音与约 4W 级待机功耗适合长期在线,Gatekeeper、SIP、FileVault 则降低无人值守面风险。
若你要把本文流水线接到云上独享 Mac,Mac mini M4 仍是 2026 年高性价比起点——前往 Macstripe 首页 查看机型与区域。