agent_launcher:新增一等 kubernetes 后端(每 agent 一 Pod,key 经 Secret 引用不内联)(Refs #16)
回应「我们跑在 k8s pods 上」——此前 launcher 只有 dev 的 subprocess + 通用 command hook, 未把 k8s 作为一等后端,且把 OPENAI_API_KEY 内联进 env(在 k8s 会落 etcd)。本次: - 新增 AGENT_LAUNCH_BACKEND=kubernetes:每 agent 一个 Pod(build_pod_manifest)——资源 requests/limits、标签 heicode-swarm-id/heicode-user-id(GC/teardown)、restartPolicy OnFailure、 serviceAccountName;非敏感 env 内联,**OPENAI_API_KEY 经 secretKeyRef 引用每-swarm k8s Secret (build_secret_manifest,via kubectl apply -f - stdin),绝不内联进 PodSpec(不落 etcd/argv)**。 - stop_launched:k8s 按标签 kubectl delete pod,secret;subprocess 仍 terminate。 - config:AGENT_POD_IMAGE/NAMESPACE/SERVICE_ACCOUNT/CPU|MEM_REQUEST|LIMIT;ORCHESTRATOR_URL= 集群内 Service DNS。文档注明前置(kubectl + 最小 RBAC ServiceAccount + NetworkPolicy)与 硬化替代(azkv CSI SecretProviderClass,编排器全程不碰明文)。 文档:runtime-contract §3.3 后端列表加 kubernetes(含密钥/RBAC/Service DNS/CSI); security-boundary §6 增 K8s pod 边界(Secret 引用不内联、最小 RBAC、NetworkPolicy、CSI 硬化)。 测试:test-agent-launcher 增 k8s manifest 断言(标签、secretKeyRef 非内联、原文不在 Pod manifest、 资源限额、无 secret 则省略 key)。 影响范围:仅 agent_swarm(launcher + 文档 + 测试)。默认仍 backend=none,CI/e2e 不变。 Refs #16 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 4.8
parent
ad343e6404
commit
af26455a8b
@@ -66,8 +66,9 @@ create 响应 `data`:`deployment_id`、`runtime_deployment_id`、`manager_depl
|
||||
|
||||
**拉起后端**(`AGENT_LAUNCH_BACKEND`,fail-soft——拉起失败不影响 create):
|
||||
- `none`(默认):不自动拉起,agent 由外部供给(保留 CI/e2e 与「外部拉起」部署);
|
||||
- `subprocess`:本地起 `python -m agent.main`(dev);
|
||||
- `command`:执行部署注入的模板 `AGENT_LAUNCH_CMD`(env 经进程环境传入,模板包装真实拉起如 kubectl/pod-create;**密钥不上 argv**)。
|
||||
- `subprocess`:本地起 `python -m agent.main`(**仅 dev**——进程在编排器 pod 内,无隔离/限额);
|
||||
- `command`:执行部署注入的模板 `AGENT_LAUNCH_CMD`(env 经进程环境传入,**密钥不上 argv**);
|
||||
- **`kubernetes`(生产)**:**每 agent 一个 Pod**,带资源 requests/limits + 标签(`heicode-swarm-id`/`heicode-user-id`,供 GC/teardown)。模型 key 经**每-swarm k8s Secret**(`build_secret_manifest`,via stdin 应用)由 Pod `secretKeyRef` 引用——**绝不**内联进 PodSpec env(否则进 etcd/`kubectl get -o yaml`)。停止时按标签 `kubectl delete pod,secret`。**前置**:编排器镜像含 `kubectl` + 一个对 `AGENT_POD_NAMESPACE` 有 pod/secret RBAC 的 ServiceAccount;`ORCHESTRATOR_URL` = **集群内 Service DNS**(如 `ws://swarm-orchestrator.<ns>.svc.cluster.local:8000`);NetworkPolicy 放行出网到 HM `/v1` + git。**硬化替代**:用 azkv CSI SecretProviderClass 让 Pod 直接挂载密钥(编排器全程不碰明文),见 security-boundary §6。config:`AGENT_POD_IMAGE`/`AGENT_POD_NAMESPACE`/`AGENT_POD_SERVICE_ACCOUNT`/`AGENT_POD_CPU|MEM_REQUEST|LIMIT`。
|
||||
|
||||
**限额(Swarm 执行)**:池大小 `AGENT_LAUNCH_POOL_SIZE`(默认 3);**实际拉起数 = min(池大小, `MAX_AGENTS_PER_USER` − 该用户已连接数)**——Swarm 在**拉起时**限额,并在 **agent 注册时**兜底硬拒(security-boundary §6 / PR#32)。
|
||||
|
||||
|
||||
Reference in New Issue
Block a user