组件指南
目录
简介
Koordinator 是一个基于 QoS 的调度系统,通过增强 Kubernetes 集群的效率和可靠性来支持混合工作负载。本指南记录了每个组件的用途、架构、配置和运维要点。组件通过 Kubernetes API 服务器通信,并通过 ConfigMap 共享配置以实现协调式资源管理。
koord-manager
koord-manager 是 Koordinator 的控制平面,管理 CRD 和 webhook,同时通过 leader 选举协调各子系统。负责初始化控制器、webhook 和共享 informer 以处理集群事件。
关键配置选项:
- --enable-leader-election:启用高可用
- --metrics-addr:暴露监控指标
- --feature-gates:控制 alpha/beta 功能
- --config-namespace:指定配置命名空间
- Webhook 服务器:在 9876 端口运行,用于准入控制
组件交互关系:
koord-manager
  ├── Webhook Server (端口 9876)
  ├── Leader Election (高可用)
  ├── 与 koord-scheduler 协调
  └── 与 koordlet 协调
图表来源
章节来源
koord-scheduler
koord-scheduler 通过基于插件的架构扩展 Kubernetes 调度器,为混部工作负载提供高级能力。
配置使用 --config 标志指向 YAML 文件(通常为 koord-scheduler-config ConfigMap)。配置结构扩展了 Kubernetes 调度器配置模式,添加了 Koordinator 特定组件。
关键调度插件:
- LoadAwareScheduling:实时节点资源利用率
- NodeNUMAResource:NUMA 感知的 CPU 和内存分配
- Reservation:支持抢占的资源预留
- ElasticQuota:动态配额分配和驱逐
- Coscheduling:Pod 组的 Gang 调度
- DeviceShare:共享设备管理(GPU、RDMA、FPGA)
调度器配置层次结构:
Scheduler Configuration
├── Global Settings
│   └── InsecureServing
├── Plugin Configurations
│   ├── LoadAwareScheduling (负载感知调度)
│   ├── NodeNUMAResource (NUMA 资源管理)
│   ├── Reservation (资源预留)
│   ├── ElasticQuota (弹性配额)
│   ├── Coscheduling (协同调度)
│   └── DeviceShare (设备共享)
└── Framework Extensions
    └── ServicesEngine
图表来源
章节来源
koordlet
koordlet 作为守护进程运行在每个节点上,收集指标、强制执行 QoS 策略并管理运行时钩子。
配置使用 ConfigMap,包含以下关键设置:
- ConfigMap 名称和命名空间
- States informer 配置
- Metric cache 设置
- QoS manager 配置
- Runtime hook 配置
- 审计和预测设置
架构子系统:
- MetricCache:存储收集的指标,支持可插拔后端
- MetricsAdvisor:分析指标以提供优化建议
- QOSManager:强制执行 QoS 策略和资源分配
- RuntimeHooks:与容器运行时集成
- Prediction:提供资源使用预测
- StatesInformer:维护一致的 Pod 和节点状态视图
koordlet 守护进程组件结构:
核心组件及其职责:
- daemon: 主守护进程,包含以下子系统- MetricAdvisor: 指标分析器- Run(stopCh): 运行主循环
- HasSynced(): 检查同步状态
 
- StatesInformer: 状态通知器- Run(stopCh): 运行主循环
- HasSynced(): 检查同步状态
 
- MetricCache: 指标缓存- Run(stopCh): 运行主循环
 
- QOSManager: QoS 管理器- Run(stopCh): 运行主循环
 
- RuntimeHook: 运行时钩子- Run(stopCh): 运行主循环
 
- PredictServer: 预测服务器- Setup(): 设置依赖
- Run(stopCh): 运行主循环
 
- ResourceUpdateExecutor: 资源更新执行器- Run(stopCh): 运行主循环
 
- extensionControllers: 扩展控制器列表
 
