1. 项目概述:在Kubernetes上部署你的AI智能体网关
如果你正在寻找一种方式,将类似Claude Code或Cursor这类强大的AI编程助手,变成一个能够通过Telegram、Slack等聊天工具与你对话、并能在浏览器中自动执行任务的“智能体”,那么OpenClaw正是你需要的工具。简单来说,OpenClaw是一个AI智能体网关,它充当了一个桥梁,将聊天界面与一个运行在浏览器环境中的AI助手连接起来。你可以把它想象成一个“数字员工”,你通过发消息给它下达指令,它则在后台的Chrome浏览器里帮你写代码、查资料、操作网页。
而这个feiskyer/openclaw-kubernetes项目,则是将这个“数字员工”的生产环境打包好,让你能通过几行命令,就把它稳稳当当地部署在你自己的Kubernetes集群里。它使用Helm Chart进行封装,解决了部署中最繁琐的部分:持久化存储、密钥管理、模型路由代理,甚至还包括一个实时查看AI操作过程的浏览器GUI。这意味着,你无需从零开始配置Docker镜像、编写复杂的K8s YAML文件,也无需担心重启后数据丢失。对于已经熟悉Kubernetes和Helm的开发者或运维工程师而言,这几乎是部署此类AI应用最优雅、最“云原生”的方式。
1.1 核心需求与适用场景解析
那么,谁需要部署OpenClaw呢?我认为主要有三类用户:
第一类是个人开发者或技术爱好者。你可能希望有一个7x24小时在线的AI助手,通过Telegram Bot随时与你互动,帮你记录灵感、管理待办事项,或者在你离开电脑时,远程执行一些简单的自动化任务。OpenClaw提供了完整的、开箱即用的解决方案。
第二类是小团队或创业公司。团队需要一个共享的、可管理的AI助手,集成在Slack或飞书这样的协作工具中。OpenClaw支持多消息平台,并且可以通过Kubernetes的命名空间和资源限制,为不同团队部署独立的实例,实现资源隔离和成本控制。
第三类是需要构建复杂AI工作流的进阶用户。OpenClaw支持“技能”(Skills)系统,你可以编写结构化的指令集,教AI如何操作特定的开发工具(比如Git、Docker、特定的CLI工具)。结合其“语义记忆”(Memory Search)功能,AI可以记住之前的对话和工作上下文,实现更复杂、连贯的自动化流程。这在Kubernetes上部署,意味着你可以轻松地挂载共享存储(如NFS),让多个Pod或实例访问同一套技能库和记忆库。
这个Helm Chart的价值在于,它将一个功能丰富的AI应用,抽象成了几个简单的Helm--set参数。你不需要关心Xvfb、Fluxbox、noVNC这些GUI组件如何编排,也不需要手动处理LiteLLM代理的配置和密钥注入。Chart帮你完成了所有脏活累活,让你能专注于使用AI能力本身。
2. 架构设计与核心组件拆解
在真正动手部署之前,理解OpenClaw在Kubernetes中的运行架构至关重要。这能帮助你在出现问题时快速定位,也能让你明白每个配置项背后的意义。整个部署的核心是一个StatefulSet,这是为了确保Pod拥有稳定的网络标识和持久化存储。让我们拆开看看里面都有什么。
2.1 核心工作负载:OpenClaw Gateway
这是整个应用的大脑,一个Node.js应用。它主要做三件事:
- 消息路由:监听并处理来自Telegram、Slack等平台的消息,将其转换为AI可理解的指令。
- AI任务调度:将用户指令发送给后端的AI模型(通过LiteLLM代理),并接收AI的回复和操作指令。
- 浏览器控制:通过Puppeteer或类似技术,在一个无头(但可通过VNC查看)的Chrome实例中执行AI返回的操作,比如打开网页、点击按钮、填写表单、执行代码。
在Chart中,它被封装在一个容器里,这个容器内部实际上运行着一个微型的桌面环境。这是通过supervisord进程管理器来实现的,它同时启动了Xvfb(虚拟显示服务器)、Fluxbox(窗口管理器)、x11vnc(VNC服务器)和noVNC(Web版VNC客户端)等一系列服务。这种设计确保了浏览器需要一个图形界面来运行,即便在服务器这种没有真实显示设备的环境下。
注意:正因为包含了完整的GUI栈,这个容器镜像的体积相对较大,且运行时需要一定的CPU和内存资源(默认请求1Gi内存,限制8Gi)。在资源有限的集群上部署时,需要留意。
2.2 模型路由层:LiteLLM代理
这是Chart设计中的一个亮点。OpenClaw Gateway本身并不直接调用OpenAI、Anthropic或GitHub Copilot的API,而是将所有请求发送给一个内置的LiteLLM代理服务。LiteLLM是一个开源项目,它统一了不同AI提供商API的调用方式。
这样做有几个显著好处:
- 解耦与灵活性:你的OpenClaw配置(
openclaw.json)里只需要写一个本地端点(比如http://openclaw-litellm:4000)。当你想从使用GitHub Copilot切换到Claude时,无需修改Gateway的配置,只需更新Helm values中litellm.secrets.provider的值并重启LiteLLM Pod即可。 - 密钥安全隔离:所有AI服务的API密钥都只存储在LiteLLM对应的Kubernetes Secret中,并仅挂载到LiteLLM的Pod里。OpenClaw Gateway的容器和ConfigMap中永远不会出现这些敏感信息。Gateway通过一个固定的、内部的“假令牌”与LiteLLM通信,安全性更高。
- 功能增强:LiteLLM本身支持请求重试、缓存、限流、监控等企业级功能,这些能力间接地增强了OpenClaw的健壮性。
在部署中,LiteLLM作为一个独立的Deployment运行,并通过Service(<release-name>-litellm)暴露端口。这种边车(Sidecar)模式是云原生应用的常见做法。
2.3 网络与访问方案
如何安全地访问部署在内部的OpenClaw服务?Chart提供了多种选择,适应不同场景:
- 端口转发(Port-Forward):最简单的方式,使用
kubectl port-forward将服务端口映射到本地。适合快速测试和开发,但不适合生产环境或长期使用。 - Ingress:通过配置
ingress.enabled=true,你可以使用集群的Ingress控制器(如Nginx Ingress、Traefik)为OpenClaw Gateway和noVNC Web UI创建外部可访问的域名和HTTPS终端。这是面向公网访问的标准做法。 - Tailscale集成:这是一个非常巧妙的“零信任网络”方案。当设置
tailscale.enabled=true后,每个OpenClaw Pod都会作为一个独立设备加入你的Tailscale虚拟局域网。这意味着你可以在世界任何地方,像访问内网机器一样,直接通过Tailscale分配的IP或主机名访问OpenClaw,无需暴露任何公网端口,安全性极高。对于小团队或需要安全远程访问的场景,这是首选。
2.4 数据持久化与技能管理
OpenClaw的工作状态、聊天记录、AI生成的代码文件以及你安装的“技能”(Skills),都需要持久化保存。Chart默认启用持久化卷声明(PVC),将/home/vibe/.openclaw目录挂载到集群的存储上。
“技能”是OpenClaw的一个核心概念。它本质上是一个包含SKILL.md文件的目录,这个文件用自然语言描述了如何操作某个特定工具(例如“如何使用Git进行代码仓库的克隆、提交、推送”)。Chart的容器镜像内置了如claude-skill和codex-skill等基础技能。更强大的是,你可以通过多种方式扩展技能库:
- 临时添加:用
kubectl cp命令将本地技能目录复制到运行中的Pod里。 - 通过ConfigMap挂载:适用于简单的、单文件的技能,可以将技能内容定义为ConfigMap并挂载到指定路径。
- 通过外部存储挂载:对于团队共享的技能库,你可以使用一个独立的PVC(甚至NFS共享存储),并通过
openclaw.skills.volumes配置项将其挂载进来。Chart会自动将这些外部路径添加到技能的加载目录中。
这种设计使得技能的管理和共享变得非常灵活,既支持个人实验,也支持团队协作。
3. 从零开始的完整部署实操
理论讲得再多,不如动手做一遍。下面我将带你完成一次从准备环境到最终访问的完整部署。假设你已经在本地或云上拥有一个可用的Kubernetes集群(例如Minikube, Kind, K3s,或各大云商的托管K8s服务),并且已安装好kubectl和helm(v3版本)。
3.1 前置准备:获取必要的令牌
部署OpenClaw需要两个核心令牌:Telegram Bot Token和OpenClaw Gateway Token。
1. 创建Telegram Bot:打开Telegram,搜索并联系@BotFather。 发送/newbot指令,按照提示操作:
- 为你的Bot起一个名字(例如
MyOpenClawBot)。 - 为你的Bot设置一个唯一的用户名,必须以
bot结尾(例如my_openclaw_bot)。 创建成功后,BotFather会给你一串类似1234567890:ABCdefGhIJKlmNoPQRsTUVwxyZ的令牌。这就是你的telegramBotToken。请妥善保存。
2. 生成Gateway Token:这是一个用于验证访问OpenClaw Web门户的令牌,在本地终端执行以下命令生成一个强随机字符串:
export GATEWAY_TOKEN=$(openssl rand -hex 32) echo $GATEWAY_TOKEN记下输出的这串64位十六进制字符,这就是你的openclawGatewayToken。
3.2 基础部署:使用默认配置
最快速的部署方式是使用默认的GitHub Copilot作为AI模型提供商(这通常要求你已在VS Code中登录了GitHub Copilot,并且其认证信息可用)。执行以下命令:
# 设置环境变量(将以下值替换为你自己的) export TELEGRAM_BOT_TOKEN="你的TelegramBotToken" export GATEWAY_TOKEN="你生成的GatewayToken" # 使用Helm进行安装 helm install openclaw oci://ghcr.io/feiskyer/openclaw-kubernetes/openclaw \ --create-namespace \ --namespace openclaw \ --set secrets.openclawGatewayToken=$GATEWAY_TOKEN \ --set secrets.telegramBotToken=$TELEGRAM_BOT_TOKEN这条命令完成了以下工作:
helm install openclaw ...: 安装名为openclaw的Release。oci://...: 从GitHub Container Registry (GHCR) 拉取OCI格式的Chart包。--create-namespace --namespace openclaw: 创建并指定部署到openclaw命名空间。--set secrets...: 通过参数设置两个必需的密钥。
执行后,Helm会创建一系列K8s资源:Namespace、ServiceAccount、Secret、ConfigMap、PersistentVolumeClaim、StatefulSet (OpenClaw)、Deployment (LiteLLM)、Service等。使用以下命令查看Pod状态:
kubectl get pods -n openclaw -w等待所有Pod的状态变为Running(通常需要1-2分钟拉取镜像和初始化)。
3.3 访问与验证
部署成功后,你有两种方式与你的AI助手交互。
方式一:通过Web门户进行初始配置OpenClaw提供了一个Web管理界面,用于完成初始的模型绑定、技能加载等设置。
# 将服务端口转发到本地 kubectl --namespace openclaw port-forward openclaw-0 18789:18789然后在浏览器中打开:http://localhost:18789/?token=<你的GATEWAY_TOKEN>。你将看到OpenClaw的配置界面,按照指引完成设置(例如,选择或配置AI模型)。
方式二:通过Telegram Bot对话一旦Web门户中完成了与AI模型(如Claude)的绑定,你就可以直接在Telegram中搜索你刚才创建的Bot用户名(例如@my_openclaw_bot),并开始给它发送消息。它会通过你配置的AI模型来响应你。
方式三:实时观看AI操作(可选但非常有趣)OpenClaw的Chrome浏览器运行在一个虚拟桌面中,你可以通过noVNC实时观看AI执行任务的过程,这对于调试和理解AI行为非常有帮助。
kubectl --namespace openclaw port-forward openclaw-0 6080:6080然后在浏览器中打开:http://localhost:6080/vnc.html。你会看到一个虚拟的桌面环境,当AI执行网页操作时,你可以在这里看到实时画面。
3.4 进阶部署:使用特定AI模型
默认的GitHub Copilot可能无法满足所有需求,或者你想使用Claude、GPT-4等模型。以下示例展示如何配置使用Anthropic的Claude模型:
# 首先,你需要拥有Anthropic的API Key export ANTHROPIC_API_KEY="你的sk-ant-xxx密钥" helm install openclaw oci://ghcr.io/feiskyer/openclaw-kubernetes/openclaw \ --create-namespace \ --namespace openclaw \ --set secrets.openclawGatewayToken=$GATEWAY_TOKEN \ --set secrets.telegramBotToken=$TELEGRAM_BOT_TOKEN \ --set litellm.secrets.provider=anthropic \ --set litellm.secrets.apiKey=$ANTHROPIC_API_KEY \ --set litellm.model=claude-3-5-sonnet-20241022关键参数解析:
litellm.secrets.provider=anthropic: 告诉LiteLLM使用Anthropic的API。litellm.secrets.apiKey: 提供Anthropic的API密钥。litellm.model: 指定具体的模型名称,这里使用了较新的Claude 3.5 Sonnet。
同理,如果你想使用OpenAI的模型,可以将provider设置为openai,并提供相应的apiKey和model(如gpt-4o)。
实操心得:在设置
litellm.secrets.apiKey时,更安全的做法是预先创建一个Kubernetes Secret,然后在Helm命令中引用它,而不是直接在命令行中传递。例如:--set litellm.secrets.apiKeySecretName=my-ai-secret --set litellm.secrets.apiKeySecretKey=api-key。这可以避免密钥出现在你的shell历史记录或CI/CD日志中。
4. 核心功能深度配置指南
基础部署只是开始,OpenClaw Chart提供了丰富的配置项来满足不同场景的需求。下面我们深入几个最常用也最重要的功能模块。
4.1 启用语义记忆搜索(Memory Search)
记忆搜索是OpenClaw的杀手级功能之一。它允许AI智能体对你工作空间(MEMORY.md、memory/目录下的文件、会话记录)中的内容进行语义检索。这意味着AI可以“记住”你们之前的对话、你记录的重要笔记或决策,并在后续任务中引用它们,实现真正的上下文连续性。
启用此功能需要一个嵌入模型服务(如OpenAI的text-embedding-3-small)来为文本生成向量。配置如下:
helm upgrade openclaw oci://ghcr.io/feiskyer/openclaw-kubernetes/openclaw \ --namespace openclaw \ --set secrets.openclawGatewayToken=$GATEWAY_TOKEN \ --set secrets.telegramBotToken=$TELEGRAM_BOT_TOKEN \ --set litellm.secrets.provider=anthropic \ --set litellm.secrets.apiKey=$ANTHROPIC_API_KEY \ --set litellm.model=claude-3-5-sonnet-20241022 \ # 以下是记忆搜索相关配置 --set litellm.secrets.embeddingProvider=openai \ --set litellm.secrets.embeddingApiKey=$OPENAI_API_KEY \ --set openclaw.memorySearch.model=text-embedding-3-small这里我们实现了一个混合配置:聊天主模型使用Claude(provider: anthropic),而为记忆生成嵌入向量则使用OpenAI的服务(embeddingProvider: openai)。这种组合是允许且常见的,因为嵌入模型通常更便宜且效果足够好。
启用后,你需要手动触发一次初始索引构建:
kubectl -n openclaw exec -it openclaw-0 -- openclaw memory index --verbose这个命令会扫描工作空间中的所有Markdown文件,调用嵌入模型API生成向量,并存储在本地的SQLite数据库中。之后,当AI需要搜索记忆时,就会查询这个向量数据库。
4.2 集成Tailscale实现安全内网访问
对于生产环境,将服务直接通过Ingress暴露在公网可能带来安全风险。使用Tailscale可以让你在零配置的情况下,通过一个安全的虚拟网络直接访问集群内的OpenClaw服务。
准备工作:在Tailscale官网创建一个可重用且临时的(Reusable + Ephemeral)认证密钥。这个密钥允许Pod在重启后重新加入网络,但不会永久占用一个设备名额。
# 从Tailscale管理后台获取认证密钥,格式如:tskey-auth-kxxxx export TAILSCALE_AUTH_KEY="你的Tailscale认证密钥" helm upgrade openclaw oci://ghcr.io/feiskyer/openclaw-kubernetes/openclaw \ --namespace openclaw \ --set secrets.openclawGatewayToken=$GATEWAY_TOKEN \ --set secrets.telegramBotToken=$TELEGRAM_BOT_TOKEN \ --set tailscale.enabled=true \ --set secrets.tailscaleAuthKey=$TAILSCALE_AUTH_KEY \ --set tailscale.hostname=my-openclaw部署后,Pod(例如my-openclaw-0)会作为一个设备出现在你的Tailscale网络设备列表中。你可以直接通过http://my-openclaw-0:18789(或对应的Tailscale IP)来访问OpenClaw网关,无需任何端口转发或公网IP。
注意事项:默认使用内核网络模式(需要
NET_ADMIN能力)。如果你的集群安全策略严格,不允许特权提升,可以设置tailscale.userspace=true切换到用户空间网络模式,但此时必须同时启用tailscale.serve.enabled=true才能访问服务。
4.3 配置消息平台与访问控制
OpenClaw支持多个消息平台。除了Telegram,你还可以同时启用Slack、Discord等。以下是一个同时启用Telegram和Slack的示例:
# 假设你已经有了Slack Bot Token (xoxb-...) 和 App Token (xapp-...) export SLACK_BOT_TOKEN="xoxb-..." export SLACK_APP_TOKEN="xapp-..." helm upgrade openclaw oci://ghcr.io/feiskyer/openclaw-kubernetes/openclaw \ --namespace openclaw \ --set secrets.openclawGatewayToken=$GATEWAY_TOKEN \ --set secrets.telegramBotToken=$TELEGRAM_BOT_TOKEN \ --set secrets.slackBotToken=$SLACK_BOT_TOKEN \ --set secrets.slackAppToken=$SLACK_APP_TOKEN部署后,你的AI助手将同时监听Telegram和Slack上的消息。
精细化访问控制:你可能不希望所有人都能随意私信你的Bot。Chart提供了DM(私信)访问策略:
policy: pairing(默认):新用户首次私信时需要经过一个“配对”流程确认。policy: allowlist:只允许白名单中的用户直接私信。
例如,只允许特定的Telegram用户和Slack成员访问:
helm upgrade openclaw ... \ --set openclaw.dmAccess.policy=allowlist \ --set-json 'openclaw.dmAccess.allowFrom.telegram=["tg:123456789", "@my_username"]' \ --set-json 'openclaw.dmAccess.allowFrom.slack=["U0123ABCDEF", "U0456GHIJKL"]'tg:后面跟的是用户的数字ID(可通过@userinfobot获取),@后面是用户名。Slack ID是类似U0123ABCDEF的字符串,可在用户个人资料中复制。
4.4 存储配置与Azure File特殊处理
持久化存储默认使用集群的默认StorageClass。对于生产环境,你可能需要指定特定的存储类或调整大小:
# 创建一个自定义的values-prod.yaml文件 persistence: enabled: true storageClass: "fast-ssd" # 使用高性能SSD存储类 size: 50Gi # 扩大存储空间 accessMode: ReadWriteOnce litellm: persistence: enabled: true storageClass: "fast-ssd" size: 10Gi accessMode: ReadWriteOnce然后使用-f values-prod.yaml进行安装或升级。
针对Azure Kubernetes Service (AKS) 的特殊情况:如果使用Azure File (SMB)作为存储后端,由于权限问题,默认配置会导致容器内非root用户(UID 1024的vibe用户)无法写入。Chart的仓库中提供了一个修复此问题的自定义StorageClass示例。你需要先应用这个YAML文件创建StorageClass,然后在安装时指定使用它:
# 下载并应用自定义StorageClass kubectl apply -f https://raw.githubusercontent.com/feiskyer/openclaw-kubernetes/main/examples/azurefile-storageclass.yaml # 安装时指定使用这个StorageClass,并注意Access Mode需要是ReadWriteMany helm install openclaw ... \ --set persistence.storageClass=azurefile-openclaw \ --set persistence.accessMode=ReadWriteMany \ --set litellm.persistence.storageClass=azurefile-openclaw \ --set litellm.persistence.accessMode=ReadWriteMany这个自定义StorageClass通过mount options设置了正确的UID/GID和文件模式,解决了Azure File的POSIX权限兼容性问题。
5. 运维、问题排查与进阶技巧
部署只是第一步,长期的稳定运行和问题解决同样重要。这部分分享一些我在实际运维中积累的经验和常见问题的解决方法。
5.1 日常运维命令
查看状态:
# 查看所有相关资源 kubectl -n openclaw get all # 查看Pod日志(OpenClaw主容器) kubectl -n openclaw logs -f openclaw-0 -c openclaw # 查看LiteLLM代理日志 kubectl -n openclaw logs -f deployment/openclaw-litellm进入容器调试:
kubectl -n openclaw exec -it openclaw-0 -- bash进入后,你可以检查
~/.openclaw/目录下的配置文件、日志文件,或者运行openclaw命令行工具。升级与回滚:
# 升级到最新版本 helm upgrade openclaw oci://ghcr.io/feiskyer/openclaw-kubernetes/openclaw -n openclaw -f my-values.yaml # 查看发布历史 helm history openclaw -n openclaw # 回滚到上一个版本 helm rollback openclaw -n openclaw卸载(谨慎操作,会删除所有数据):
helm uninstall openclaw -n openclaw # 如果想彻底清理,包括PVC(持久化数据!) kubectl delete pvc -n openclaw -l app.kubernetes.io/instance=openclaw
5.2 常见问题与解决方案实录
问题一:Pod启动失败,提示CrashLoopBackOff,日志显示权限错误(例如在Azure File上)。
- 排查:检查Pod描述信息
kubectl describe pod openclaw-0 -n openclaw,关注Events部分和容器状态。如果看到Permission denied错误,很可能是存储卷权限问题。 - 解决:
- 确认是否使用了Azure File且未使用自定义StorageClass。如果是,请按照上文“Azure File特殊处理”部分操作。
- 检查PVC是否成功绑定PV:
kubectl get pvc -n openclaw。 - 手动进入Pod检查挂载点权限:
kubectl exec -n openclaw openclaw-0 -- ls -la /home/vibe/。
问题二:Telegram Bot无响应,Pod日志显示网络连接错误(如ENETUNREACH)。
- 排查:这是一个已知问题,主要出现在同时支持IPv4和IPv6的双栈集群上。Node.js 22+的
autoSelectFamily特性会优先尝试IPv6,如果IPv6不可达,会导致连接api.telegram.org失败。 - 解决:Chart已经内置了修复方案(设置
NODE_OPTIONS和autoSelectFamily: false)。确保你没有在自定义的openclaw.json中覆盖掉这些网络配置。如果问题依旧,可以尝试在Pod的extraEnv中显式设置:extraEnv: - name: NODE_OPTIONS value: "--dns-result-order=ipv4first"
问题三:AI模型调用失败,LiteLLM日志显示401 Unauthorized或Invalid API Key。
- 排查:首先检查LiteLLM Pod的日志,确认API密钥是否正确传递以及提供商配置是否正确。
- 解决:
- 确认
litellm.secrets.provider的值拼写正确(如anthropic,openai,github_copilot)。 - 确认API密钥有效且未过期。对于Anthropic/OpenAI,可以在命令行用
curl简单测试。 - 如果使用GitHub Copilot,确保其认证机制在当前环境下可用(例如,是否缺少必要的浏览器cookie或令牌文件)。
- 检查LiteLLM的Secret是否已正确创建:
kubectl get secret openclaw-litellm -n openclaw -o yaml(注意,API Key在Secret中是base64编码的)。
- 确认
问题四:Web门户或noVNC页面无法打开。
- 排查:
- 确认端口转发命令是否正确执行,且没有其他进程占用本地相同端口(如18789, 6080)。
- 检查OpenClaw Pod的
readinessProbe和livenessProbe是否通过:kubectl describe pod openclaw-0 -n openclaw。 - 查看OpenClaw容器日志,看网关服务是否成功启动。
- 解决:
- 尝试杀死占用端口的进程或更换本地端口(如
18889:18789)。 - 如果探针失败,可能是服务启动较慢,可以尝试临时增加
initialDelaySeconds(通过extraEnv设置相关环境变量影响启动行为,但这需要修改Chart values,不推荐直接改Pod)。 - 最简单的办法是重启Pod:
kubectl delete pod openclaw-0 -n openclaw,StatefulSet会自动重建一个新的。
- 尝试杀死占用端口的进程或更换本地端口(如
问题五:记忆搜索功能不工作,openclaw memory index命令报错。
- 排查:首先确认记忆搜索是否已正确启用。检查LiteLLM的Secret中是否设置了
embeddingApiKey。然后运行openclaw memory status查看索引状态。 - 解决:
- 确保
litellm.secrets.embeddingApiKey已设置且有效。 - 运行
openclaw memory index --verbose查看详细错误信息。常见错误是嵌入模型API调用失败(配额不足、网络问题、模型名称错误)。 - 确认
openclaw.memorySearch.model指定的嵌入模型名称与你API密钥所属的提供商匹配(例如,OpenAI的text-embedding-3-small,Cohere的embed-english-v3.0等)。
- 确保
5.3 性能调优与资源监控
OpenClaw在运行浏览器和AI模型推理时可能消耗较多资源。以下是一些调优建议:
资源限制:默认配置(请求1Gi内存,限制8Gi)是一个起点。根据你的使用强度(并发对话数、浏览器标签页数量、模型复杂度)进行调整。如果频繁发生OOM(内存溢出)Kill,可以适当增加
resources.limits.memory。同时,也要合理设置CPU限制,避免单个Pod占用过多集群资源。resources: requests: memory: "2Gi" cpu: "500m" limits: memory: "12Gi" cpu: "3000m"持久化存储性能:如果技能库很大或记忆索引文件频繁读写,存储IO可能成为瓶颈。考虑使用高性能的StorageClass(如本地SSD、云上的高性能块存储)。
使用节点选择器与亲和性:如果你的集群有带GPU的节点,可以通过
nodeSelector将OpenClaw调度到这些节点上,虽然OpenClaw本身不直接使用GPU进行模型推理(推理在API提供商端),但浏览器的图形渲染可能会受益。更常见的做法是使用反亲和性,避免多个OpenClaw实例挤在同一节点上:affinity: podAntiAffinity: preferredDuringSchedulingIgnoredDuringExecution: - weight: 100 podAffinityTerm: labelSelector: matchExpressions: - key: app.kubernetes.io/name operator: In values: - openclaw topologyKey: kubernetes.io/hostname监控:为OpenClaw和LiteLLM Pod添加Prometheus监控指标(如果Chart支持或自行配置)。关注内存使用量、CPU使用率、网络流量以及LiteLLM的请求延迟和错误率。设置告警,当内存使用持续超过85%或错误率升高时及时通知。
5.4 备份与灾难恢复
OpenClaw的核心数据(技能、工作空间、记忆索引、配置)都存储在持久化卷中。因此,备份PVC的数据就是备份了你的AI助手状态。
- 方案一:存储卷快照:如果你的Kubernetes集群和存储后端支持卷快照(VolumeSnapshot),这是最推荐的方式。定期为OpenClaw的PVC创建快照。
- 方案二:文件级备份:进入Pod,将
/home/vibe/.openclaw目录打包并复制到安全的存储中。kubectl -n openclaw exec openclaw-0 -- tar czf - /home/vibe/.openclaw > openclaw-backup-$(date +%Y%m%d).tar.gz - 恢复:恢复时,如果是全新安装,可以先部署一个临时的Pod,将备份文件解压到新的PVC中,然后再安装OpenClaw并指向这个PVC(通过
persistence.existingClaim)。
最后的小技巧:如果你在测试或开发环境中,想快速重置AI助手状态但又不想丢失所有配置,可以尝试只删除~/.openclaw目录下的workspace或memory子目录,然后重启Pod。这样会清空工作空间和记忆索引,但保留技能和基础配置。当然,操作前务必做好备份。