Hermes Agent — 在 K3s / K8s 中运行指南
内容提要
本文介绍在 K3s/K8s 中部署 Hermes Agent:先用 nerdctl 运行 setup 容器生成配置,数据存于 /var/lib/hermes-data;再以 StatefulSet 部署 Gateway 服务(端口 8642)和 Dashboard 仪表盘(端口 9119),二者共享 PVC 持久化存储,Dashboard 只读挂载。可通过 kubectl exec 进入容器运行交互式 CLI 聊天,建议用 port-forward 安全访问仪表盘。
延伸解读
持久化数据目录的关键作用
文章强调在首次运行前必须通过 setup 容器生成配置,并将数据目录挂载到宿主机 /var/lib/hermes-data。该目录包含 .env、config.yaml、sessions、memories 等关键文件,是 Agent 状态和记忆的载体。在 K8s 中,这些数据通过 PVC 持久化,确保 Pod 重启或迁移后配置和会话不丢失。因此,正确设置存储类和访问模式是部署成功的基础。
Gateway 与 Dashboard 的协作与安全
Gateway 作为后台服务运行在 8642 端口,Dashboard 运行在 9119 端口,并通过环境变量 GATEWAY_HEALTH_URL 指向 Gateway 的 Service DNS 名称进行健康检查。Dashboard 以只读方式挂载同一 PVC,避免意外修改数据。文章建议使用 kubectl port-forward 访问 Dashboard,而非直接暴露服务,这降低了未授权访问的风险,适合内部管理场景。
资源限制与节点选择建议
参考 YAML 中为 Gateway 设置了 1Gi 内存请求和 4Gi 限制,Dashboard 则为 256Mi 请求和 512Mi 限制,并指定了 nodeSelector 将 Pod 调度到特定区域节点。这些配置可根据实际负载调整,但需注意资源不足可能导致 Agent 运行不稳定。同时,使用 StatefulSet 而非 Deployment 是为了保证稳定的网络标识和存储卷绑定,适合有状态工作负载。
Q&A
在 K3s 中部署 Hermes Agent 前需要做哪些准备?
需要确保 K3s 或 K8s 集群已就绪,节点上已有 containerd(K3s 默认内置),推荐安装 nerdctl 作为容器管理工具,并准备镜像 nousresearch/hermes-agent:latest。
如何初始化 Hermes Agent 的配置和数据目录?
在目标节点上创建数据目录 /var/lib/hermes-data,然后使用 nerdctl 运行一次性 setup 容器:sudo nerdctl run -it --rm -v /var/lib/hermes-data:/opt/data nousresearch/hermes-agent:latest setup。配置完成后目录包含 .env、config.yaml、SOUL.md、sessions、memories、skills、cron、hooks、logs、skins 等。
Hermes Agent 的 Gateway 服务如何部署?
使用 StatefulSet 部署 Gateway,镜像为 nousresearch/hermes-agent:latest,启动参数为 gateway run,端口 8642,挂载 PVC 到 /opt/data,并设置环境变量 TZ=Asia/Shanghai。
Dashboard 仪表盘如何部署和访问?
使用 StatefulSet 部署 Dashboard,镜像相同,启动参数为 dashboard,端口 9119,只读挂载 PVC,并设置环境变量 GATEWAY_HEALTH_URL 指向 Gateway 服务。建议使用 kubectl port-forward -n hermes svc/hermes-dashboard 9119:9119 安全访问,浏览器打开 http://localhost:9119。
如何运行 Hermes Agent 的交互式 CLI 聊天?
使用 kubectl exec 进入 Gateway 容器:kubectl exec -it -n hermes gateway-0 -- /opt/hermes/.venv/bin/hermes,即可进行交互式聊天。
Gateway 和 Dashboard 如何共享持久化存储?
两者都使用同一个 PersistentVolumeClaim(名为 data),Gateway 读写挂载到 /opt/data,Dashboard 只读挂载到 /opt/data,从而实现数据共享。