平台架构 - Kubernetes 基础与 CRD

想了解 CubeStudio 为什么用 k8s/rancher、平台用到哪些 CRD(分布式训练/工作流/监控/网关/批调度)、调度打分策略与内网 DNS 配置时读这篇

01-架构原理 / 平台架构
kubernetesk8srancherCRDCustomResourceDefinitionoperator自定义资源pytorchjobtfjobmpijobmxjobmxnetsparkjobsparkapplicationworkflowargo

平台架构 - Kubernetes 基础

rancher / kubernetes

CubeStudio 利用 Kubernetes 的优势:

  • 原生的环境隔离;
  • 集群化自动化管理;
  • 计算资源(CPU/GPU)自动调度;
  • 成熟的生态体系;
  • crd/operator 便捷的 api 方式管理。

机器环境配置好以后,就可以来部署 k8s 机器了。下面是 k8s 的一个架构:

k8s架构

CRD(自定义资源)

除了需要了解 k8s 官方资源(pod、service、sa、rbac、sts、deployment 等),还需要特别了解 k8s 的自定义资源 CustomResourceDefinition(简称 CRD)。CRD 在机器学习平台中使用非常频繁。下面列举平台用到的常用 CRD。

表中 group / version / plural / kind 已对照后端代码 myapp/config.pyCRD_INFO(约 config.py:1148)核实。平台实际通过该配置直接对接 k8s 集群创建/监听这些自定义资源。

Kubeflow 系(分布式训练)

资源类型(plural) group version kind 说明
pytorchjobs kubeflow.org v1 PyTorchJob pytorch 分布式训练
tfjobs kubeflow.org v1 TFJob tf 分布式训练
mpijobs kubeflow.org v1 MPIJob mpi 分布式训练
mxjobs kubeflow.org v1 MXJob mxnet 分布式训练
paddlejobs kubeflow.org v1 PaddleJob paddle 分布式训练
xgboostjobs xgboostjob.kubeflow.org v1alpha1 (未在 CRD_INFO 显式声明 kind) xgboost 分布式训练

⚠️ 已按代码纠正:原文将 mxnet 资源写为 mxnetjobs / kind MxnetJob,但 config.py:1211-1216 中实际为 plural mxjobs、kind MXJob、group kubeflow.org。 补充:config.pyCRD_INFO 还定义了 paddlejobs(kind PaddleJob)与 xgboostjobs(group xgboostjob.kubeflow.orgconfig.py:1170-1175),原文表中未列出。

Spark 系

资源类型(plural) group version kind 说明
sparkapplications sparkoperator.k8s.io v1beta2 SparkApplication spark 分布式任务

Argo 系(工作流)

资源类型(plural) group version kind 说明
workflows argoproj.io v1alpha1 Workflow argo 的 workflow(pipeline 底层)

Prometheus 系(监控)

以下为 prometheus-operator 上游标准 CRD,未在 CRD_INFO 中声明(平台不直接创建);kind 按 prometheus-operator 标准命名。

资源类型(plural) group kind 说明
alertmanagers monitoring.coreos.com Alertmanager prometheus 监控 k8s 的报警机制
prometheuses monitoring.coreos.com Prometheus prometheus 部署实例
prometheusrules monitoring.coreos.com PrometheusRule prometheus 拉取/告警规则配置
servicemonitors monitoring.coreos.com ServiceMonitor prometheus 拉取某个服务下所有 pod 的指标

Istio 系(流量代理)

资源类型(plural) group version kind 说明
gateways networking.istio.io - Gateway istio 网关
virtualservices networking.istio.io v1alpha3 VirtualService istio 虚拟服务(config.py:1183

Volcano 系(批调度)

资源类型(plural) group version kind 说明
jobs batch.volcano.sh v1alpha1 Job volcano 批处理任务(vcjob)
queues scheduling.volcano.sh v1beta1 Queue 批优先级队列

⚠️ 已按代码纠正:原文将 volcano jobs 的 kind 误写为 Gateway,实际 kind 为 Job(见 config.py:1190-1196vcjobinstall/kubernetes/volcano/demo.yaml:1-2apiVersion: batch.volcano.sh/v1alpha1 / kind: Job)。podgroup/queue 使用 scheduling.volcano.sh/v1beta1install/kubernetes/volcano/volcano-podgroup.yaml)。

scheduler(调度过滤打分)

k8s 的调度包含很多方面:节点选择、亲和度、污点,还有过滤打分的环节。CubeStudio 中使用到的调度机制如下:

调度机制

调度策略配置文件为仓库中的 install/kubernetes/scheduler-policy-config.json(部署相关说明见 02-部署安装)。其核心是一组打分插件(priorities),关键项包括:

  • SelectorSpreadPriorityInterPodAffinityPriorityNodeAffinityPriorityTaintTolerationPriorityImageLocalityPriorityBalancedResourceAllocation(各权重 1);
  • RequestedToCapacityRatioPriority(权重 1,按 cpu/memory 的利用率打分,利用率 0 得 10 分、100 得 0 分,鼓励均匀分散);
  • NodePreferAvoidPodsPriority(权重 10000)。

主要使用场景:在不同 pipeline 的任务同时发起时,希望每台机器都能被均匀使用,而不是过度集中在其中数台服务器上。

如果在 rancher 中使用,还需要将该文件挂载到调度器中。

coredns(内网 DNS)

内网部署时,pod 中常会用到内网域名,往往需要在 pod 配置内网的 dns 解析服务器。配置方式:修改 kube-system 命名空间的对应 configmap(coredns),然后重启 coredns。参考配置文件为仓库中的 install/kubernetes/rancher/coredns.yaml(部署相关说明见 02-部署安装)。

该配置通过 coredns 的 hosts 插件把镜像仓库、apt/pip 源、modelscope 等域名指向内网镜像地址,并可为 oa.com 等结尾的域名单独配置 dns 代理(forward)。

最后更新 2026-07-04完整文档以官方仓库为准:GitHub Wiki