- MetricAdvisor: 指标分析器
图表来源
章节来源
koord-descheduler
koord-descheduler 通过基于模块化、配置文件的架构来识别和驱逐 Pod,以提高资源利用率和集群平衡。
作为 Kubernetes 控制器管理器运行,包含:
- Descheduler Core:协调反调度策略
- Controller Manager:管理自定义资源的协调循环
- Profiles:定义启用的插件和配置
- Plugins:实现反调度策略(deschedule、balance、filter、evict)
- Informer Factory:维护集群资源的缓存视图
- Eviction Limiter:控制 Pod 驱逐速率以防止中断
koord-descheduler 架构组成:
koord-descheduler
├── Descheduler Core (核心调度器)
│   ├── Profiles (配置文件)
│   │   ├── Deschedule Plugins (驱逐插件)
│   │   ├── Balance Plugins (均衡插件)
│   │   ├── Filter Plugins (过滤插件)
│   │   └── Evict Plugins (驱逐执行插件)
│   ├── Eviction Limiter (驱逐限流器)
│   └── Informer Factory (资源监听工厂)
│       ├── Node Informer
│       ├── Pod Informer
│       └── Custom Resource Informers
└── Controller Manager (控制器管理器)
    ├── Migration Controller (迁移控制器)
    └── Drain Controller (排空控制器)
图表来源
章节来源
koord-device-daemon
koord-device-daemon 负责发现和标记节点上的异构设备(GPU、NPU 等),作为守护进程定期扫描并更新节点标签。
关键配置标志:
- --oneshot:单次执行模式
- --no-timestamp:禁用标签中的时间戳
- --sleep-interval:设备发现频率
- --prints-output-file:设备信息输出文件路径
架构组件:
- Resource Feature Discovery:发现和处理设备信息
- Prints Writer:输出设备信息
- Manager Map:不同硬件类型设备管理器的注册表
- Configuration:从文件、环境变量和 CLI 管理组件配置
koord-device-daemon 执行流程:
1. 启动 (Start)
   ↓
2. 加载配置 (Load Configuration)
   ↓
3. 创建输出器 (Create Printers)
   ↓
4. 生成设备信息 (Generate Prints)
   ↓
5. 输出设备信息 (Output Prints)
   ↓
6. 检查运行模式 (Check Oneshot Mode)
   ├─ 是 → 退出 (Exit)
   └─ 否 → 休眠等待 (Sleep Interval)
              ↓
           重新发现 (Rerun Discovery)
              ↓
           返回步骤 4
图表来源
章节来源
koord-runtime-proxy
koord-runtime-proxy 作为 kubelet 和容器运行时之间的中间件,拦截 CRI 调用以应用资源管理策略。
关键配置标志:
- --koord-runtimeproxy-endpoint:服务端点
- --remote-runtime-service-endpoint:后端运行时服务
- --backend-runtime-mode:容器引擎(Containerd 或 Docker)
- --runtime-hook-server-key/val:运行时钩子服务器标识
支持两种后端模式:
- Containerd:Containerd 运行时的 CRI 服务器
- Docker:Docker 运行时的 Docker 服务器
架构:
- Runtime Manager Server:运行时实现的抽象接口
- CRI Server/Docker Server:特定运行时的实现
- Dispatcher:将 CRI 调用路由到处理器
- Resource Executor:将资源策略应用于容器
koord-runtime-proxy 工作流程:
koord-runtime-proxy
├── Runtime Proxy Endpoint (代理端点)
├── Backend Runtime Mode (后端运行时模式)
│   ├── Containerd 模式
│   │   └── CRI Server
│   └── Docker 模式
│       └── Docker Server
└── Runtime Hook Server Key/Val (钩子服务器标识)
    └── Skip Hook Server Pods (跳过钩子服务器 Pod)
数据流:
拦截 CRI 调用 → 应用资源策略 → 转发到后端运行时
图表来源
章节来源
组件通信与集成
Koordinator 组件通过 Kubernetes API 服务器通信,并通过 ConfigMap 共享配置,采用控制平面/数据平面模式。
主要通信模式:
- API 服务器交互:所有组件监视资源、更新状态并创建自定义资源
- 共享配置:通过挂载为卷或通过 API 服务器访问的 ConfigMap
- Webhook 集成:koord-manager webhook 在资源创建/更新期间被调用
- 指标收集:koordlet 收集节点指标供调度器决策使用
- 事件传播:通过 API 服务器传播事件和状态更新
集成工作流:
- koord-manager 初始化控制器和 webhook
- koord-scheduler 注册到 Kubernetes 调度器框架
- koordlet 在每个节点启动并收集指标
- koord-device-daemon 发现并标记节点设备
- koord-runtime-proxy 拦截容器运行时调用
- 组件通过 API 服务器共享状态进行协调
组件通信时序图:
通信流程:
1. koord-manager → API Server
   - 监听 CRD 和 ConfigMaps
