You need to enable JavaScript to run this app.
文档中心
容器服务

容器服务

复制全文
下载 pdf
最佳实践
基于 VCI 部署 OpenClaw
复制全文
下载 pdf
基于 VCI 部署 OpenClaw
本文主要介绍如何从零开始基于 VCI 部署 OpenClaw 服务。​
注意​
  • 目前 VCI 产品暂不支持个人用户,因此本文内容仅适用于火山引擎 企业认证 用户。企业认证相关信息,请参见 实名认证。​
  • 本文内容仅用于快速入门 OpenClaw 服务的部署,不建议生产环境直接使用。​
背景信息​
OpenClaw 介绍​
OpenClaw(曾用名 Clawdbot、Moltbot,社区昵称“大龙虾/小龙虾”)是一款全球热门的开源 AI 智能体执行网关。它并非大语言模型本身,而是大模型的编排层与执行中枢,上接各类主流大模型,下连数字系统与物理硬件,让 AI 从“被动对话”升级为“理解→规划→执行→反馈”的全闭环自主行动体,用一句自然语言指令即可完成跨场景的真实任务。​
行业需求​
OpenClaw 的代码生成、指令执行、浏览器操作等行为具有不确定性,叠加提示词注入等安全风险,若缺乏完善的安全防护体系,极易引发业务隐患。同时,企业级场景对基础设施提出了新要求:需高效编排数千个沙箱环境,支持沙箱的快速创建与销毁,并确保网络访问全程可控、合规。​
Kubernetes 与 VCI 优势​
Kubernetes 是云原生应用编排的事实标准,具备成熟的可扩展性与网络能力。但 AI Agent 带来了新的运行模式,它们是隔离且有状态的单例工作负载,需要持久身份、安全的代码执行暂存区,以及支持暂停与快速恢复的生命周期管理(大部分时间处于空闲,仅偶发活动爆发)。​
火山引擎弹性容器实例(VCI)是一种 Serverless 和容器化的计算服务,可无缝集成容器服务 (VKE) 并提供 Kubernetes 编排能力。VCI 在 OpenClaw 部署场景下具备以下优势:​
  • 多租户隔离部署:基于 Kata Container 提供虚拟机级强隔离,配合网络安全组、RBAC、资源配额,实现多租户 / 多会话间的权限、资源与数据边界管控。​
  • 执行安全防护:为 AI Agent 的代码执行、文件操作、API 调用、浏览器自动化等系统级操作提供最小权限沙箱,通过 seccomp、AppArmor、只读挂载、系统调用限制阻断攻击逃逸与越权操作。​
  • 弹性任务调度:为模块化技能单元提供标准化镜像封装与沙箱运行环境,依托 Kubernetes 弹性扩缩容、故障自愈、按需启停能力,适配高并发与突发任务场景。​
方案架构介绍​
​​​
基于 VCI 部署 OpenClaw,整体架构分为 控制面 和 数据面 两层。​
  • 控制面:控制面以 kube-apiserver 为核心枢纽,同时接入两套控制器,对应两种部署模式:​
  • Kubernetes 原生控制器:适用于 Deployment 部署模式。kube controller manager 通过 List&Watch 机制监听 kube-apiserver 中的原生资源(Deployment、ReplicaSet 等),按照标准 Kubernetes 工作流完成 Pod 的创建与生命周期管理。​
  • Agent Sandbox 控制器:适用于 Sandbox 部署模式。Agent Sandbox Controller 通过 List&Watch 机制监听 kube-apiserver 中的 Sandbox 自定义资源(CRD),承担 Sandbox 生命周期管理和快照恢复两项核心职责。​
  • 数据面:数据面负责实际工作负载的运行与强隔离,具备跨可用区(AZ)的高可用能力。​
从零到一部署 OpenClaw​
本章节将从零开始,介绍如何基于火山引擎 VCI 部署 OpenClaw 服务。内容分为准备阶段和两种具体的部署方式。您可以根据业务的实际需求,选择相应的部署方式:​
  • 基于 Deployment 部署:适用于无状态场景,或通过数据盘进行状态持久化的场景。​
  • 基于 Agent Sandbox 部署:适用于个人助理或 AI Agent 需要有状态运行的场景,此方式具备状态持久化、预热池、镜像归档 (Commit) 等高级功能。​
准备阶段​
在开始部署前,请您先完成准备阶段的所有配置。​
步骤一:准备 Kubernetes 集群​
准备一个 VKE 集群,为 OpenClaw 服务的部署提供计算、存储、网络等资源整合和管理。您可以使用已有集群,也可以自行创建新集群。​
​
使用已有集群
创建新集群
​
若在已有 VKE 集群中使用 VCI 部署 OpenClaw 服务,请确保集群满足如下条件:​
  • 已开启 公网访问,确保集群内的节点可以访问公网。可在集群 总览 页面的 概览 页签查看是否存在 NAT 网关 按钮且处于开启状态。若存在,表示已开启公网访问;若不存在,表示集群未开启公网访问,您需要手动开启。详细操作,请参见 如何手动开启集群的公网访问。​
  • ​​​
  • 集群中已安装 vci-virtual-kubelet 组件,允许集群使用 VCI 部署应用。详情请参见 安装组件。​
  • 集群中已安装 csi-ebs 组件,用于存储挂载。详情请参见 安装组件。​
