平台架构 - Kubernetes 基础
rancher / kubernetes
CubeStudio 利用 Kubernetes 的优势:
- 原生的环境隔离;
- 集群化自动化管理;
- 计算资源(CPU/GPU)自动调度;
- 成熟的生态体系;
- crd/operator 便捷的 api 方式管理。
机器环境配置好以后,就可以来部署 k8s 机器了。下面是 k8s 的一个架构:

CRD(自定义资源)
除了需要了解 k8s 官方资源(pod、service、sa、rbac、sts、deployment 等),还需要特别了解 k8s 的自定义资源 CustomResourceDefinition(简称 CRD)。CRD 在机器学习平台中使用非常频繁。下面列举平台用到的常用 CRD。
表中 group / version / plural / kind 已对照后端代码
myapp/config.py的CRD_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/ kindMxnetJob,但config.py:1211-1216中实际为 pluralmxjobs、kindMXJob、groupkubeflow.org。 补充:config.py的CRD_INFO还定义了paddlejobs(kindPaddleJob)与xgboostjobs(groupxgboostjob.kubeflow.org,config.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-1196的vcjob与install/kubernetes/volcano/demo.yaml:1-2:apiVersion: batch.volcano.sh/v1alpha1/kind: Job)。podgroup/queue 使用scheduling.volcano.sh/v1beta1(install/kubernetes/volcano/volcano-podgroup.yaml)。
scheduler(调度过滤打分)
k8s 的调度包含很多方面:节点选择、亲和度、污点,还有过滤打分的环节。CubeStudio 中使用到的调度机制如下:

调度策略配置文件为仓库中的 install/kubernetes/scheduler-policy-config.json(部署相关说明见 02-部署安装)。其核心是一组打分插件(priorities),关键项包括:
SelectorSpreadPriority、InterPodAffinityPriority、NodeAffinityPriority、TaintTolerationPriority、ImageLocalityPriority、BalancedResourceAllocation(各权重 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)。