OpenClaw從單機Docker部署遷移到Kubernetes集群的完整方案
摘要
當你的 OpenClaw 從單機走向集群,Kubernetes 是繞不開的選擇。本文從 K8s 核心概念出發(fā),系統(tǒng)講解 OpenClaw 的 K8s 部署架構(gòu)——包括 Deployment 無狀態(tài)部署、ConfigMap/Secret 配置管理、PersistentVolume 數(shù)據(jù)持久化、Service 服務發(fā)現(xiàn)、Ingress 流量入口、HPA 自動擴縮容,以及 Prometheus + Grafana 監(jiān)控集成。通過一個完整的實戰(zhàn)案例,你將掌握從 YAML 編寫到集群上線的全流程。讀完你會發(fā)現(xiàn):K8s 不是"更復雜的 Docker",而是讓運維從手動變成自動。
1. 引言:從 Docker 到 Kubernetes 的必然跨越
1.1 單機 Docker 的局限
上一篇文章我們完成了 OpenClaw 的 Docker 部署——一個 docker-compose up -d 就能跑起來。這在初期完全夠用。
但當你的業(yè)務增長后,問題開始浮現(xiàn):
| 場景 | Docker 的局限 | K8s 的解法 |
|---|---|---|
| 流量突增 | 手動 docker run 新實例 | HPA 自動擴縮容 |
| 實例掛了 | 手動重啟或等 restart: always | 自動重啟 + 健康檢查 + 就緒探測 |
| 滾動更新 | 手動停舊啟新,有停機時間 | RollingUpdate 零停機 |
| 多機器部署 | 每臺機器手動操作 | 統(tǒng)一調(diào)度到集群任意節(jié)點 |
| 配置變更 | 改文件 + 重啟容器 | ConfigMap 熱更新 |
| 服務發(fā)現(xiàn) | 硬編碼 IP 或 DNS | Service + CoreDNS 自動發(fā)現(xiàn) |
1.2 架構(gòu)演進


2. Kubernetes 核心概念速覽
2.1 關(guān)鍵資源對象
在寫 YAML 之前,先理解 K8s 的核心資源:
| 資源 | 作用 | 類比 |
|---|---|---|
| Pod | 最小部署單元,包含一個或多個容器 | 一個"進程組" |
| Deployment | 管理 Pod 的副本數(shù)、更新策略 | “部署管理器” |
| Service | 為 Pod 提供穩(wěn)定的網(wǎng)絡入口和負載均衡 | “內(nèi)網(wǎng)負載均衡器” |
| ConfigMap | 存儲非敏感配置 | “配置文件” |
| Secret | 存儲敏感信息(密鑰、Token) | “加密配置文件” |
| PersistentVolume | 持久化存儲 | “外接硬盤” |
| Ingress | 外部流量入口,HTTP/HTTPS 路由 | “Nginx 反向代理” |
| HPA | 根據(jù) CPU/內(nèi)存自動調(diào)整 Pod 數(shù)量 | “自動擴容控制器” |
2.2 資源關(guān)系圖