2. koord-scheduler → API Server
   - 注册为调度器
3. koordlet → API Server
   - 上报节点指标
4. koord-device-daemon → API Server
   - 更新节点设备标签
5. koord-runtime-proxy → API Server
   - 拦截 CRI 调用
6. API Server → koord-scheduler
   - 提供调度指标
7. koord-scheduler → API Server
   - 使用 QoS 策略调度 Pod
8. API Server → koordlet
   - 应用 QoS 策略到 Pod
图表来源
运维注意事项
有效的 Koordinator 运维需要关注配置、监控、故障排除和生命周期管理。
配置管理:配置通过挂载为卷或通过 API 服务器访问的 ConfigMap 管理。配置更改通常需要重启组件。
监控与指标:所有组件暴露 Prometheus 指标,包括:
- 组件健康和就绪状态
- API 服务器请求延迟和错误
- 资源利用率和效率
- 调度和反调度性能
- QoS 策略执行统计
常见问题:
- Webhook 超时:在大集群中增加超时设置
- 资源不足:调整 QoS 策略和限制
- 调度失败:验证节点标签和污点/容忍
- 指标收集:检查 koordlet 连接性和权限
- 设备发现:验证设备驱动和权限
生命周期管理:将组件作为标准 Kubernetes 工作负载管理,具有适当的资源、限制和探针。谨慎执行滚动更新,特别是 koord-manager webhook。
章节来源
性能与扩展
性能和可扩展性取决于集群规模、工作负载特征和配置。
koord-manager 扩展:小型/中型集群单副本即可。大型集群可能需要多副本。根据负载调整 webhook 超时。
koord-scheduler 性能:受启用的插件、策略复杂度和调度频率影响。优化插件配置并使用高效的 informer 缓存。
koordlet 资源使用:取决于指标收集频率、监控资源和 QoS 策略复杂度。根据需求调整收集间隔和保留期。
扩展指南:
- 监控组件资源并调整请求/限制
- 根据 API 服务器负载扩展 koord-manager
- 为工作负载模式优化调度器插件
- 调整指标收集频率
- 使用节点亲和性和污点进行组件放置
性能与扩展性配置流程:
集群部署流程:
1. 集群部署 (Cluster Deployment)
   ↓
2. 确定 koord-manager 副本数 (Determine Replicas)
   ├─ 小型集群 → 部署单副本 (Deploy Single Replica)
   └─ 大型集群 → 部署多副本 (Deploy Multiple Replicas)
   ↓
3. 配置 Webhook 设置 (Configure Webhook Settings)
   ↓
4. 设置 Webhook 超时 (Set Webhook Timeouts)
   ↓
5. 配置并发设置 (Configure Concurrency Settings)
   ↓
6. 配置请求队列 (Configure Request Queue)
   ↓
7. 配置重试策略 (Configure Retry Policy)
   ↓
8. 监控性能 (Monitor Performance)
   ↓
9. 调整配置 (Adjust Configuration as Needed)
   ↓
   返回步骤 3 (根据需要循环调整)
图表来源
安全与最佳实践
通过以下最佳实践安全部署 Koordinator:
RBAC 配置:为每个组件定义最小必需权限,遵循最小权限原则。RBAC 配置位于 config/rbac 目录。
网络安全:配置网络策略以限制组件通信。Webhook 服务器应仅对 API 服务器可访问。
密钥管理:将敏感配置存储在 Secret 而非 ConfigMap 中。妥善管理和轮换 TLS 证书。
生产最佳实践:
- 为组件使用专用命名空间
- 实施资源请求和限制
- 配置存活性和就绪性探针
- 为控制平面组件启用 leader 选举
- 定期更新到最新稳定版本
- 监控日志和指标
- 先在非生产环境测试配置更改
- 实施备份和恢复程序
安全注意事项:
- 定期审计组件权限
- 保持组件更新以修复安全问题
- 限制 webhook 超时值以防止 DoS
- 使用网络策略限制通信
- 实施适当的日志记录和监控
- 遵循 Kubernetes Pod 安全最佳实践
章节来源