​
步骤二:准备部署脚本​
下文以在本地下载 OpenClaw 官方部署执行脚本为例。您也可以使用云上或云下任意可以执行 kubectl 命令的机器准备部署脚本。​
  1. (可选)从 Kubernetes 官方页面下载并安装最新版本的 kubectl 工具到本地。若本地终端已安装 kubectl 工具,可跳过本步骤。​
  1. 在本地终端,下载 OpenClaw 官方部署脚本。​
  • ​
    git clone https://github.com/openclaw/openclaw.git​
    ​
  • 预期返回结果如下:​
  • ​
    Cloning into 'openclaw'...​
    remote: Enumerating objects: 418856, done.​
    remote: Counting objects: 100% (9/9), done.​
    remote: Compressing objects: 100% (9/9), done.​
    remote: Total 418856 (delta 0), reused 1 (delta 0), pack-reused 418847 (from 1)​
    Receiving objects: 100% (418856/418856), 468.48 MiB | 9.48 MiB/s, done.​
    Resolving deltas: 100% (272988/272988), done.​
    Updating files: 100% (14132/14132), done.​
    ​
  1. 进入部署脚本路径,查看是否下载完成。​
  • ​
    cd openclaw/scripts/k8s && ls -l​
    ​
  • 预期返回结果如下:​
  • ​
    total 40​
    -rwxr-xr-x 1 bytedance staff 6823 4 16 10:42 create-kind.sh​
    -rwxr-xr-x 1 bytedance staff 8589 4 16 10:42 deploy.sh​
    drwxr-xr-x 7 bytedance staff 224 4 16 10:42 manifests​
    ​