3. OpenClaw K8s 部署完整配置
3.1 Namespace 和 ConfigMap
# 00-namespace.yaml
apiVersion: v1
kind: Namespace
metadata:
name: openclaw
labels:
app: openclaw
environment: production# 01-configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: openclaw-config
namespace: openclaw
data:
openclaw.yaml: |
gateway:
port: 18789
auth_token: ${GATEWAY_AUTH_TOKEN}
model:
default: ${DEFAULT_MODEL}
providers:
openai:
api_key: ${OPENAI_API_KEY}
logging:
level: info
file: /data/logs/gateway.log
format: json
channels:
feishu:
enabled: true
app_id: ${FEISHU_APP_ID}
performance:
max_concurrent_requests: 50
request_timeout_ms: 120000
security:
rate_limit:
enabled: true
max_requests_per_minute: 100# 02-secret.yaml apiVersion: v1 kind: Secret metadata: name: openclaw-secrets namespace: openclaw type: Opaque stringData: GATEWAY_AUTH_TOKEN: "your-secure-token-here" OPENAI_API_KEY: "sk-prod-xxxxxxxxxxxxx" FEISHU_APP_ID: "cli_xxxxxxxxxxxxx" FEISHU_APP_SECRET: "xxxxxxxxxxxxxxxxxxxx" TELEGRAM_BOT_TOKEN: "123456789:ABCdefGHIjklMNOpqrsTUVwxyz"
3.2 Deployment 和 Service
# 03-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: openclaw-gateway
namespace: openclaw
labels:
app: openclaw
component: gateway
spec:
# 副本數(shù)(HPA 啟用后會自動調(diào)整)
replicas: 3
# 滾動更新策略
strategy:
type: RollingUpdate
rollingUpdate:
maxSurge: 1 # 更新時最多多出 1 個 Pod
maxUnavailable: 0 # 更新時不允許不可用 Pod
# Pod 選擇器
selector:
matchLabels:
app: openclaw
component: gateway
# Pod 模板
template:
metadata:
labels:
app: openclaw
component: gateway
annotations:
prometheus.io/scrape: "true"
prometheus.io/port: "18789"
prometheus.io/path: "/metrics"
spec:
# 優(yōu)雅終止時間
terminationGracePeriodSeconds: 60
# 容器定義
containers:
- name: gateway
image: openclaw:latest
imagePullPolicy: Always
ports:
- name: http
containerPort: 18789
protocol: TCP
# 環(huán)境變量(從 Secret 注入)
envFrom:
- secretRef:
name: openclaw-secrets
env:
- name: DEFAULT_MODEL
value: "gpt-4o-mini"
- name: NODE_ENV
value: "production"
- name: TZ
value: "Asia/Shanghai"
# 配置文件掛載
volumeMounts:
- name: config
mountPath: /etc/openclaw
readOnly: true
- name: data
mountPath: /data/openclaw
- name: logs
mountPath: /data/logs
# 資源限制
resources:
requests:
cpu: "500m"
memory: "512Mi"
limits:
cpu: "2000m"
memory: "2Gi"
# 存活探針——檢測容器是否存活
livenessProbe:
httpGet:
path: /health
port: 18789
initialDelaySeconds: 30
periodSeconds: 15
timeoutSeconds: 5
failureThreshold: 3
# 就緒探針——檢測容器是否準備好接收流量
readinessProbe:
httpGet:
path: /health
port: 18789
initialDelaySeconds: 10
periodSeconds: 10
timeoutSeconds: 3
failureThreshold: 2
# 啟動探針——給慢啟動的容器更多時間
startupProbe:
httpGet:
path: /health
port: 18789
initialDelaySeconds: 5
periodSeconds: 10
failureThreshold: 12 # 最多等 2 分鐘
# 數(shù)據(jù)卷定義
volumes:
- name: config
configMap:
name: openclaw-config
- name: data
persistentVolumeClaim:
claimName: openclaw-data-pvc
- name: logs
emptyDir: {}
# Pod 反親和性——盡量分散到不同節(jié)點
affinity:
podAntiAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 100
podAffinityTerm:
labelSelector:
matchLabels:
app: openclaw
component: gateway
topologyKey: kubernetes.io/hostname# 04-service.yaml
apiVersion: v1
kind: Service
metadata:
name: openclaw-gateway
namespace: openclaw
labels:
app: openclaw
component: gateway
spec:
type: ClusterIP
selector:
app: openclaw
component: gateway
ports:
- name: http
port: 80
targetPort: 18789
protocol: TCP
# 會話親和性——同一客戶端請求盡量路由到同一 Pod
sessionAffinity: ClientIP
sessionAffinityConfig:
clientIP:
timeoutSeconds: 3600
3.3 PersistentVolume 持久化存儲
# 05-persistentvolume.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: openclaw-data-pvc
namespace: openclaw
spec:
accessModes:
- ReadWriteMany # 多 Pod 同時讀寫
resources:
requests:
storage: 20Gi
storageClassName: nfs-client # 根據(jù)你的存儲類型調(diào)整
3.4 Ingress 流量入口
# 06-ingress.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: openclaw-ingress
namespace: openclaw
annotations:
# Nginx Ingress 配置
nginx.ingress.kubernetes.io/proxy-body-size: "50m"
nginx.ingress.kubernetes.io/proxy-read-timeout: "120"
nginx.ingress.kubernetes.io/proxy-send-timeout: "120"
nginx.ingress.kubernetes.io/websocket-services: "openclaw-gateway"
# SSL 重定向
nginx.ingress.kubernetes.io/ssl-redirect: "true"
# 速率限制
nginx.ingress.kubernetes.io/limit-rps: "100"
# 證書管理
cert-manager.io/cluster-issuer: "letsencrypt-prod"
spec:
ingressClassName: nginx
tls:
- hosts:
- openclaw.your-domain.com
secretName: openclaw-tls
rules:
- host: openclaw.your-domain.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: openclaw-gateway
port:
number: 80
3.5 HPA 自動擴縮容
# 07-hpa.yaml
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: openclaw-gateway-hpa
namespace: openclaw
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: openclaw-gateway
# 最小/最大副本數(shù)
minReplicas: 2
maxReplicas: 10
# 擴縮容指標
metrics:
# CPU 使用率
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 70
# 內(nèi)存使用率
- type: Resource
resource:
name: memory
target:
type: Utilization
averageUtilization: 80
# 自定義指標——請求速率
- type: Pods
pods:
metric:
name: http_requests_per_second
target:
type: AverageValue
averageValue: "50"
# 擴縮容行為
behavior:
# 擴容策略——快速響應
scaleUp:
stabilizationWindowSeconds: 60 # 60秒穩(wěn)定窗口
policies:
- type: Percent
value: 100 # 每次最多翻倍
periodSeconds: 60
- type: Pods
value: 4 # 每次最多加4個
periodSeconds: 60
selectPolicy: Max
# 縮容策略——緩慢回收
scaleDown:
stabilizationWindowSeconds: 300 # 5分鐘穩(wěn)定窗口
policies:
- type: Percent
value: 10 # 每次最多減10%
periodSeconds: 120
selectPolicy: Min
4. 監(jiān)控集成:Prometheus + Grafana
4.1 ServiceMonitor 配置
# 08-servicemonitor.yaml
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
name: openclaw-gateway
namespace: openclaw
labels:
release: prometheus
spec:
selector:
matchLabels:
app: openclaw
component: gateway
endpoints:
- port: http
path: /metrics
interval: 30s
scrapeTimeout: 10s
4.2 Grafana 儀表盤關(guān)鍵指標
| 指標 | PromQL | 告警閾值 |
|---|---|---|
| Pod CPU 使用率 | rate(container_cpu_usage_seconds_total{pod=~"openclaw-gateway-.*"}[5m]) | > 80% |
| Pod 內(nèi)存使用率 | container_memory_usage_bytes{pod=~"openclaw-gateway-.*"} / container_spec_memory_limit_bytes | > 85% |
| HTTP 請求速率 | rate(http_requests_total[5m]) | > 100/s |
| 請求延遲 P99 | histogram_quantile(0.99, rate(http_request_duration_seconds_bucket[5m])) | > 2s |
| 錯誤率 | rate(http_requests_total{status=~"5.."}[5m]) / rate(http_requests_total[5m]) | > 1% |
| Pod 重啟次數(shù) | rate(kube_pod_container_status_restarts_total{pod=~"openclaw-gateway-.*"}[1h]) | > 0 |
截圖位置:Grafana 儀表盤截圖,展示 OpenClaw Gateway 的 CPU、內(nèi)存、請求速率、P99 延遲、錯誤率五個核心指標面板。
5. 實戰(zhàn):一鍵部署到 K8s 集群
5.1 部署腳本
#!/bin/bash
# deploy-k8s.sh
# OpenClaw K8s 一鍵部署腳本
set -e
NAMESPACE="openclaw"
echo "?? 開始部署 OpenClaw 到 Kubernetes..."
# 1. 檢查 kubectl 連接
if ! kubectl cluster-info &> /dev/null; then
echo "? 無法連接到 Kubernetes 集群"
echo "?? 請檢查 kubeconfig 配置"
exit 1
fi
echo "? 集群連接正常: $(kubectl cluster-info | head -1)"
# 2. 創(chuàng)建 Namespace
kubectl apply -f 00-namespace.yaml
# 3. 部署 ConfigMap 和 Secret
kubectl apply -f 01-configmap.yaml
kubectl apply -f 02-secret.yaml
# 4. 創(chuàng)建持久化存儲
kubectl apply -f 05-persistentvolume.yaml
# 5. 部署應用
kubectl apply -f 03-deployment.yaml
kubectl apply -f 04-service.yaml
# 6. 等待 Deployment 就緒
echo "? 等待 Pod 就緒..."
kubectl wait --for=condition=available \
--timeout=300s \
deployment/openclaw-gateway \
-n $NAMESPACE
# 7. 部署 Ingress
kubectl apply -f 06-ingress.yaml
# 8. 部署 HPA
kubectl apply -f 07-hpa.yaml
# 9. 部署監(jiān)控
kubectl apply -f 08-servicemonitor.yaml
# 10. 顯示狀態(tài)
echo ""
echo "?? 部署狀態(tài):"
kubectl get all -n $NAMESPACE
echo ""
echo "?? HPA 狀態(tài):"
kubectl get hpa -n $NAMESPACE
echo ""
echo "? 部署完成!"
echo " 訪問地址: https://openclaw.your-domain.com"
echo " 查看日志: kubectl logs -f deployment/openclaw-gateway -n $NAMESPACE"
echo " 查看 Pod: kubectl get pods -n $NAMESPACE -w"5.2 常用運維命令
# 查看 Pod 狀態(tài) kubectl get pods -n openclaw -o wide # 查看 Pod 日志(實時) kubectl logs -f deployment/openclaw-gateway -n openclaw # 查看所有 Pod 日志(stern 工具) stern -n openclaw openclaw-gateway # 進入 Pod 調(diào)試 kubectl exec -it deployment/openclaw-gateway -n openclaw -- sh # 手動擴容 kubectl scale deployment openclaw-gateway -n openclaw --replicas=5 # 滾動重啟 kubectl rollout restart deployment/openclaw-gateway -n openclaw # 查看滾動更新狀態(tài) kubectl rollout status deployment/openclaw-gateway -n openclaw # 回滾到上一個版本 kubectl rollout undo deployment/openclaw-gateway -n openclaw # 查看 HPA 狀態(tài) kubectl describe hpa openclaw-gateway-hpa -n openclaw # 查看資源使用 kubectl top pods -n openclaw kubectl top nodes
截圖位置:kubectl get all -n openclaw 命令的輸出截圖,展示所有 K8s 資源的運行狀態(tài)。
6. 生產(chǎn)環(huán)境最佳實踐
6.1 安全加固清單
| 檢查項 | 配置 | 說明 |
|---|---|---|
| 非 root 運行 | securityContext.runAsNonRoot: true | 容器不以 root 運行 |
| 只讀文件系統(tǒng) | securityContext.readOnlyRootFilesystem: true | 防止容器內(nèi)寫文件 |
| 資源限制 | resources.limits | 防止單個 Pod 耗盡節(jié)點資源 |
| 網(wǎng)絡策略 | NetworkPolicy | 限制 Pod 間通信 |
| 鏡像掃描 | Trivy / Clair | 掃描鏡像漏洞 |
| Secret 加密 | Sealed Secrets / Vault | 加密存儲敏感信息 |
6.2 高可用架構(gòu)總結(jié)

7. 總結(jié)
本文從零構(gòu)建了 OpenClaw 的 Kubernetes 生產(chǎn)級部署方案:
核心要點:
- Deployment 管理無狀態(tài) Pod:3副本起步,RollingUpdate 零停機更新,Pod 反親和分散到不同節(jié)點
- ConfigMap + Secret 分離配置:非敏感配置用 ConfigMap,密鑰用 Secret,環(huán)境變量注入
- 三探針保障可用性:startupProbe(慢啟動容忍)→ readinessProbe(流量就緒)→ livenessProbe(存活檢測)
- HPA 自動擴縮容:CPU > 70% 觸發(fā)擴容(最多10個),CPU < 50% 觸發(fā)縮容(最少2個),擴容快縮容慢
- Prometheus + Grafana 全棧監(jiān)控:ServiceMonitor 自動發(fā)現(xiàn),5個核心指標面板,告警規(guī)則聯(lián)動
- Ingress 統(tǒng)一流量入口:TLS 終止、WebSocket 支持、速率限制、證書自動管理
思考題:
- 你的 OpenClaw 部署在 K8s 集群中,但模型 API(OpenAI)在集群外部。如果模型 API 響應變慢(P99 > 10s),HPA 會誤判為"需要擴容"嗎?如何避免這種"下游慢導致上游擴容"的級聯(lián)問題?
- ConfigMap 更新后,Pod 內(nèi)的配置文件不會自動更新。你會如何設計配置熱更新方案——是重啟 Pod,還是用 sidecar 容器監(jiān)聽 ConfigMap 變化?
- 如果集群中某個節(jié)點宕機,上面的 Pod 會被調(diào)度到其他節(jié)點。但 PersistentVolume 如果是節(jié)點本地存儲(hostPath),數(shù)據(jù)就丟了。你會如何選擇存儲方案——NFS、Ceph、還是云廠商的托管存儲?
以上就是OpenClaw從單機Docker部署遷移到Kubernetes集群的完整方案的詳細內(nèi)容,更多關(guān)于OpenClaw從Docker遷移到Kubernetes的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
本文詳細介紹使用Docker部署OpenClD智能體平臺,涵蓋開發(fā)和生產(chǎn)環(huán)境部署指南,通過合理配置Docker確保嚴格隔離和資源限制,感興趣的可以了解一下2026-06-11
部署OpenClaw的過程看似簡單,卻因為細節(jié)問題踩了不少坑,這篇文章主要介紹了docker部署openclaw遇到的一些踩坑記錄,文中通過代碼及圖文介紹的非常詳細,需要的朋友可以參考下2026-04-28
Docker部署OpenClaw后容器內(nèi)無法使用代理的解決方法
在本地跑得好好的OpenClaw,一放到Docker容器里,代理就不生效了,如果你正在經(jīng)歷這些,別懷疑人生——這不是你的問題,是Docker網(wǎng)絡和OpenClaw代理解析邏輯的雙重夾擊,我2026-04-23
阿里云CentOS上如何使用Docker部署OpenClaw并接入百煉大模型
文章主要講述了作者在阿里云服務器上搭建OpenClaw的過程,選擇了阿里云百煉大模型并使用了免費額度,文中詳細介紹了環(huán)境準備步驟,包括安裝Docker和DockerCompose,以及配置Doc2026-04-15
OpenClaw接入飛書機器人的完整教程(Docker部署版)
本教程基于 Docker 部署的 OpenClaw 環(huán)境編寫,所有命令都已適配 Docker 容器化場景,如果你尚未部署 OpenClaw,請先完成基礎部署,感興趣的小伙伴可以跟隨小編一起學習一2026-04-10
騰訊云OpenClaw部署之解決Docker鏡像拉取超時的完整步驟
penClaw作為2026年爆火的開源AI 執(zhí)行引擎,憑借其強大的任務自動化能力和靈活的擴展性,吸引了大量開發(fā)者和企業(yè)用戶,這篇文章主要介紹了騰訊云OpenClaw部署之解決Docker鏡像2026-04-09
OpenClaw安裝部署指南之npm、Docker與源碼三種模式詳解
OpenClaw 是一款熱門且強大的開源 AI 智能體框架,大家稱它為養(yǎng)龍蝦,其核心能力是讓大語言模型能夠理解指令并直接操作你的電腦完成真實任務,這篇文章主要介紹了OpenClaw安裝2026-04-08
想要擁有一個完全私有化部署、支持 Claude 和 ChatGPT 的中文 AI 助手?OpenClaw(原Clawdbot/Moltbot)漢化版正是你的不二之選,本文給大家介紹了如何使用Docker部署OpenC2026-03-30
OpenClaw Docker部署踩坑全記錄(OpenClaw v2026.3.23)
文章詳細記錄了使用Docker部署OpenClaw的全過程,強調(diào)了使用官方鏡像而非本地build的重要性,并提供了完整的docker-compose配置文件,文章還指導了部署流程和訪問地址,最后解2026-03-26
在Docker中配置 OpenClaw實現(xiàn)帶狀態(tài)的網(wǎng)頁自動化的解決方案
作者分享了如何在WSL環(huán)境下使用Docker部署OpenClaw,并通過CloudflareTunnel實現(xiàn)與宿主機瀏覽器的通信,同時保持持久化登錄狀態(tài),以實現(xiàn)跨平臺的自動化任務執(zhí)行,感興趣的朋友2026-03-26











