ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

CubeSandbox 裸金属 / 物理机部署实战:从 KVM 主机安装到运行第一段 Agent 代码

CubeSandbox 裸金属 / 物理机部署实战:从 KVM 主机安装到运行第一段 Agent 代码 CubeSandbox 裸金属 / 物理机部署实战从 KVM 主机安装到运行第一段 Agent 代码【免费下载链接】CubeSandboxInstant, Concurrent, Secure Lightweight Sandbox for AI Agents.项目地址: https://gitcode.com/GitHub_Trending/cu/CubeSandbox本文是 CubeSandbox 裸金属 / 物理机部署的完整操作指南覆盖在已支持 KVM 的 x86_64 与 aarch64 Linux 主机上完成一键安装、从 OCI 镜像制作代码解释器模板以及使用 E2B SDK 运行第一段隔离沙箱代码的全过程。读完本文你将掌握裸金属部署的完整命令链路、安装脚本背后的系统预检逻辑以及如何把部署环境与本地 E2B 生态无缝打通。CubeSandbox 是面向 AI Agent 的轻量级沙箱运行时支持通过 E2B 兼容 REST API 驱动。对于已经具备硬件 KVM 能力的物理机、裸金属服务器或开启了嵌套虚拟化的云服务器无需借助 PVM 即可直接部署。本文将结合仓库中 deploy/one-click 目录下的安装脚本与 CubeMaster 命令行工具 的源码实现深入讲解每一步背后的原理与可调参数。::: warning 生产环境注意 如果计划在生产环境中使用 Cube Sandbox请先阅读网络加固指南在将服务暴露到不可信网络之前完成安全加固。 :::适用场景与前置条件裸金属部署的核心适用场景是已有支持 KVM 的 x86_64 或 aarch64ARM64Linux 机器/dev/kvm可用例如物理机、裸金属服务器、或已开启嵌套虚拟化的云服务器。如果你的机器是普通云服务器/dev/kvm不可用则不需要裸金属方案——通过 PVMPagetable-based Virtual Machine即可在普通云服务器上启用 KVM请参阅快速开始。部署前需要确认以下前置条件x86_64或aarch64ARM64架构的 Linux 机器/dev/kvm存在且可读写可用ls -la /dev/kvm验证有root 权限Docker已安装并正常运行可访问互联网用于下载发布包、拉取 Docker 镜像内存 ≥ 8 GB磁盘空余 ≥ 50 GB::: warning 以 root 身份执行所有操作 本文中的所有命令均需在root用户下执行请先切换到 rootsudo su root:::为什么这些条件不可或缺安装脚本的预检逻辑从 online-install.sh 的源码可以看到安装器在下载庞大的发布包之前就会执行一组下载前预检pre-download preflight checks把不满足条件的机器挡在下载之前避免浪费流量后再失败。关键检查项包括预检项判定条件说明操作系统uname必须为 Linux非 Linux 直接退出glibc 版本必须 ≥ 2.31Ubuntu 20.04 基线兼容 Ubuntu 20.04、Debian 11、RHEL/CentOS 8、OpenCloudOS 8root 权限EUID必须为 0安装与 systemd 服务均需要 root基础命令tar、awk必须存在curl/wget至少其一用于下载与解压python3未指定--url时必需用于解析 Release JSONKVM/dev/kvm必须存在沙箱依赖硬件虚拟化内存至少 8 GB可通过CUBE_MIN_MEMORY_KB上调低于 7 500 000 KB 直接拒绝/data/cubelet文件系统必须为 XFS依赖 XFS reflink 实现 CoW 快照cgroup v2 cpu 控制器cgroup.controllers/cgroup.subtree_control需含cpuCubelet 设置 CPU 配额需要eBPF 文件系统内核需支持 bpf 且/sys/fs/bpf已挂载Cubelet 内置 network runtime 依赖 eBPF其中 XFS 是硬性要求CubeSandbox 依赖 XFS reflink 实现 Copy-on-Write 快照若/data/cubelet不在 XFS 上安装脚本会提示你执行mkfs.xfs /dev/your-partition并挂载到/data/cubelet。cgroup v2 的 cpu 控制器若未启用脚本会尝试自动echo cpu /sys/fs/cgroup/cgroup.subtree_control在 Ubuntu/Debian 上若因multipathd实时线程阻塞失败可执行systemctl disable --now multipathd.service multipathd.socket后重试。这些细节都对应 install.sh 中的check_hardware_preflight、check_cubelet_fs_preflight、check_cgroup_cpu_preflight、check_bpf_fs_preflight等函数。第一步安装 CubeSandboxx86_64AMD64一键在线安装在 x86_64 主机上以 root 身份执行一行命令即可完成在线安装curl -sL https://cnb.cool/CubeSandbox/CubeSandbox/-/git/raw/master/deploy/one-click/online-install.sh | MIRRORcn bashonline-install.sh的行为可以由以下变量与参数控制MIRRORcn从国内镜像download.cubesandbox.com拉取发布包信息不设置则回退到 GitHub API 的 latest release。--urldownload-url手动指定发布包下载地址跳过版本自动发现。--skip-precheck或ONE_CLICK_SKIP_PRECHECK1跳过下载前轻量预检。⚠️ 注意跳过仅影响online-install.sh的下载拦截解压后实际执行的 install.sh 仍会强制执行权威的系统条件检测。CUBE_PVM_ENABLE1仅当机器运行了 PVM 宿主内核时使用普通裸金属不需要。脚本在下载后会校验包名格式cube-sandbox-one-click-version-or-sha.tar.gz解压并透明地执行包内install.sh即使 URL 指向的是外层发布包也会自动下降一层找到嵌套的sandbox-package.tar.gz见 install.sh 的嵌套包检测逻辑。ARM64aarch64主机手动安装::: warning online-install.sh 即将支持 ARM64online-install.sh一键安装脚本当前仅自动发现x86_64包ARM64 的自动检测与一键安装支持将于近期版本补齐。目前 ARM64 用户请按照以下手动步骤操作。 :::第一步前往对应平台的发布页面找到包含 ARM64 资产的最新 Release下载cube-sandbox-one-click-*-arm64.tar.gz包GitHub 与 CNB 国内站均可获取。第二步解压并运行安装脚本# 将 version 替换为你实际下载的版本如 v0.5.0-rc3 tar -xzf cube-sandbox-one-click-version-arm64.tar.gz cd cube-sandbox-one-click-version-arm64 ./install.sh安装完成后会得到什么根据 install.sh 的部署逻辑一套 all-in-one 安装会交付以下组件E2B 兼容 REST API监听在3000端口由 CubeAPI 提供CubeMaster、内置 network runtime 的 Cubelet、CubeShim作为宿主机进程运行MySQL 和 Redis通过 Docker Compose 管理另有 MinIO 提供本地 S3 存储CubeProxy提供 TLSmkcert 签发和 CoreDNS 域名路由cube.app安装完成后以下命令会被链接到/usr/local/bincube-runtime、containerd-shim-cube-rs、cubecli、cubevsmapdump控制节点还会额外提供cubemastercli与cubeopscli。安装脚本最后默认执行quickcheck.sh可通过ONE_CLICK_RUN_QUICKCHECK0关闭对 systemd 单元、健康端点、节点注册等逐项探测确保部署健康就绪。::: tip 无 guest PMU 的 ARM64 主机 在部分 aarch64 主机上——较旧的内核、嵌套虚拟化环境、或某些 ARM 核心——KVM 不会向 guest 暴露 PMUv3。这些主机上 MicroVM 仍可正常启动hypervisor 会在不启用 PMU 的情况下初始化 vCPUguest 只是看不到硬件性能计数器无需任何额外操作。 :::常用安装调优参数来自 env.example安装行为可以通过复制 env.example 为.env后修改来定制也可以直接用环境变量覆盖。以下是与裸金属部署最相关的几组参数参数默认值说明ONE_CLICK_DEPLOY_ROLEcontrol节点角色controlall-in-one 控制节点或compute计算节点注册到已有控制面CUBE_SANDBOX_NODE_IP自动探测节点 IP用于沙箱 DNS 与节点注册CUBE_SANDBOX_NETWORK_CIDR192.168.0.0/18CubeVS 本地沙箱网络 CIDR掩码须在 /16/24 之间且不得与宿主机网段冲突CUBE_SANDBOX_NETWORK_CIDR_SKIP_CONFLICT_CHECK0设为 1 可跳过 CIDR 冲突检测谨慎使用CUBE_PROXY_HTTP_PORT/CUBE_PROXY_HTTPS_PORT80/443CubeProxy 的 HTTP/HTTPS 端口CUBE_SANDBOX_MYSQL_PORT/CUBE_SANDBOX_REDIS_PORT3306/6379内置 MySQL/Redis 端口CUBE_API_BIND0.0.0.0:3000E2B 兼容 REST API 监听地址CUBE_API_KEY空不鉴权内置简单 Key 鉴权单机内网场景可不设MIRROR空国际仓库cn表示国内镜像仓库CUBE_EXTERNAL_MYSQL_HOST等空使用外部 MySQL/PostgreSQL/Redis 时填写安装器会自动 patch CubeMaster 配置并 mask 本地容器服务此外还支持CUBE_SANDBOX_CUBE_ROUTER_ENABLE路由感知沙箱出口通过内核路由栈决定流量走向、CUBE_L7_MARK_*L7 egress skb-mark 覆写写入/etc/cubeegress/l7-marks.conf保持数据面与 iptables TPROXY 规则一致等进阶参数。若已接入外部依赖请务必修改默认口令如cube_pass/ceuhvu123安装脚本会对默认凭据发出显式告警。第二步制作代码解释器模板安装完成后使用预构建镜像创建代码解释器模板cubemastercli tpl create-from-image \ --image cube-sandbox-cn.tencentcloudcr.com/cube-sandbox/sandbox-code:latest \ --writable-layer-size 1G \ --expose-port 49999 \ --expose-port 49983 \ --probe 49999镜像仓库说明国内优先使用cube-sandbox-cn.tencentcloudcr.com/cube-sandbox/sandbox-code:latest境外访问推荐使用cube-sandbox-int.tencentcloudcr.com/cube-sandbox/sandbox-code:latest。目前仅sandbox-code:latest已发布为 Multi-Arch 镜像同时支持 x86_64 与 aarch64/ARM64其他官方镜像的 Multi-Arch 支持仍在陆续补齐。参数语义对应 CLI 源码实现从 CubeMaster/cmd/cubemastercli/commands/cubebox/template.go 中可以看到create-from-image子命令的参数定义参数说明--image要拉取的 OCI 镜像引用明文 HTTP 仓库需加http://前缀--writable-layer-size可写层大小如1G必填--expose-port模板对外暴露的容器端口可重复传参暴露多个端口--probe在指定端口启用 HTTP GET 就绪探针默认timeout_ms30000, period_ms500--probe-path探针 HTTP 路径默认/health仅在设置--probe时生效--env构建时注入的环境变量如--env MY_ENVproduction模板内的envd默认监听49983可直接用GET /health作为就绪探针49999则是代码解释器服务的暴露端口。--backend s3可将模板及派生沙箱/快照切换到集群共享的 S3 CoW 后端这是跨机 Pause / Resume / FromSnap 的前提。监控构建进度由于镜像较大下载、解压、模板制作过程可能比较久请耐心等待。发起构建后使用tpl watch阻塞轮询直到任务到达终态READY或FAILEDcubemastercli tpl watch --job-id job_id任务完成时的输出示例job_id: 2e71b561-153e-4c08-ac37-5270d94f5f15 template_id: tpl-748094d2f2374b0a8a37e6ec status: READY phase: READY progress: 100% distribution: 1/1 ready, 0 failed artifact_sha256: 5d413bc735062d49d36ef9c0e62cd0c3a915853be5ec0c7fba90e13d9fd33f79 template_status: READY关键字段含义字段说明status/template_status任务与模板整体状态READY表示模板可用phase流水线阶段PULLING拉取镜像→BUILDING构建 rootfs→DISTRIBUTING分发到节点→READYprogress当前阶段完成百分比distributionN/M ready已收到 artifact 的集群节点数artifact_id/artifact_sha256构建出的 rootfs artifact 的稳定 ID 与 SHA-256 摘要template_spec_fingerprint模板规格的确定性指纹镜像 构建参数相同输入产生相同指纹等待tpl watch结束、模板状态变为READY后记录输出中的模板 IDtemplate_id下一步会用到。若只需单次查询不阻塞可用cubemastercli tpl status --job-id job_id完整的模板创建流程与更多参数说明请参阅从 OCI 镜像制作模板。第三步运行第一段 Agent 代码安装 Python SDK在部署机或任何能访问 3000 端口的客户端上安装 E2B SDKyum install -y python3 python3-pip pip config set global.index-url https://mirrors.ustc.edu.cn/pypi/simple pip install e2b-code-interpreter设置环境变量export E2B_API_URLhttp://127.0.0.1:3000 export E2B_API_KEYe2b_000000 export CUBE_TEMPLATE_ID你的模板ID export SSL_CERT_FILE/root/.local/share/mkcert/rootCA.pem变量说明E2B_API_URL将 E2B SDK 请求指向本地 Cube Sandbox而非 E2B 官方云服务E2B_API_KEYSDK 强制非空校验本地部署填任意字符串即可CUBE_TEMPLATE_ID第二步获取的模板 IDSSL_CERT_FILEmkcert 签发的 CA 根证书路径沙箱 HTTPS 连接需要在隔离沙箱中运行代码import os from e2b_code_interpreter import Sandbox # 直接使用 E2B SDK # CubeSandbox 在底层无缝接管了所有的请求 with Sandbox.create(templateos.environ[CUBE_TEMPLATE_ID]) as sandbox: result sandbox.run_code(print(Hello from Cube Sandbox, safely isolated!)) print(result)这段代码的关键点在于客户端使用的是标准e2b-code-interpreterSDK对应用完全透明——只要E2B_API_URL指向本地 3000 端口CubeSandbox 的 E2B 兼容 REST API 就会在底层无缝接管所有请求。仓库中还提供了更完整的参考实现 CubeAPI/examples/create.py它额外调用了sandbox.get_info()打印沙箱信息更多端到端示例请参阅示例项目。部署完成后的安全与扩展裸金属部署完成后建议按以下路径继续完善网络加固— 在服务暴露到不可信网络前完成安全加固从 OCI 镜像制作模板— 自定义沙箱运行环境含tpl list、tpl info、tpl merge、tpl delete等完整模板生命周期操作多机集群部署— 扩展到多台机器controlcompute角色拆分HTTPS 证书与域名解析— TLS 配置选项鉴权— 启用 API 鉴权至此你已经在裸金属 / 物理机上完成了 CubeSandbox 的部署、模板制作与首段 Agent 代码的运行整个链路与 E2B 生态完全兼容可以直接复用现有的 Agent 编排代码。【免费下载链接】CubeSandboxInstant, Concurrent, Secure Lightweight Sandbox for AI Agents.项目地址: https://gitcode.com/GitHub_Trending/cu/CubeSandbox创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表