步骤三:准备大模型​
准备您计划使用的大模型元信息,包括模型名称、API 地址以及 API Key,并根据您所选的部署方式(Deployment 部署/Agent Sandbox 部署),将模型信息填入对应的配置文件中。下文将以火山方舟的豆包模型为例进行演示。​
说明​
在自建 OpenClaw 助手场景下,OpenClaw 默认允许直接查看和编辑大模型服务商配置(含 API Key),存在凭证泄露风险。建议平台方(B 端)通过独立的网关或代理层统一管理终端用户(C 端)、VCI 实例与 API Key 的映射关系,避免将真实 API Key 暴露给终端用户。​
​
"models": {​
"mode": "merge",​
"providers": {​
"ark": {​
"baseUrl": "https://ark.cn-beijing.volces.com/api/v3", // 模型 API 接口地址。​
"apiKey": "********", // 请求模型服务的凭证。​
"api": "openai-completions", // 固定值,OpenAI 提供的一种 API 协议。​
"models": [​
{​
"id": "doubao-seed-2-0-pro-260215", // 模型 ID。​
"name": "doubao-seed-2-0-pro-260215", // 模型名称。​
"reasoning": false,​
"input": [​
"text"​
],​
...​
​
配置文件中模型相关providers.ark参数说明如下所示。​
​
参数​
说明​
baseUrl​
模型 API 接口地址。火山方舟模型对应的 Base URL 请参见 Base URL及鉴权。​
apiKey​
请求模型服务的凭证。您可以访问 API Key 管理,创建您的火山方舟 API Key,或使用已有的 API Key。​
api​
固定值openai-completions。openai-completions 是 OpenAI 提供的一种 API 协议,已成为大语言模型应用领域的事实标准。​
models.id​
豆包模型的 ID 和名称,按照如下方法获取:​
  1. 访问 开通管理 页面,开通豆包模型服务。​
  1. 在豆包模型详情页面,获取模型 ID 和模型名称。​
说明​
此处的模型名称,您也可以自定义设置。建议与控制台名称或模型 ID 保持一致,便于后续识别。​
models.name​
​
​
步骤四:准备镜像​
部署 OpenClaw 依赖busybox:1.37和ghcr.io/openclaw/openclaw:slim两个镜像。由于中国内地网络环境限制,请先自行将这两个镜像下载到本地,然后上传至您的内部镜像仓库,例如火山引擎镜像仓库(CR),以便在部署过程中稳定拉取镜像。​
注意​
  • OpenClaw 更新频率较快,本文使用的 OpenClaw 镜像版本为v2026.3.12,此版本仅供测试参考,不建议直接作为长期生产依赖。​
  • 准备好镜像后,请在后续的 YAML 文件中将镜像地址替换为您内部仓库的地址。​
步骤五:准备飞书机器人​
您需要创建一个飞书机器人,用于和 OpenClaw 服务进行交互。​
  1. 创建企业自建应用。​
  1. 登录 飞书开发者平台,单击 创建企业自建应用。​
  • ​​​
  1. 需配置应用名、描述及图标。​
  • ​​​
  1. 单击 创建,完成操作。​
  1. 添加机器人能力。​
  1. 在左侧目录树选择 应用能力 > 添加应用能力。​
  1. 选择 按能力添加 页签,单击 机器人 能力卡片的 添加 按钮。​
  • ​​​
  1. 配置权限。​
  1. 在左侧目录树选择 开发配置 > 权限管理,单击 批量导入/导出权限。​
  • ​​​
  1. 在 导入 页签中,将如下权限替换原有示例,单击 下一步,确认新增权限。​
  • ​
    {​
    "scopes": {​
    "tenant": [​
    "contact:contact.base:readonly",​
    "docx:document:readonly",​
    "im:chat:read",​
    "im:chat:update",​
    "im:message.group_at_msg:readonly",​
    "im:message.p2p_msg:readonly",​
    "im:message.pins:read",​
    "im:message.pins:write_only",​
    "im:message.reactions:read",​
    "im:message.reactions:write_only",​
    "im:message:readonly",​
    "im:message:recall",​
    "im:message:send_as_bot",​
    "im:message:send_multi_users",​
    "im:message:send_sys_msg",​
    "im:message:update",​
    "im:resource",​
    "application:application:self_manage",​
    "cardkit:card:write",​
    "cardkit:card:read"​
    ],​
    "user": [​
    "contact:user.employee_id:readonly",​
    "offline_access",​
    "base:app:copy",​
    "base:field:create",​
    "base:field:delete",​
    "base:field:read",​
    "base:field:update",​
    "base:record:create",​
    "base:record:delete",​
    "base:record:retrieve",​
    "base:record:update",​
    "base:table:create",​
    "base:table:delete",​
    "base:table:read",​
    "base:table:update",​
    "base:view:read",​
    "base:view:write_only",​
    "base:app:create",​
    "base:app:update",​
    "base:app:read",​
    "board:whiteboard:node:create",​
    "board:whiteboard:node:read",​
    "calendar:calendar:read",​
    "calendar:calendar.event:create",​
    "calendar:calendar.event:delete",​
    "calendar:calendar.event:read",​
    "calendar:calendar.event:reply",​
    "calendar:calendar.event:update",​
    "calendar:calendar.free_busy:read",​
    "contact:contact.base:readonly",​
    "contact:user.base:readonly",​
    "contact:user:search",​
    "docs:document.comment:create",​
    "docs:document.comment:read",​
    "docs:document.comment:update",​
    "docs:document.media:download",​
    "docs:document:copy",​
    "docx:document:create",​
    "docx:document:readonly",​
    "docx:document:write_only",​
    "drive:drive.metadata:readonly",​
    "drive:file:download",​
    "drive:file:upload",​
    "im:chat.members:read",​
    "im:chat:read",​
    "im:message",​
    "im:message.group_msg:get_as_user",​
    "im:message.p2p_msg:get_as_user",​
    "im:message:readonly",​
    "search:docs:read",​
    "search:message",​
    "space:document:delete",​
    "space:document:move",​
    "space:document:retrieve",​
    "task:comment:read",​
    "task:comment:write",​
    "task:task:read",​
    "task:task:write",​
    "task:task:writeonly",​
    "task:tasklist:read",​
    "task:tasklist:write",​
    "wiki:node:copy",​
    "wiki:node:create",​
    "wiki:node:move",​
    "wiki:node:read",​
    "wiki:node:retrieve",​
    "wiki:space:read",​
    "wiki:space:retrieve",​
    "wiki:space:write_only"​
    ]​
    }​
    }​
    ​
  1. 在弹窗中确认权限无误后,单击 申请开通。​
说明​
相关权限的具体含义可查看 飞书API权限列表。​
  • ​​​
  1. 单击 配置 按钮设置权限可访问的数据范围。本文保持 与应用的可用范围一致。​
  • ​​​
  1. 单击 确认,完成配置。​
  1. 获取配置信息。​
  1. 在左侧目录树选择 基础信息 > 凭证与基础信息。​
  1. 在 应用凭证 模块中,获取并记录 App ID 与 App Secret 信息。​
说明​
获取的 App ID 与 App Secret 将用于配置 OpenClaw 服务,请妥善保存。​
  • ​​​
  1. 发布应用。​
  1. 单击顶部的 创建版本。​
  • ​​​
  1. 按需配置应用版本号、默认能力及更新说明等信息。了解更多。​
  • ​​​
  1. 单击页面底部的 保存,创建版本。​
  • ​​​
  1. 单击页面右上角的 确认发布,完成应用的发布。​
  • ​​​
基于 Deployment 部署​
此部署方式适用于无状态运行的场景,或者通过数据盘进行状态持久化的场景。Pod 删除后,所有运行时数据都将被清理。​
步骤一:修改 Openclaw 配置文件​
  1. 在下载 Openclaw 部署脚本的本地终端,执行如下命令进入manifests文件夹。​
  • ​
    cd openclaw/scripts/k8s/manifests​
    ​
  1. 修改kustomization.yaml文件。由于 VCI Pod 使用系统盘进行部署,不需要额外的 PVC 存储,因此从kustomization.yaml文件的resources字段下删除pvc.yaml。​
  • ​​​
  • ​
    命令行直接删除
    编辑文件删除
    ​
    您可以使用以下命令直接从resources字段中删除pvc.yaml:​
    • macOS 终端​
    • ​
      sed -i '' '/- pvc.yaml/d' kustomization.yaml​
      ​
    • Windows/Linux 终端​
    • ​
      sed -i '/- pvc.yaml/d' kustomization.yaml​
      ​
    ​
  1. 修改configmap.yaml文件中的openclaw.json字段内容,主要增加如下配置:​
  • models:配置您所需的大模型,例如豆包模型。​
  • plugins:启用飞书插件。​
  • channels:配置与飞书机器人通信所需的信息。​
  • ​
    {​
    "gateway": {​
    "mode": "local",​
    "bind": "loopback",​
    "port": 18789,​
    "auth": {​
    "mode": "token"​
    },​
    "controlUi": {​
    "enabled": true​
    }​
    },​
    "models": {​
    "mode": "merge",​
    "providers": {​
    "ark": {​
    "baseUrl": "https://ark.cn-beijing.volces.com/api/v3", // 模型 API 接口地址。​
    "apiKey": "********", // 您的火山方舟 API Key。​
    "api": "openai-completions",​
    "models": [​
    {​
    "id": "doubao-seed-2-0-pro-260215", // 模型 ID。​
    "name": "doubao-seed-2-0-pro-260215", // 模型名称。​
    "reasoning": false,​
    "input": [​
    "text"​
    ],​
    "cost": {​
    "input": 0,​
    "output": 0,​
    "cacheRead": 0,​
    "cacheWrite": 0​
    },​
    "contextWindow": 200000,​
    "maxTokens": 8192,​
    "compat": {​
    "supportsDeveloperRole": false​
    }​
    }​
    ]​
    }​
    }​
    },​
    "agents": {​
    "defaults": {​
    "model": {​
    "primary": "ark/doubao-seed-2-0-pro-260215" // Agent 主模型(默认模型)。​
    },​
    "models": { // Agent 可用模型列表。​
    "ark/doubao-seed-2-0-pro-260215": {}​
    },​
    "workspace": "~/.openclaw/workspace", // Agent 工作区,即在 Pod 底层运行时的物理存储路径。​
    "compaction": {​
    "mode": "safeguard"​
    },​
    "maxConcurrent": 4,​
    "subagents": {​
    "maxConcurrent": 8​
    }​
    }​
    },​
    "cron": {​
    "enabled": false​
    },​
    "plugins": {​
    "entries": {​
    "feishu": {​
    "enabled": true​
    }​
    }​
    },​
    "channels": {​
    "feishu": {​
    "enabled": true,​
    "appId": "cli_a9207****", // 飞书机器人 App ID。​
    "appSecret": "∗∗∗∗∗∗∗∗", // 飞书机器人 App Secret。​
    "connectionMode": "websocket",​
    "domain": "feishu",​
    "dmPolicy": "pairing",​
    "groupPolicy": "open"​
    }​
    }​
    }​
    ​
  • 配置openclaw.json字段内容后,完整的configmap.yaml文件内容示例如下:​
  • ​
    apiVersion: v1​
    kind: ConfigMap​
    metadata:​
    name: openclaw-config​
    labels:​
    app: openclaw​
    data:​
    openclaw.json: |​
    {​
    "gateway": {​
    "mode": "local",​
    "bind": "loopback",​
    "port": 18789,​
    "auth": {​
    "mode": "token"​
    },​
    "controlUi": {​
    "enabled": true​
    }​
    },​
    "models": {​
    "mode": "merge",​
    "providers": {​
    "ark": {​
    "baseUrl": "https://ark.cn-beijing.volces.com/api/v3",​
    "apiKey": "40c4c8b2-aed******",​
    "api": "openai-completions",​
    "models": [​
    {​
    "id": "doubao-seed-2-0-pro-260215",​
    "name": "doubao-seed-2-0-pro",​
    "reasoning": false,​
    "input": [​
    "text"​
    ],​
    "cost": {​
    "input": 0,​
    "output": 0,​
    "cacheRead": 0,​
    "cacheWrite": 0​
    },​
    "contextWindow": 200000,​
    "maxTokens": 8192,​
    "compat": {​
    "supportsDeveloperRole": false​
    }​
    }​
    ]​
    }​
    }​
    },​
    "agents": {​
    "defaults": {​
    "model": {​
    "primary": "ark/doubao-seed-2-0-pro-260215"​
    },​
    "models": {​
    "ark/doubao-seed-2-0-pro-260215": {}​
    },​
    "workspace": "~/.openclaw/workspace",​
    "compaction": {​
    "mode": "safeguard"​
    },​
    "maxConcurrent": 4,​
    "subagents": {​
    "maxConcurrent": 8​
    }​
    },​
    "list": [​
    {​
    "id": "default",​
    "name": "OpenClaw Assistant",​
    "workspace": "~/.openclaw/workspace"​
    }​
    ]​
    },​
    "cron": {​
    "enabled": false​
    },​
    "plugins": {​
    "entries": {​
    "feishu": {​
    "enabled": true​
    }​
    }​
    },​
    "channels": {​
    "feishu": {​
    "enabled": true,​
    "appId": "cli_a9207****",​
    "appSecret": "ho3ftd****",​
    "connectionMode": "websocket",​
    "domain": "feishu",​
    "dmPolicy": "pairing",​
    "groupPolicy": "open"​
    }​
    }​
    }​
    ​
步骤二:运行 Workload​
  1. 修改deployment.yaml文件,使其适配 VCI 部署。主要改动点如下:​
  • 添加 Annotations:通过vke.volcengine.com/burst-to-vci: enforce Annotation 强制将 Pod 调度至 VCI。​
  • 调整 Init 容器:由于 VCI 不支持 fsgroup,为了保证主容器能以 user 1000 身份运行,需要在 Init 容器中修改工作目录的 Owner。​
  • 调整主容器命令:主容器启动时,首先将配置文件从 Init 容器准备好的路径复制到工作目录下,然后启动 OpenClaw。​
  • 示例deployment.yaml文件配置如下:​
  • ​
    apiVersion: apps/v1​
    kind: Deployment​
    metadata:​
    name: openclaw​
    labels:​
    app: openclaw​
    spec:​
    replicas: 1​
    selector:​
    matchLabels:​
    app: openclaw​
    strategy:​
    type: Recreate​
    template:​
    metadata:​
    annotations:​
    vke.volcengine.com/burst-to-vci: enforce # 强制调度到 VCI。​
    labels:​
    app: openclaw​
    spec:​
    automountServiceAccountToken: false​
    securityContext:​
    seccompProfile:​
    type: RuntimeDefault​
    initContainers:​
    - name: init-config​
    image: your-private-registry/busybox:1.37 # 容器镜像的地址和版本,请配置为您自己的镜像地址。​
    imagePullPolicy: IfNotPresent​
    command:​
    - sh​
    - -c​
    - |​
    cp /config/openclaw.json /home/node/.openclawconfig/openclaw.json​
    mkdir -p /home/node/.openclawconfig/workspace​
    cp /config/AGENTS.md /home/node/.openclawconfig/workspace/AGENTS.md​
    chown -R 1000:1000 /home/node/.openclawconfig​
    securityContext:​
    runAsUser: 0​
    resources:​
    requests:​
    memory: 32Mi​
    cpu: 50m​
    limits:​
    memory: 64Mi​
    cpu: 100m​
    volumeMounts:​
    - name: openclaw-home​
    mountPath: /home/node/.openclawconfig​
    - name: config​
    mountPath: /config​
    containers:​
    - name: gateway​
    image: your-private-registry/openclaw:slim # 容器镜像的地址和版本,请配置为您自己的镜像地址。​
    imagePullPolicy: IfNotPresent​
    command:​
    - sh​
    - -c​
    - |​
    mkdir /home/node/.openclaw​
    cp -r /home/node/.openclawconfig/* /home/node/.openclaw​
    node /app/dist/index.js gateway run​
    ports:​
    - name: gateway​
    containerPort: 18789​
    protocol: TCP​
    env:​
    - name: HOME​
    value: /home/node​
    - name: OPENCLAW_CONFIG_DIR​
    value: /home/node/.openclaw​
    - name: NODE_ENV​
    value: production​
    - name: OPENCLAW_GATEWAY_TOKEN​
    valueFrom:​
    secretKeyRef:​
    name: openclaw-secrets​
    key: OPENCLAW_GATEWAY_TOKEN​
    resources:​
    requests:​
    memory: 4Gi​
    cpu: "2"​
    limits:​
    memory: 4Gi​
    cpu: "2"​
    livenessProbe:​
    exec:​
    command:​
    - node​
    - -e​
    - "require('http').get('http://127.0.0.1:18789/healthz', r => process.exit(r.statusCode < 400 ? 0 : 1)).on('error', () => process.exit(1))"​
    initialDelaySeconds: 60​
    periodSeconds: 30​
    timeoutSeconds: 10​
    readinessProbe:​
    exec:​
    command:​
    - node​
    - -e​
    - "require('http').get('http://127.0.0.1:18789/readyz', r => process.exit(r.statusCode < 400 ? 0 : 1)).on('error', () => process.exit(1))"​
    initialDelaySeconds: 15​
    periodSeconds: 10​
    timeoutSeconds: 5​
    volumeMounts:​
    - name: openclaw-home​
    mountPath: /home/node/.openclawconfig​
    - name: tmp-volume​
    mountPath: /tmp​
    securityContext:​
    runAsNonRoot: true​
    runAsUser: 1000​
    runAsGroup: 1000​
    allowPrivilegeEscalation: false​
    readOnlyRootFilesystem: true​
    capabilities:​
    drop:​
    - ALL​
    volumes:​
    - name: openclaw-home​
    emptyDir: {} ​
    - name: config​
    configMap:​
    name: openclaw-config​
    - name: tmp-volume​
    emptyDir: {}​
    ​
  1. 执行部署脚本命令。​
  • ​
    export OPENAI_API_KEY=NOT_NEEDED && ./deploy.sh​
    ​
  • 预期返回结果如下:​
  • ​​​
  1. 命令执行完成后,您可以在 容器服务控制台 目标集群的 工作负载 > 无状态负载 页面 openclaw 命名空间下查看安装结果。​
  • ​​​
步骤三:配置 OpenClaw 飞书 AI 助手​
  1. 登录 飞书开发者平台。 ​
  1. 选择 企业自建应用 页签,并单击您创建的飞书开放应用。​
  • ​​​
  1. 在左侧目录树选择 开发配置 > 事件与回调。​
  • ​
    事件配置
    回调配置
    ​
    1. 选择 事件配置 页签,单击 订阅方式 旁的编辑按钮。​
    • ​​​
    1. 选择 使用 长连接 接收事件,单击 保存。​
    • ​​​
    1. 在 已添加事件 区域,单击 添加事件。​
    • ​​​
    1. 在添加事件对话框中,选择 应用身份订阅 页签,搜索 消息 并勾 选接收消息、消息被reaction、消息被取消reaction 三个事件,单击 确认添加。​
    • ​​​
    1. (可选)若您期望将机器人添加到聊天群组中使用,需开通获取群组消息权限。否则,请跳过本步骤。​
    注意​
    由于 OpenClaw 是个人 AI 助手,在群聊场景下可能存在凭证泄露等风险,请谨慎使用。​
    1. 在 已添加事件 模块中,单击 接收消息 事件 所需权限 列的 查看其它权限。​
    • ​​​
    1. 单击 获取群组中所有消息(敏感权限)。​
    • ​​​
    1. 在弹窗中单击 开通权限,申请开通。​
    • ​​​
    ​
  1. 新建机器人版本并发布。​
  1. 单击顶部的 创建版本。​
  • ​​​
  1. 按需配置应用版本号、默认能力及更新说明等信息。了解更多。​
  • ​​​
  1. 单击页面底部的 保存,创建版本。​
  • ​​​
  1. 单击页面右上角的 确认发布,完成应用的发布。​
  • ​​​
步骤四:验证服务​
  1. 和飞书应用配对。​
  1. 向机器人发送任意消息(例如:你好)。​
  1. 根据机器人回复,获取 Pairing code。​
  • ​​​
  1. 登录上方 步骤二:运行 Workload 中创建的 OpenClaw Pod。​
  • ​
    控制台登录
    kubectl 命令行登录
    ​
    1. 在 容器服务控制台 目标集群的 工作负载 > 无状态负载 页面 openclaw 命名空间下找到已创建的 VCI Deployment。​
    1. 在 无状态负载详情页 右上角单击 控制台,登录 Pod。​
    • ​​​
    ​
  1. 使用机器人返回的 Pairing Code 执行配对命令。​
  • ​
    openclaw pairing approve feishu BKRAE44L --notify​
    ​
  • 预期返回结果如下:​
  • ​​​
  1. 配对成功后,机器人会发送确认消息。此时,您可以开始与 OpenClaw 助手进行交互。​
  • ​​​
基于 Agent Sandbox 部署​
VCI Agent Sandbox 结合了社区 Agent Sandbox CRD 与火山引擎的云产品能力,专为管理 AI Agent 的代码执行环境而设计,具备强隔离、状态持久化、冷启动优化等高级特性。此部署方式适用于需要为每个用户或会话提供独立、有状态运行环境的场景。​
注意事项​
使用 Agent Sandbox 部署 OpenClaw 服务前,请注意 Agent Sandbox 相关使用说明。详情请参见 VCI Agent Sandbox 注意事项。​
步骤一:安装 Agent Sandbox 控制器​
您需要先在集群中安装 Agent Sandbox 控制器。您可以自定义安装,详细操作,请参见 安装指南。​
步骤二:创建沙箱​
控制器安装完成后,您可以通过创建 Sandbox 类型的 CR 来定义和启动一个沙箱实例。​
  1. 创建沙箱前需在 VKE 集群中创建 StorageClass,用于动态创建沙箱数据盘 PVC。​
  • ​​​
  1. 编写 Sandbox YAML 文件。​
  • 以下是部署 OpenClaw 的sandbox.yaml文件示例。该文件定义了一个沙箱实例,并以 VCI Pod 的形式运行,同时具备数据持久化能力。​
说明​
带有注释的参数,请根据实际情况修改参数值。​
  • ​
    apiVersion: agents.x-k8s.io/v1alpha1​
    kind: Sandbox​
    metadata:​
    annotations:​
    agent.sandbox.io/snapshot-deletion-policy: delete​
    agent.sandbox.io/snapshot-retention-days: "3"​
    name: openclaw-sandbox # 沙箱名称(沙箱对应 Pod 也是该名称)。​
    namespace: openclaw # 沙箱所属命名空间。​
    spec:​
    replicas: 1 # 沙箱副本数,只允许设置 0(暂停)或 1(开机)。​
    volumeClaimTemplates:​
    - spec: ​
    accessModes:​
    - ReadWriteMany​
    resources:​
    requests:​
    storage: 20Gi​
    storageClassName: test-storage-class # StorageClass 名称,用于动态创建沙箱数据盘 PVC。​
    volumeMode: Filesystem​
    metadata:​
    name: generated-name​
    podTemplate: # 沙箱对应的 VCI Pod 模板。​
    metadata:​
    annotations:​
    vci.volcengine.com/tls-enable: "false" # 是否开启日志采集。取值:true(开启)/false(关闭)。​
    vke.volcengine.com/burst-to-vci: enforce # 强制调度到 VCI。​
    vci.vke.volcengine.com/enable-auto-create-imc: "true" # 开启自动镜像缓存。​
    vci.volcengine.com/usable-disk-capacity: "40" # 指定系统盘真实可用空间(可写层空间)。​
    vci.volcengine.com/persistent-container: "true" # 是否开启容器可写层数据持久化。取值:true(开启)/false(关闭)。​
    labels:​
    app: test-server ​
    spec:​
    automountServiceAccountToken: false​
    securityContext:​
    seccompProfile:​
    type: RuntimeDefault​
    initContainers:​
    - name: init-config​
    image: helm-cr-cn-shanghai.cr.volces.com/e2e-test-images/busybox:2.32​
    imagePullPolicy: IfNotPresent​
    command:​
    - sh​
    - -c​
    - |​
    cp /config/openclaw.json /home/node/.openclawconfig/openclaw.json​
    mkdir -p /home/node/.openclawconfig/workspace​
    cp /config/AGENTS.md /home/node/.openclawconfig/workspace/AGENTS.md​
    chown -R 1000:1000 /home/node/.openclawconfig​
    securityContext:​
    runAsUser: 0​
    resources:​
    requests:​
    memory: 32Mi​
    cpu: 50m​
    limits:​
    memory: 64Mi​
    cpu: 100m​
    volumeMounts:​
    - name: openclaw-home​
    mountPath: /home/node/.openclawconfig​
    - name: config​
    mountPath: /config​
    containers:​
    - name: gateway​
    image: helm-cr-cn-shanghai.cr.volces.com/openclaw/openclaw:slim​
    imagePullPolicy: IfNotPresent​
    command:​
    - sh​
    - -c​
    - |​
    mkdir /home/node/.openclaw​
    cp -r /home/node/.openclawconfig/* /home/node/.openclaw​
    node /app/dist/index.js gateway run​
    ports:​
    - name: gateway​
    containerPort: 18789​
    protocol: TCP​
    env:​
    - name: HOME​
    value: /home/node​
    - name: OPENCLAW_CONFIG_DIR​
    value: /home/node/.openclaw​
    - name: NODE_ENV​
    value: production​
    - name: OPENCLAW_GATEWAY_TOKEN​
    valueFrom:​
    secretKeyRef:​
    name: openclaw-secrets​
    key: OPENCLAW_GATEWAY_TOKEN​
    - name: ANTHROPIC_API_KEY​
    valueFrom:​
    secretKeyRef:​
    name: openclaw-secrets​
    key: ANTHROPIC_API_KEY​
    optional: true​
    - name: OPENAI_API_KEY​
    valueFrom:​
    secretKeyRef:​
    name: openclaw-secrets​
    key: OPENAI_API_KEY​
    optional: true​
    - name: GEMINI_API_KEY​
    valueFrom:​
    secretKeyRef:​
    name: openclaw-secrets​
    key: GEMINI_API_KEY​
    optional: true​
    - name: OPENROUTER_API_KEY​
    valueFrom:​
    secretKeyRef:​
    name: openclaw-secrets​
    key: OPENROUTER_API_KEY​
    optional: true​
    resources:​
    requests:​
    memory: 4Gi​
    cpu: "2"​
    limits:​
    memory: 4Gi​
    cpu: "2"​
    livenessProbe:​
    exec:​
    command:​
    - node​
    - -e​
    - "require('http').get('http://127.0.0.1:18789/healthz', r => process.exit(r.statusCode < 400 ? 0 : 1)).on('error', () => process.exit(1))"​
    initialDelaySeconds: 60​
    periodSeconds: 30​
    timeoutSeconds: 10​
    readinessProbe:​
    exec:​
    command:​
    - node​
    - -e​
    - "require('http').get('http://127.0.0.1:18789/readyz', r => process.exit(r.statusCode < 400 ? 0 : 1)).on('error', () => process.exit(1))"​
    initialDelaySeconds: 15​
    periodSeconds: 10​
    timeoutSeconds: 5​
    volumeMounts:​
    - name: openclaw-home​
    mountPath: /home/node/.openclawconfig​
    - name: tmp-volume​
    mountPath: /tmp​
    securityContext:​
    runAsNonRoot: true​
    runAsUser: 1000​
    runAsGroup: 1000​
    allowPrivilegeEscalation: false​
    readOnlyRootFilesystem: true​
    capabilities:​
    drop:​
    - ALL​
    volumes:​
    - name: openclaw-home​
    emptyDir: {} ​
    - name: config​
    configMap:​
    name: openclaw-config​
    - name: tmp-volume​
    emptyDir: {}​
    ​
  1. 执行如下命令,创建 Sandbox。​
  • ​
    kubectl apply -f sandbox.yaml​
    ​
  1. 查看沙箱创建结果。​
  1. 在 容器服务控制台 目标集群的 工作负载 > 对象浏览器 页面找到名为 sandbox 的 CRD 资源,单击 CRD 资源名称进入详情页,查看沙箱详情。​
  • ​​​
  1. 在 资源列表 下具体资源名称右侧 操作 列,选择... > 编辑 Yaml,查看自定义资源 YAML 文件中的status.phase字段,若为Running,视为沙箱创建成功。​
  • ​
    status:​
    conditions:​
    - lastTransitionTime: "2026-03-26T03:46:01Z"​
    message: Pod is Ready; Service Exists​
    observedGeneration: 5​
    reason: DependenciesReady​
    status: "True"​
    type: Ready​
    instanceId: vci-xxxxxxx​
    phase: Running # 沙箱资源的当前状态。​
    recentPodUID: 3fb2e674-4025-4106-8cec-032ea5c045c6​
    replicas: 1 ​
    selector: agents.x-k8s.io/sandbox-name-hash=62f96e10​
    service: openclaw-sandbox​
    serviceFQDN: openclaw-sandbox.openclaw.svc.cluster.local​
    snapShotId: fake-id​
    snapShotStatus: Completed​
    ​
  1. 模拟沙箱运行时产生的临时数据。​
  1. 在 容器服务控制台 目标集群的左侧导航栏选择 工作负载 > 容器组,找到 openclaw 命名空间下关联创建的沙箱对应 Pod。​
  • ​​​
  1. 单击 Pod 名称进入详情页后,单击页面右上角 控制台 登录 Pod 的容器,并在/app下创建openclaw_test.md文件,用来模拟沙箱运行时产生的临时数据。​
  • ​​​
步骤三:暂停与恢复沙箱​
Agent Sandbox 的核心特性之一是能够暂停和恢复,从而在不使用时节省计算资源。在 OpenClaw 业务中,您可以通过暂停/恢复沙箱,训练您的 OpenClaw 助手。更多暂停/恢复沙箱相关信息,请参见 沙箱生命周期管理。​
​
暂停沙箱
恢复沙箱
​
  1. 将sandbox.yaml文件中的spec.replicas修改为 0,达到暂停沙箱的目的。暂停沙箱时将自动生成快照,同时释放 VCI 资源且停止计费,但元数据会被保留。示例代码片段如下所示。​
  • ​
    apiVersion: agents.x-k8s.io/v1alpha1​
    kind: Sandbox​
    metadata:​
    annotations:​
    agent.sandbox.io/snapshot-deletion-policy: delete​
    agent.sandbox.io/snapshot-retention-days: "3"​
    name: openclaw-sandbox​
    namespace: openclaw​
    spec:​
    replicas: 0 # 沙箱副本数,只允许设置 0(暂停)或 1(开机)。​
    ​
  • 等待 CRD 的status.phase显示为 Paused 时,表示沙箱暂停成功。示例代码片段如下所示。​
  • ​
    status:​
    conditions:​
    - lastTransitionTime: "2026-02-05T06:24:40Z"​
    message: Pod does not exist, replicas is 0; Service Exists​
    observedGeneration: 2​
    reason: DependenciesReady​
    status: "True"​
    type: Ready​
    phase: Paused # 沙箱资源的当前状态。​
    replicas: 0​
    service: test-sandbox-example​
    serviceFQDN: test-sandbox-example.default.svc.cluster.local​
    snapShotId: fake-id # 记录关机时的快照 id,沙箱再次启动时会使用该 id​
    ​
  1. 暂停沙箱后,生成的快照 sandboxsnapshot,可在 容器服务控制台 目标集群的 工作负载 > 对象浏览器 页面查看。​
  • ​​​
  1. 单击 sandboxsnapshot,进入对象浏览器详情页,查看详细的快照信息。​
  • 资源列表下显示具体资源,表示快照创建成功。​
  • ​​​
  • 在资源列表下快照对应资源名称右侧 操作 列选择...> 编辑 YAML,查看快照 CRD 的status.phase。若值为 Completed,表示快照创建成功。​
  • ​
    status:​
    conditions:​
    - lastTransitionTime: "2026-03-26T07:53:52Z"​
    message: snapshot is created​
    reason: SnapShotCreated​
    status: "True"​
    type: Ready​
    phase: Completed # 沙箱资源的当前状态。​
    sizeBytes: 40​
    snapshotId: snap-3wzwq1****​
    ​
​
步骤四:验证部署​
在本地终端执行openclaw tui命令,查看部署结果。预期返回结果如下,您可以直接通过命令行工具与 OpenClaw 助手对话。​
​​​
说明​
您也可以参考 基于 Deployment 部署 内容中配置飞书的方法,将基于 Agent Sandbox 部署的 OpenClaw 助手配置为飞书机器人。​
最近更新时间:2026.04.27 15:06:21
这个页面对您有帮助吗?
有用
有用
无用
无用