Kubernetes
Kubernetes 上的 OpenClaw
Section titled “Kubernetes 上的 OpenClaw”在 Kubernetes 上运行 OpenClaw 的一个最低起点——并非可用于生产环境的部署。它涵盖了核心资源,旨在根据您的环境进行调整。
为什么不用 Helm?
Section titled “为什么不用 Helm?”OpenClaw 是一个带有一些配置文件的单容器。有趣的定制在于代理内容(markdown 文件、技能、配置覆盖),而不是基础架构模板。Kustomize 无需 Helm chart 的开销即可处理叠加层。如果您的部署变得更加复杂,可以在这些清单之上分层 Helm chart。
- 一个正在运行的 Kubernetes 集群(AKS、EKS、GKE、k3s、kind、OpenShift 等)
kubectl已连接到您的集群- 至少一个模型提供商的 API 密钥
# Replace with your provider: ANTHROPIC, GEMINI, OPENAI, or OPENROUTERexport <PROVIDER>_API_KEY="..."./scripts/k8s/deploy.sh
kubectl port-forward svc/openclaw 18789:18789 -n openclawopen http://localhost:18789检索为控制 UI 配置的共享密钥。此部署脚本默认创建令牌身份验证:
kubectl get secret openclaw-secrets -n openclaw -o jsonpath='{.data.OPENCLAW_GATEWAY_TOKEN}' | base64 -d对于本地调试,./scripts/k8s/deploy.sh --show-token 会在部署后打印令牌。
使用 Kind 进行本地测试
Section titled “使用 Kind 进行本地测试”如果您没有集群,请使用 Kind 在本地创建一个:
./scripts/k8s/create-kind.sh # auto-detects docker or podman./scripts/k8s/create-kind.sh --delete # tear down然后照常使用 ./scripts/k8s/deploy.sh 进行部署。
选项 A — API 密钥在环境中(一步到位):
# Replace with your provider: ANTHROPIC, GEMINI, OPENAI, or OPENROUTERexport <PROVIDER>_API_KEY="..."./scripts/k8s/deploy.sh该脚本会使用 API 密钥和自动生成的网关令牌创建一个 Kubernetes Secret,然后进行部署。如果 Secret 已存在,它将保留当前的网关令牌以及任何未更改的提供商密钥。
选项 B — 单独创建 secret:
export <PROVIDER>_API_KEY="..."./scripts/k8s/deploy.sh --create-secret./scripts/k8s/deploy.sh如果您希望令牌打印到标准输出以进行本地测试,请对任一命令使用 --show-token。
2) 访问网关
Section titled “2) 访问网关”kubectl port-forward svc/openclaw 18789:18789 -n openclawopen http://localhost:18789Namespace: openclaw (configurable via OPENCLAW_NAMESPACE)├── Deployment/openclaw # Single pod, init container + gateway├── Service/openclaw # ClusterIP on port 18789├── PersistentVolumeClaim # 10Gi for agent state and config├── ConfigMap/openclaw-config # openclaw.json + AGENTS.md└── Secret/openclaw-secrets # Gateway token + API keysAgent 指令
Section titled “Agent 指令”编辑 scripts/k8s/manifests/configmap.yaml 中的 AGENTS.md 并重新部署:
./scripts/k8s/deploy.shGateway(网关) 网关 配置
Section titled “Gateway(网关) 网关 配置”在 scripts/k8s/manifests/configmap.yaml 中编辑 openclaw.json。有关完整参考,请参阅 Gateway(网关) 配置。
导出额外的密钥后重新运行:
export ANTHROPIC_API_KEY="..."export OPENAI_API_KEY="..."./scripts/k8s/deploy.sh --create-secret./scripts/k8s/deploy.sh除非您覆盖它们,否则现有的提供商密钥将保留在 Secret 中。
或者直接修补 Secret:
kubectl patch secret openclaw-secrets -n openclaw \ -p '{"stringData":{"<PROVIDER>_API_KEY":"..."}}'kubectl rollout restart deployment/openclaw -n openclaw自定义命名空间
Section titled “自定义命名空间”OPENCLAW_NAMESPACE=my-namespace ./scripts/k8s/deploy.sh编辑 scripts/k8s/manifests/deployment.yaml 中的 image 字段:
image: ghcr.io/openclaw/openclaw:latest # or pin to a specific version from https://github.com/openclaw/openclaw/releases超越端口转发的暴露
Section titled “超越端口转发的暴露”默认清单将网关绑定到 Pod 内部的环回地址。这适用于 kubectl port-forward,但不适用于需要访问 Pod IP 的 Kubernetes Service 或 Ingress 路径。
如果您想通过 Ingress 或负载均衡器暴露网关:
- 将
scripts/k8s/manifests/configmap.yaml中的网关绑定地址从loopback更改为符合您的部署模型的非环回绑定地址 - 保持网关身份验证已启用,并使用适当的 TLS 终止入口点
- 使用支持的 Web 安全模型(例如 HTTPS/Tailscale Serve 和必要时显式允许的源)配置控制 UI 以进行远程访问
./scripts/k8s/deploy.sh这将应用所有清单并重启 Pod 以获取任何配置或 Secret 的更改。
./scripts/k8s/deploy.sh --delete这将删除命名空间及其中的所有资源,包括 PVC。
- 默认情况下,网关绑定到 Pod 内部的环回地址,因此包含的设置是用于
kubectl port-forward - 没有集群范围资源——所有资源都位于单个命名空间中
- 安全性:
readOnlyRootFilesystem,drop: ALL能力,非 root 用户(UID 1000) - 默认配置将控制 UI 保持在更安全的本地访问路径上:环回绑定加上
kubectl port-forward到http://127.0.0.1:18789 - 如果您超出 localhost 访问范围,请使用受支持的远程模型:HTTPS/Tailscale 加上适当的网关绑定和控制 UI 源设置
- 机密是在临时目录中生成的,并直接应用到集群 —— 没有机密材料被写入到仓库检出目录
scripts/k8s/├── deploy.sh # Creates namespace + secret, deploys via kustomize├── create-kind.sh # Local Kind cluster (auto-detects docker/podman)└── manifests/ ├── kustomization.yaml # Kustomize base ├── configmap.yaml # openclaw.json + AGENTS.md ├── deployment.yaml # Pod spec with security hardening ├── pvc.yaml # 10Gi persistent storage └── service.yaml # ClusterIP on 18789