Kubernetes 上的 OpenClaw
在 Kubernetes 上執行 OpenClaw 的最小起點——這不是 production-ready 的部署。涵蓋核心資源,旨在讓你依據環境調整。
為什麼不用 Helm?
OpenClaw 是一個容器加幾個設定檔。有趣的客製化在於 agent 內容(markdown 檔案、技能、設定覆寫),不在基礎設施範本化。Kustomize 處理 overlay 而不需要 Helm chart 的額外負擔。如果部署變複雜,可以在這些 manifest 之上疊加 Helm chart。
你需要什麼
- 運行中的 Kubernetes 叢集(AKS、EKS、GKE、k3s、kind、OpenShift 等)
kubectl已連接到叢集- 至少一個模型供應商的 API 金鑰
快速開始
# 替換為你的供應商:ANTHROPIC、GEMINI、OPENAI 或 OPENROUTER
export <PROVIDER>_API_KEY="..."
./scripts/k8s/deploy.sh
kubectl port-forward svc/openclaw 18789:18789 -n openclaw
open http://localhost:18789
取得閘道 token 並貼入 Control UI:
kubectl get secret openclaw-secrets -n openclaw -o jsonpath='{.data.OPENCLAW_GATEWAY_TOKEN}' | base64 -d
本機除錯時,./scripts/k8s/deploy.sh --show-token 會在部署後印出 token。
使用 Kind 本機測試
如果沒有叢集,用 Kind 建立本機叢集:
./scripts/k8s/create-kind.sh # 自動偵測 docker 或 podman
./scripts/k8s/create-kind.sh --delete # 刪除
然後照常用 ./scripts/k8s/deploy.sh 部署。
逐步說明
1) 部署
選項 A — API 金鑰在環境變數中(一步完成):
# 替換為你的供應商:ANTHROPIC、GEMINI、OPENAI 或 OPENROUTER
export <PROVIDER>_API_KEY="..."
./scripts/k8s/deploy.sh
腳本建立含有 API 金鑰和自動產生閘道 token 的 Kubernetes Secret,然後部署。如果 Secret 已存在,會保留現有 token 和未變更的供應商金鑰。
選項 B — 分開建立 secret:
export <PROVIDER>_API_KEY="..."
./scripts/k8s/deploy.sh --create-secret
./scripts/k8s/deploy.sh
使用 --show-token 將 token 印到 stdout 用於本機測試。
2) 存取閘道
kubectl port-forward svc/openclaw 18789:18789 -n openclaw
open http://localhost:18789
部署內容
Namespace: openclaw(可透過 OPENCLAW_NAMESPACE 設定)
├── Deployment/openclaw # 單一 pod,init 容器 + 閘道
├── Service/openclaw # ClusterIP,連接埠 18789
├── PersistentVolumeClaim # 10Gi 用於 agent 狀態和設定
├── ConfigMap/openclaw-config # openclaw.json + AGENTS.md
└── Secret/openclaw-secrets # 閘道 token + API 金鑰
客製化
Agent 指令
編輯 scripts/k8s/manifests/configmap.yaml 中的 AGENTS.md 並重新部署:
./scripts/k8s/deploy.sh
閘道設定
編輯 scripts/k8s/manifests/configmap.yaml 中的 openclaw.json。完整參考請見閘道設定。
新增供應商
帶額外金鑰重新執行:
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
自訂 namespace
OPENCLAW_NAMESPACE=my-namespace ./scripts/k8s/deploy.sh
自訂映像
編輯 scripts/k8s/manifests/deployment.yaml 中的 image 欄位:
image: ghcr.io/openclaw/openclaw:2026.3.1
超越 port-forward 的存取
預設 manifest 將閘道綁定到 pod 內的 loopback。這適用於 kubectl port-forward,但不適用於需要存取 pod IP 的 Kubernetes Service 或 Ingress。
要透過 Ingress 或負載平衡器暴露閘道:
- 將
scripts/k8s/manifests/configmap.yaml中的閘道綁定從loopback改為符合你部署模型的 non-loopback 綁定 - 保持閘道驗證啟用並使用適當的 TLS-terminated 入口點
- 使用支援的網頁安全模型(如 HTTPS/Tailscale Serve 和明確的 allowed origins)設定 Control UI 的遠端存取
重新部署
./scripts/k8s/deploy.sh
套用所有 manifest 並重啟 pod 以取得設定或 secret 變更。
清除
./scripts/k8s/deploy.sh --delete
刪除 namespace 及其中所有資源,包含 PVC。
架構備註
- 閘道預設綁定到 pod 內的 loopback,因此內建設定適用
kubectl port-forward - 無 cluster-scoped 資源——一切在單一 namespace 中
- 安全性:
readOnlyRootFilesystem、drop: ALLcapabilities、非 root 使用者(UID 1000) - 預設設定將 Control UI 保持在較安全的本機存取路徑:loopback 綁定 +
kubectl port-forward到http://127.0.0.1:18789 - 超越 localhost 存取時,使用支援的遠端模型:HTTPS/Tailscale + 適當的閘道綁定和 Control UI origin 設定
- Secret 在暫存目錄中產生並直接套用到叢集——不會在儲存庫 checkout 中寫入 secret 資料
檔案結構
scripts/k8s/
├── deploy.sh # 建立 namespace + secret,透過 kustomize 部署
├── create-kind.sh # 本機 Kind 叢集(自動偵測 docker/podman)
└── manifests/
├── kustomization.yaml # Kustomize base
├── configmap.yaml # openclaw.json + AGENTS.md
├── deployment.yaml # 含安全強化的 Pod spec
├── pvc.yaml # 10Gi 持久儲存
└── service.yaml # ClusterIP,連接埠 18789