OpenClaw 是一款开源、自托管的个人AI 助手,用户可通过聊天界面与其交互并委托执行各类任务。阿里云容器计算服务(ACS)提供的 Agent Sandbox 算力深度打通了 AI 应用与 Kubernetes 及容器生态的集成路径。借助 ACS Agent Sandbox,企业和开发者可以快速构建大规模、高弹性、安全隔离的 Agent 基础设施,加速 AI 智能体在实际场景中的落地与创新。本文将详细介绍如何基于 ACS Agent Sandbox 一键部署 OpenClaw,实现按需休眠与秒级唤醒,并介绍其与钉钉等应用的集成方法。
基于 ACS Agent Sandbox 部署 OpenClaw 的优势
- 开箱即用、深度集成 Kubernetes 与容器生态:ACS Agent Sandbox支持以 Kubernetes 作为统一使用界面,提供符合容器标准的 Serverless 算力资源。用户部署 OpenClaw 时,仅需指定应用镜像,即可秒级启动一个功能完备、安全隔离的 AI Agent 运行环境,无需管理底层节点、集群或基础设施。
- 灵活的沙箱休眠与唤醒机制:ACS Agent Sandbox 支持为OpenClaw实例提供按需使用的休眠和唤醒功能。这意味着当没有任务时,实例可以自动进入休眠状态以节省成本;一旦有新的请求或任务出现,它又能立即被唤醒,并恢复之前的工作状态。
- 强化的安全隔离措施:基于轻量级虚拟化与容器沙箱技术,ACS Agent Sandbox 为每个 OpenClaw 实例提供独立的运行空间,实现进程、文件系统、网络等维度的严格隔离。
- 具备超大规模资源弹性能力:基于阿里云容器服务的大规模资源管理和高效极致交付技术,ACS Agent Sandbox能够满足能满足 AI Agent 业务的弹性需求,支持企业级应用部署。
前提条件
通过创建 ACK/ACS 集群使用ACS算力
您可以通过创建 ACK Pro 或ACS集群使用ACS Agent Sandbox 算力。
- 创建ACK Pro 集群并使用ACS算力,请参见:ACK托管集群Pro版接入ACS算力
- 创建ACS集群,请参见:创建ACS集群
在ACK/ACS集群中安装使用ACS Agent Sandbox的相关组件
- 在集群
组件管理中安装ACK Virtual Node组件。(若您使用ACS集群,则跳过该步骤即可。) - 在集群
组件管理中安装ack-agent-sandbox-controller组件,版本>=v0.5.3。 - 在集群
组件管理中安装ack-extend-network-controller组件。
创建OpenClaw沙箱
方案一:通过Sandbox CR直接创建OpenClaw沙箱
直接创建如下Sandbox资源,请注意在yaml文件中修改如下两个参数完成配置:
- DASHSCOPE_API_KEY:OpenClaw使用的大模型访问凭证。您可以在阿里云百炼大模型服务平台前往密钥管理页面,单击创建API-Key获取。
为在体验初期避免产生超出预期的费用,可购买百炼Coding Plan,该订阅采用固定月费模式,提供月度请求额度。若需使用Coding Plan,可以在服务部署完成后,参考在OpenClaw中使用百炼购买的Coding Plan来修改Base URL。Coding Plan仅支持抵扣qwen3-max-2026-01-23和qwen3-coder-plus模型调用费用,不支持抵扣多模态模型调用费用。
警告:请妥善保管百炼 API-Key。若发生泄露,第三方将有机会冒用您的身份进行恶意使用,产生超出预期的token费用。
- GATEWAY_TOKEN: 自定义参数,配置OpenClaw访问Token。
Sandbox资源中通过声明如下注解,为沙箱自动分配EIP。
network.alibabacloud.com/pod-with-eip: "true" # 表示为每个Pod自动分配一个EIP实例 network.alibabacloud.com/eip-bandwidth: "5" # 表示EIP实例带宽为5 Mbps
apiVersion: agents.kruise.io/v1alpha1 kind: Sandbox metadata: labels: app: openclaw name: openclaw namespace: default spec: template: metadata: labels: alibabacloud.com/acs: "true" # 使用ACS算力 app: openclaw annotations: network.alibabacloud.com/pod-with-eip: "true" # 表示为每个Pod自动分配一个EIP实例 network.alibabacloud.com/eip-bandwidth: "5" # 表示EIP实例带宽为5 Mbps spec: containers: - env: - name: ENVD_DIR value: /mnt/envd - name: DASHSCOPE_API_KEY value: sk-xxxxxxxxxxxxxxxxx # 替换为您真实的API_KEY - name: GATEWAY_TOKEN value: clawdbot-mode-123456 # 替换为您希望访问OpenClaw的token image: registry.cn-hangzhou.aliyuncs.com/acs-samples/clawdbot:2026.1.24.3 imagePullPolicy: IfNotPresent lifecycle: postStart: exec: command: - /bin/bash - -c - /mnt/envd/envd-run.sh name: openclaw resources: limits: cpu: "4" memory: 8Gi requests: cpu: "4" memory: 8Gi securityContext: readOnlyRootFilesystem: false runAsGroup: 0 runAsUser: 0 startupProbe: failureThreshold: 30 initialDelaySeconds: 5 periodSeconds: 5 successThreshold: 1 tcpSocket: port: 18789 timeoutSeconds: 1 terminationMessagePath: /dev/termination-log terminationMessagePolicy: File volumeMounts: - mountPath: /mnt/envd name: envd-volume dnsPolicy: ClusterFirst initContainers: - command: - sh - /workspace/entrypoint_inner.sh env: - name: ENVD_DIR value: /mnt/envd - name: __IGNORE_RESOURCE__ value: "true" image: registry-cn-hangzhou.ack.aliyuncs.com/acs/agent-runtime:v0.0.2 imagePullPolicy: IfNotPresent name: init resources: {} restartPolicy: Always terminationMessagePath: /dev/termination-log terminationMessagePolicy: File volumeMounts: - mountPath: /mnt/envd name: envd-volume paused: true restartPolicy: Always schedulerName: default-scheduler securityContext: {} terminationGracePeriodSeconds: 1 volumes: - emptyDir: {} name: envd-volume
创建完成后,ACS会为该沙箱创建一个同名的Pod,待Pod启动完成,OpenClaw即处于可用状态。
$ k get sbx openclaw NAME STATUS AGE SHUTDOWN_TIME PAUSE_TIME MESSAGE openclaw Running 57s
方案二:通过SandboxSet CR创建OpenClaw沙箱预热池(推荐)
为OpenClaw沙箱进行预热
创建如下 SandboxSet 资源,为后续使用OpenClaw沙箱进行预热。
apiVersion: agents.kruise.io/v1alpha1 kind: SandboxSet metadata: name: openclaw namespace: default annotations: e2b.agents.kruise.io/should-init-envd: "true" labels: app: openclaw spec: replicas: 1 template: metadata: labels: alibabacloud.com/acs: "true" # 使用ACS算力 app: openclaw annotations: network.alibabacloud.com/pod-with-eip: "true" # 表示为每个Pod自动分配一个EIP实例 network.alibabacloud.com/eip-bandwidth: "5" # 表示EIP实例带宽为5 Mbps spec: initContainers: - name: init image: registry-cn-hangzhou.ack.aliyuncs.com/acs/agent-runtime:v0.0.2 imagePullPolicy: IfNotPresent command: [ "sh", "/workspace/entrypoint_inner.sh" ] volumeMounts: - name: envd-volume mountPath: /mnt/envd env: - name: ENVD_DIR value: /mnt/envd - name: __IGNORE_RESOURCE__ value: "true" restartPolicy: Always containers: - name: openclaw image: registry.cn-hangzhou.aliyuncs.com/acs-samples/clawdbot:2026.1.24.3 imagePullPolicy: IfNotPresent securityContext: readOnlyRootFilesystem: false runAsUser: 0 runAsGroup: 0 resources: requests: cpu: 4 memory: 8Gi limits: cpu: 4 memory: 8Gi env: - name: ENVD_DIR value: /mnt/envd - name: DASHSCOPE_API_KEY value: sk-xxxxxxxxxxxxxxxxx # 替换为您真实的API_KEY - name: GATEWAY_TOKEN value: clawdbot-mode-123456 # 替换为您希望访问OpenClaw的token volumeMounts: - name: envd-volume mountPath: /mnt/envd startupProbe: tcpSocket: port: 18789 initialDelaySeconds: 5 periodSeconds: 5 failureThreshold: 30 lifecycle: postStart: exec: command: [ "/bin/bash", "-c", "/mnt/envd/envd-run.sh" ] terminationGracePeriodSeconds: 1 volumes: - emptyDir: { } name: envd-volume
SandboxSet创建完成后,可以看到1个沙箱已经处于可用状态:
$ k get sandboxsets NAME REPLICAS AVAILABLE UPDATEREVISION AGE openclaw 1 1 65744474f9 22m
$ k get sandboxes NAME STATUS AGE SHUTDOWN_TIME PAUSE_TIME MESSAGE openclaw-c9wwc Running 23m
对应地,您可以在ACS控制台看到与沙箱同名的Pod已经进入Running状态:
预热池中的沙箱可以直接使用,也可以通过如下方式从预热池中获取沙箱:
通过 SandboxClaim CR 从预热池获取沙箱
创建如下SandboxClaim资源,从SandbosSet中获取沙箱:
apiVersion: agents.kruise.io/v1alpha1 kind: SandboxClaim metadata: name: openclaw-claim spec: templateName: openclaw # 之前创建的SandboxSet 名称 replicas: 1 claimTimeout: 1m ttlAfterCompleted: 5m
SandboxClaim 下发到集群之后,可以通过如下命令获取到 claim 成功的沙箱列表:
$ kubectl get sandboxclaims NAME PHASE TEMPLATE DESIRED CLAIMED AGE openclaw-claim Completed openclaw 1 1 17s $ kubectl get sandbox -l agents.kruise.io/claim-name=openclaw-claim NAME STATUS AGE SHUTDOWN_TIME PAUSE_TIME MESSAGE openclaw-c9wwc Running 96s
沙箱被claim后,SandboSet会迅速将预热池中的副本数补齐,保证预热的沙箱数量。
$ kubectl get sandboxsets NAME REPLICAS AVAILABLE UPDATEREVISION AGE openclaw 1 1 7f667d7d48 2m2s
通过EIP访问OpenClaw
在前面的介绍中,您成功创建了运行OpenClaw的沙箱实例。您可以通过查询与沙箱同名的Pod Yaml,在network.alibabacloud.com/allocated-eipAddress注解中找到系统自动分配的弹性公网IP,如下:
apiVersion: v1 kind: Pod metadata: annotations: ... network.alibabacloud.com/allocated-eip-id: eip-xxxxx0y884ucrevoxxxxx # 系统自动分配的EIP实例ID network.alibabacloud.com/allocated-eipAddress: xxx.xxx.xxx.xxx # 系统自动分配的EIP地址 network.alibabacloud.com/allocated-eni-id: eni-xxxxx563trofuhaxxxxx # 系统自动分配的弹性网卡实例ID ...
该EIP绑定在系统自动分配的弹性网卡实例上,您可以通过network.alibabacloud.com/allocated-eni-id注解中找到系统自动分配的弹性网卡实例,并在弹性网卡控制台中配置安全组规则。请您确保系统所分配的弹性网卡安全组开放了18789端口的访问权限。详情请参见:
确认配置完成后,替换如下访问链接中的IP,即可直接访问 OpenClaw 页面:
http://xxx.xxx.xxx.xxx:18789/?token=clawdbot-mode-123456
使用ACS沙箱的休眠唤醒能力
前提条件
联系阿里云工作人员协助您开启休眠、唤醒功能白名单
通过 Sandbox CR 休眠 OpenClaw实例
在您的OpenClaw沙箱运行期间,您可以通过如下命令查看其状态:
$ kubectl get sandboxes openclaw-c9wwc -o yaml apiVersion: agents.kruise.io/v1alpha1 kind: Sandbox metadata: ... name: openclaw-c9wwc spec: template: ...
您可以通过编辑Sandbox CR的spec.paused字段,将其修改为true,触发沙箱休眠。
$ kubectl -n default edit sandbox openclaw-c9wwc # 修改 `spec.paused` 为 true apiVersion: agents.kruise.io/v1alpha1 kind: Sandbox metadata: ... name: openclaw-c9wwc spec: paused: true template: ...
沙箱休眠成功后,可通过 Sandbox CR YAML 查看实例休眠状态。
$ k get sbx openclaw-c9wwc NAME STATUS AGE SHUTDOWN_TIME PAUSE_TIME MESSAGE openclaw-c9wwc Paused 72m
OpenClaw实例休眠期间,您的服务将处于不可访问状态。
通过 Sandbox CR 唤醒 OpenClaw实例
您可以通过以下命令唤醒OpenClaw实例。
kubectl -n default edit sandbox openclaw-c9wwc # 修改 `spec.paused` 为 false apiVersion: agents.kruise.io/v1alpha1 kind: Sandbox metadata: ... name: openclaw-c9wwc spec: paused: false template: ...
可通过Sandbox CR YAML 观察实例唤醒状态。
$ k get sbx openclaw-c9wwc NAME STATUS AGE SHUTDOWN_TIME PAUSE_TIME MESSAGE openclaw-c9wwc Running 75m
将OpenClaw集成至钉钉使用
创建钉钉应用
创建钉钉应用需要您的钉钉账号有开发者权限。您可以联系您的组织管理员获取钉钉开放平台的开发权限,具体操作请参见获取开发者权限。
创建应用
- 访问钉钉开放平台,在应用开发的左侧导航栏中,点击钉钉应用,在钉钉应用页面右上角点击创建应用。
- 在创建应用面板,填写应用名称和应用描述,在应用图标上传图标,完成后点击保存。
查看应用 Client ID 和 Client Secret
在左侧菜单选择凭证与基础信息,复制Client ID和Client Secret,用于下一步创建连接流。
创建消息卡片
钉钉机器人通过卡片消息支持流式返回结果,您需要创建卡片模板供消息发送使用。
- 访问卡片平台-模板列表,点击新建模板。
- 在创建模板输入框,填入模板信息,单击创建。
- 卡片类型:选择消息卡片。
- 卡片模板场景:选择AI 卡片。
- 关联应用:关联应用创建步骤中的应用。
-
- 在模拟编辑页面,不要使用预设模板,不需要进行任何额外操作,直接保存并发布模板。然后点击返回模板列表页面。
- 返回模板列表,复制模板ID,用于创建钉钉连接流使用。
授予应用发送卡片消息权限
创建卡片后,您需要给应用授予发送卡片消息的权限。
- 访问钉钉应用列表。找到刚刚创建的应用,点击应用名称进入详情页面。
- 在左侧菜单选择开发配置 > 权限管理,在左侧搜索框搜索
Card,勾选AI卡片流式更新权限(Card.Streaming.Write)和互动卡片实例写权限(Card.Instance.Write),单击批量申请。
创建AppFlow连接流
- 使用AppFlow模板创建连接流,单击立即使用进入创建流程。
- 在连接流的账户授权配置向导页,点击添加新凭证。在创建凭证对话框中,填入创建的应用的Client ID 和 Client Secret,并设置一个自定义凭证名称。
注意:在创建凭证时,请确保【Ip白名单】中的IP列表均已被您加入OpenClaw挂载的EIP安全组规则中放行,否则后续可能导致钉钉应用无法访问您的OpenClaw沙箱
- 在连接流的账户授权配置向导页,点击添加新凭证。输入您在创建OpenClaw沙箱时配置在GATEWAY_TOKEN 中的Token。
- 在执行动作配置向导页按照页面提示配置完成后点击下一步。
- 公网地址:端口:格式为
您的OpenClaw实例分配的EIP:服务端口,例如,EIP为47.0.XX.XX,服务端口为18789,则应填写47.0.XX.XX:18789。 - 模板ID:填写步骤三1.3中保存的AI卡片模板ID。
- 在基本信息配置向导页,填写连接流名称和连接流描述(建议保持默认),完成后点击下一步。
- 界面提示流程配置成功,复制WebhookUrl,点击发布。
配置钉钉机器人
有了Webhook地址后,接下来您可以在钉钉应用中配置机器人来回答用户问题了。
配置钉钉机器人
- 访问钉钉应用列表。找到刚刚创建的应用,点击应用名称进入详情页面。
- 在添加应用能力页面,找到机器人卡片,点击添加。
在机器人配置页面,打开机器人配置开关,您可以参考下图完成配置。消息接收模式请选择HTTP模式,消息接收地址为AppFlow连接流配置发布成功后复制的WebhookUrl。然后点击发布。
消息接收模式选择HTTP模式,目前AppFlow仅支持HTTP模式,选择Stream模式会导致无法返回消息。
发布应用版本
应用创建完成后,如果需要将应用供企业内其他用户使用,需要发布一个版本。
- 单击应用开发,在钉钉应用页面,点击目标应用。
- 在目标应用开发导航栏,单击版本管理与发布,在版本管理与发布页面,点击创建新版本。进入版本详情页面,输入应用版本号和版本描述信息,选择合适的应用可见范围,完成后点击保存。并在弹窗中点击直接发布。
测试机器人
你可以创建群聊或在已有群聊中添加机器人,并与机器人对话,查看效果。
- 在钉钉群管理中添加机器人。进入钉钉群群设置页面,点击机器人卡片区域,在机器人管理页面,点击添加机器人。在添加机器人的搜索文本框中输入目标机器人名称,并选中要添加的机器人。点击添加,完成后再点击完成添加。
- 在钉钉群中@机器人进行交流互动。您也可以在钉钉的搜索栏中,输入机器人名称后,在功能页检索到对应机器人,进行私聊互动。
- 您与机器人的互动都可以在AppFlow连接流中查询运行日志,从而进行调试: