首页
/
行业洞察
/
正文
INDUSTRY INSIGHT · 深度
Cortex Task API 容器实战指南:Job 规范、多容器共享与 API 链式调用
📅 2026/9/27 21:19:12
✍️ 爱科研究院
👁 阅读 3,247
后端云原生模型推理服务MLOps人工智能【免费下载链接】cortexProduction infrastructure for machine learning at scale项目地址https://gitcode.com/gh_mirrors/co/cortex点击查看免费下载导读本文聚焦 Cortex 项目中 Task API 的容器行为与容器内开发实践系统讲解如何从容器内部读取 Job 完整规范/cortex/spec/job.json、利用多容器共享的/mnt目录构建 Sidecar 式工作流、在容器内直接使用 Cortex CLI / Python 客户端访问集群 API以及如何通过 Istio Ingress Gateway 从任意 API 向 Task API 提交作业Chaining APIs。读完本文你将能够在 Task API 的容器代码中熟练完成读取作业参数、跨容器协作、调用集群 API、链式提交任务这四类高频场景。Task API 与容器模型概览在深入容器细节之前先明确 Task API 的运行时模型参见 Task API 总览当你部署一个 Task API 后Cortex 会创建一个接收作业提交的 HTTP 端点提交作业后Cortex 返回一个job_id并异步初始化一个 worker Pod基于 API 的 pod 配置Pod 运行完成后任务被标记为 completedPod 随即终止。Task API 支持按需运行、无任务时缩容到 0、以及自动从故障与 Spot 实例终止中恢复。因此容器配置pod.containers直接决定了 worker Pod 中实际运行的程序。理解容器内可用的约定路径、环境变量与网络访问方式是编写正确 Task 应用的前提。读取完整 Job 规范/cortex/spec/job.json规范文件的产生与结构当 Task 作业被提交后Cortex 会将**整个 Job 规范job specification**写入 API 容器的文件系统路径固定为/cortex/spec/job.json。也就是说只要你在容器代码中读取该文件就能获得本次提交的完整参数包括config字段中的任意自定义输入。从源码看Task 作业提交的载荷结构由TaskJobSubmission定义pkg/operator/schema/job_submission.go它内嵌了RuntimeTaskJobConfigpkg/types/spec/job.gotype RuntimeTaskJobConfig struct { Workers int json:workers yaml:workers Config map[string]interface{} json:config yaml:config Timeout *int json:timeout yaml:timeout }用户通过 HTTP 提交的载荷形如参见 TaskAPI jobs{ timeout: 3600, config: {my_key: my_value} }Cortex 在SubmitTaskJob处理器中pkg/operator/endpoints/submit_task.go将Workers固定为 1随后把用户提交的timeout与config合并进作业规范并以 JSON 形式写入 S3worker Pod 启动时该规范被下载并挂载到/cortex/spec/job.json。作业规范的 S3 存储路径格式可在 pkg/types/spec/job.go 中看到/cluster UID/jobs/job_api_kind/cortex version/api_name/job_id/spec.json在容器中读取配置的推荐方式在你的应用入口处读取并解析/cortex/spec/job.json即可获得本次作业的config。例如import json with open(/cortex/spec/job.json) as f: job_spec json.load(f) config job_spec.get(config, {}) my_value config.get(my_key)这意味着任务参数无需硬编码进镜像或命令行——每次提交作业时通过config传入即可容器代码保持不变。这一机制让同一个 Task API 可以服务于大量参数不同的作业。多容器协作共享的 /mnt 目录多容器布局Task 的 worker Pod 可以包含多个容器pod.containers中至少提供一个容器参见 配置文档。典型用法是一个容器承载主业务逻辑另一个容器作为辅助进程例如日志转发、指标采集的 Sidecar。/mnt 共享语义所有容器都会挂载同一个/mnt目录并且该目录在所有容器之间共享。因此多容器之间可以通过/mnt下的文件进行数据交换主容器将中间结果或待处理文件写入/mnt辅助容器读取并消费。这是 Task以及 Realtime、Batch、Async容器协作的标准约定无需额外配置即可使用。值得注意的补充点是compute.shm配置项可以单独设置共享内存如64Mi或1Gi用于同一容器内多进程之间的数据共享挂载到/dev/shm这与/mnt的跨容器共享是两套不同的机制参见 配置文档 中shm字段说明。容器内可观测性Task API 容器遵循与集群其他工作负载一致的日志、指标与告警约定可直接沿用集群层面的观测能力日志查看 集群日志观测指南指标查看 集群指标观测指南告警查看 集群告警指南。作业级别的状态信息status、created_time、start_time、end_time等可通过cortex get task_api_name job_id或对 Task API 端点发起GET endpoint?jobIDjobID获取响应结构见 TaskAPI jobs。在容器内使用 Cortex CLI / Python 客户端免配置的连接机制每个容器都会自动携带一份已配置好的 CLI 配置文件路径为/cortex/client/cli.yaml它被预配置为连接到当前集群。同时Cortex 会默认设置环境变量CORTEX_CLI_CONFIG_DIR/cortex/client从源码看这个环境变量由 pkg/workloads/k8s.go 统一注入到每个容器containerEnvVars append(containerEnvVars, kcore.EnvVar{ Name: CORTEX_CLI_CONFIG_DIR, Value: _clientConfigDir, })因此容器内使用 CLI 或 Python 客户端无需任何额外配置。Python 客户端可以直接实例化该客户端库位于 python/client/corteximport cortex cx cortex.client() # 之后即可用 cx 访问集群 API例如获取 API 列表、提交任务等CLI 同样开箱即用cortex get cortex get api_name版本匹配约束容器内使用的 Cortex CLI / 客户端版本必须与集群版本一致。集群版本可以通过环境变量CORTEX_VERSION读取echo $CORTEX_VERSION在 Dockerfile 中安装客户端时建议根据CORTEX_VERSION锁定对应版本集群安装与版本管理可参考 安装指南 与 CLI 文档避免因版本不匹配导致 API 调用失败。Chaining APIs从任意 API 提交 Task 作业提交地址在 Cortex 集群内任何 APIRealtime、Batch、Async、Task 均可都可以通过 Istio Ingress Gateway 提交 Task 作业统一地址为http://ingressgateway-operator.istio-system.svc.cluster.local/tasks/api_name其中api_name是目标 Task API 的名字。请求体即 Task 作业提交载荷例如import requests response requests.post( http://ingressgateway-operator.istio-system.svc.cluster.local/tasks/hello-world, json{config: {my_key: my_value}}, )提交成功后响应体中包含job_id后续可用GET endpoint?jobIDjob_id查询状态、DELETE endpoint?jobIDjob_id停止作业完整端点语义见 TaskAPI jobs。这一能力让 Task API 天然适合作为 Airflow 等编排器的 task runner。反向调用Task API 调其他 API如果你的 Task 容器需要反过来调用集群中的 Realtime、Batch 或 Async API请参阅对应工作负载类型的 Chaining APIs 文档Realtime API 文档以及多版本分流场景下的 Traffic SplitterBatch API 文档Async API 文档。各工作负载的链式调用地址遵循相同的ingressgateway-operator.istio-system.svc.cluster.local/kind/api_name约定仅在路径前缀上有所区分。常见实战组合与注意事项参数化训练任务把模型超参放进config容器内读取/cortex/spec/job.json完成解析无需为每次实验重新构建镜像。Sidecar 模式主容器写/mnt辅助容器读取并上传日志或指标两者共享同一生命周期由 Pod 统一调度。流水线串联Realtime API 收到请求后通过/tasks/api_name提交耗时作业并立即返回job_id前端轮询 Task API 获取结果。版本一致性容器镜像内安装的cortexCLI / Python 客户端务必与CORTEX_VERSION保持一致。入口约定Task 容器通常不需要对外监听端口CORTEX_PORT仅注入到非 Task 的 API 容器见 pkg/workloads/k8s.go入口逻辑应在command中声明并运行至完成。参考文档Task API 总览Task API 配置参考TaskAPI jobs 提交与状态查询容器与镜像规范集群观测日志 / 指标 / 告警赞分享后端云原生模型推理服务MLOps人工智能【免费下载链接】cortexProduction infrastructure for machine learning at scale项目地址https://gitcode.com/gh_mirrors/co/cortex点击查看免费下载相关推荐Cortex Batch API 容器开发指南请求处理、就绪探针、资源配额与 API 链式调用Cortex Batch API 容器开发指南请求处理、就绪探针、资源配额与 API 链式调用 导读 本文以 Cortex 仓库的 docs/workload后端云原生模型推理服务MLOps人工智能V8 公共 API 稳定性指南弃用宏、嵌入器兼容与版本演进规范V8 公共 API 稳定性指南弃用宏、嵌入器兼容与版本演进规范 V8 作为 JavaScript 引擎其公共 API即 include/ 目录下对外暴露的语言运行时编译器JIT编译解释器内存管理无需rootDockur Windows容器文件共享实战指南无需rootDockur Windows容器文件共享实战指南 你是否还在为Docker容器中的文件共享权限问题头疼非root用户无法访问共享目录本文将带你虚拟化上一篇Pake 快速上手10 分钟构建你的第一个轻量级桌面应用下一篇使用预训练模型Transformer-TTS快速生成高质量语音的实用指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
📌 标签:
工业官网
设计趋势
AI 建站
SEO
获取完整报告 →
RELATED ARTICLES
推荐阅读
2026/9/27 21:19:12
lnd 的 lnwire 包:深入理解 Lightning Network 线协议实现
2026/9/27 21:19:12
LiteIDE 中的 FakeVim:用 Qt 组件为 Go 编辑器注入完整 Vim 键位模拟
2026/9/27 21:19:12
【AI】copaw 配 TaoToken 接入 deepseek v4:用统一 Key 通道真正解决 bug 的配置与验证
2026/9/27 23:29:21
RK3576上I3C实战:协议架构差异与DTS配置详解
2026/9/27 23:29:21
阻抗匹配网络设计:T型和π型拓扑原理与实战
2026/9/27 23:29:21
2TRX能量租赁
2026/9/27 23:29:21
深入I2C多主机仲裁与时钟延展:从原理到实战避坑
2026/9/27 23:29:21
组态王与MCGS的Modbus TCP实战避坑指南
2026/9/27 23:24:20
STM32烧录超时Flash Timeout根本原因与系统性排查指南
2026/9/27 0:02:53
网站建设的英语怎么说?别只背单词,看完这套安全完整流程才敢上线
2026/9/27 0:02:53
新手入门看这篇:建设网站加盟避坑指南与SEO实操
2026/9/27 0:02:53
论文AIGC疑似度是什么意思?想查论文AI率有哪些免费工具?
2026/9/27 0:02:53
网站建设的英语怎么说?别只背单词,看完这套安全完整流程才敢上线
2026/9/27 0:02:53
新手入门看这篇:建设网站加盟避坑指南与SEO实操
2026/9/27 0:02:53
论文AIGC疑似度是什么意思?想查论文AI率有哪些免费工具?