为什么不用 Helm
OpenClaw 是一个包含一些配置文件的单容器。真正有意思的定制在于代理内容(Markdown 文件、技能、配置覆盖),而不是基础设施模板。Kustomize 可以处理覆盖层,而无需 Helm chart 的开销。如果你的部署变得更复杂,可以在这些清单之上再叠加一个 Helm chart。你需要什么
- 一个正在运行的 Kubernetes 集群(AKS、EKS、GKE、k3s、kind、OpenShift 等)
- 已连接到你的集群的
kubectl - 至少一个模型提供商的 API key。
快速开始
deploy.sh 默认会创建 token 认证。为 Control UI 获取生成的 gateway token:
./scripts/k8s/deploy.sh --show-token 会在部署后打印 token。
使用 Kind 在本地测试
如果你没有集群,可以使用 Kind 在本地创建一个:./scripts/k8s/deploy.sh 进行部署。
逐步说明
1) 部署
选项 A:在环境中提供 API key(一步完成)--show-token,即可将 token 输出到 stdout,便于本地测试。
2) 访问 gateway
部署了什么
/startupz,并提供五分钟的启动时限。频道故障不会将健康的 Gateway 或 Control UI 从 Service 端点中移除。/healthz 仍然是存活探针;当监控应包含频道账户健康状态时,请单独使用 /readyz。
定制
Agent 指令
编辑scripts/k8s/manifests/configmap.yaml 中的 AGENTS.md 并重新部署:
Gateway 配置
编辑scripts/k8s/manifests/configmap.yaml 中的 openclaw.json。完整参考请查看 Gateway 配置。
init 容器仅在 PVC 中缺少 openclaw.json 和工作区 AGENTS.md 时,才会分别为其写入初始内容。首次启动后,持久化副本就是事实来源:通过 OpenClaw(onboard、channels add、doctor --fix、Control UI)所做的更改会在 Pod 重启后保留,而更新 ConfigMap 不会覆盖现有的 PVC 副本。若要根据更新后的 ConfigMap 有意重新写入某个文件,请删除持久化副本并重启:
添加提供商
重新运行并导出额外的 key:自定义命名空间
自定义镜像
编辑scripts/k8s/manifests/deployment.yaml 中的 image 字段:
超出 port-forward 的暴露方式
默认的 manifests 会将 gateway 绑定到 pod 内的 loopback。这适用于kubectl port-forward,但不适用于需要直接访问 pod IP 的 Kubernetes Service 或 Ingress 路径。
要通过 Ingress 或负载均衡器暴露 gateway:
- 将
scripts/k8s/manifests/configmap.yaml中的 gateway 绑定从loopback改为与你的部署模型匹配的非 loopback 绑定。 - 保持 gateway 认证启用,并使用正确的 TLS 终止入口。
- 使用支持的 Web 安全模型为远程访问配置 Control UI(例如 HTTPS/Tailscale Serve,以及在需要时显式允许的来源)。
重新部署
删除部署
openclaw 命名空间,此操作会删除该命名空间及其中的所有内容,包括 PVC。
对于自定义命名空间,--delete 仅删除 OpenClaw 资源,并保留该命名空间及其中无关的工作负载:
--delete-resources 可显式请求执行此范围限定的清理操作。这两种范围限定模式都会删除 OpenClaw Deployment、Service、PVC、ConfigMap 以及生成的 Secret。删除 PVC 会移除 OpenClaw 的存储声明以及对其持久化数据的访问;底层卷和数据是否被删除,取决于 PersistentVolume 或 StorageClass 的回收策略(Delete 或 Retain)。
要删除自定义命名空间及其中的所有工作负载,请显式选择加入:
架构说明
- 默认情况下,gateway 绑定到 Pod 内部的 loopback,因此所包含的设置适用于
kubectl port-forward。 - 没有集群级资源;所有内容都位于单个命名空间中。
- 安全加固:
readOnlyRootFilesystem、drop: ALLcapabilities、非 root 用户(UID 1000)。 - 默认配置将 Control UI 保持在更安全的本地访问路径上:loopback 绑定,再通过
kubectl port-forward访问http://127.0.0.1:18789。 - 如果你要超出 localhost 访问,请使用受支持的远程模式:HTTPS/Tailscale,以及相应的 gateway 绑定和 Control UI origin 设置。
- Secret 会在临时目录中生成,并直接应用到集群;不会将任何 secret 内容写入仓库检出目录。