CCE 动态调度插件说明

容器引擎 CCE

  • 功能发布记录
  • 产品描述
    • 介绍
    • 优势
    • 使用限制
    • 应用场景
    • 核心概念
    • 特性
  • 开发指南
    • EFK日志采集系统部署指南
    • 创建LoadBalancer类型的Service
    • Prometheus监控系统部署指南
    • kubectl管理配置
    • 在CCE集群中使用-Network-Policy
  • 常用工具
    • 视图命令行场景示例
  • 产品公告
    • CCE 新版集群管理发布公告
    • CCE 控制台升级公告
    • Kubernetes 版本发布说明
      • CCE发布Kubernetes 1.18版本说明
      • CCE发布Kubernetes 1.30版本说明
      • CCE Kubernetes 版本更新说明
      • CCE发布Kubernetes 1.22版本说明
      • CCE发布Kubernetes 1.20版本说明
      • CCE发布Kubernetes 1.28版本说明
      • CCE发布Kubernetes 1.24版本说明
      • CCE发布Kubernetes 1.26版本说明
    • 安全漏洞修复公告
      • 漏洞CVE-2020-14386修复公告
      • 修复漏洞CVE-2021-30465公告
      • 漏洞CVE-2019-5736修复公告
      • 漏洞CVE-2025-1097、CVE-2025-1098等修复公告
      • 关于 runc 的安全问题(CVE-2024-21626)影响声明
  • 快速入门
    • 快速部署nginx应用
    • 使用CCE容器引擎流程概述
  • 典型实践
    • CCE集群网络说明及规划
    • CCE典型实践之容器网络模式选择
    • Pod异常问题排查
    • 通过 CCE Ingress 实现虚机和容器服务的统一接入
    • CCE集群使用Jenkins持续发布
    • CCE-访问公网实践
    • Linux系统配置常用参数说明
    • 用户使用自定义 CNI 插件方法
    • CCE典型实践之Guestbook搭建
    • 使用KMS对etcd数据加密
    • 添加CGroup V2节点
    • CCE容器运行时选择
    • CCE使用检查清单
    • VPC-ENI模式集群访问公网实践
    • 利用 Velero 实现将应用跨云迁移到 百度CCE
    • 使用 CNI 配置容器内网络参数
    • CCE Resource Recommender 用户文档
    • CCE集群中使用私有镜像实践
    • 云原生AI
      • 使用 CCE AITraining Operator 实现弹性容错训练
      • 部署 TensorFlow Serving 推理服务
      • GPU虚拟化之隔离性最优型的最佳实践
  • 操作指南
    • 多用户访问控制
    • 使用须知
    • 命名空间管理
      • 设置资源配额
      • 设置资源限制
      • 命名空间基本操作
    • 弹性伸缩
      • 使用 cce-autoscaling-placeholder 实现秒级弹性伸缩
      • CCE 集群节点自动伸缩
      • 容器定时水平伸缩(CronHPA)
      • 容器水平伸缩(HPA)
    • 存储管理
      • 使用云盘CDS
      • 使用并行文件存储PFS
      • 使用对象存储BOS
      • 使用并行文件存储PFS L2
      • 使用本地存储
      • 使用数据湖存储加速工具RapidFS
      • 使用文件存储CFS
      • 概述
    • 节点管理
      • 移出节点
      • kubelet容器监控只读端口风险提示
      • 管理污点
      • 设置GPU显存共享
      • 添加节点
      • 自定义Kubelet参数
      • 设置节点封锁
      • 节点排水
      • 管理节点标签
    • 组件管理
      • CCE CSI BOS Plugin 说明
      • Kube Scheduler 说明文档
      • CCE CSI PFS L2 Plugin
      • CCE NodeLocal DNSCache 说明
      • CCE Ingress NGINX Controller 说明
      • CCE RDMA Device Plugin 说明
      • CCE Node Problem Detector 说明
      • CCE Credential Controller 说明
      • Kube Controller Manager 说明
      • CCE Ingress Controller 说明
      • CCE GPU Manager 说明
      • CCE Backup Controller 说明
      • CCE QoS Agent 说明
      • CCE Descheduler 说明
      • 组件概述
      • CCE Image Accelerate 说明
      • CCE Network Plugin说明
      • Kube ApiServer 说明
      • CCE Log Operator 说明
      • CoreDNS 说明
      • CCE NPU Manager 说明
      • CCE AI Job Scheduler 说明
      • CCE LB Controller 说明
      • CCE P2P Accelerator 说明
      • CCE_Hybrid_Manager说明
      • CCE CSI PFS Plugin 说明
      • CCE Deep Learning Frameworks Operator 说明
      • CCE Node Remedier 说明
      • CCE CSI CDS Plugin 说明
      • CCE Ascend Mindx DL说明
      • CCE Calico Felix 说明
      • CCE Virtual Kubelet组件
      • CCE Fluid说明
      • CCE Onepilot 说明
      • CCE CronHPA Controller 说明
      • CCE 动态调度插件说明
    • 云原生AI
      • 云原生AI概述
      • GPU虚拟化
        • MPS 最佳实践&注意事项
        • GPU独占和共享说明
        • GPU在离线混部使用说明
        • GPU虚拟化适配表
        • 单GPU容器共享多卡使用说明
        • 共享GPU场景下的镜像构建注意事项
        • 关闭节点显存共享功能注意事项
      • 队列管理
        • 逻辑队列和物理队列使用说明
        • 修改队列
        • 删除队列
        • 新建队列
      • 任务管理
        • 基于 NCCL的RDMA分布式训练示例
        • 新建AITraining任务
        • 新建PaddlePaddle任务
        • 删除任务
        • 查看任务信息
        • 新建Mxnet任务
        • 新建TensorFlow任务
        • 新建Pytorch任务
      • 数据集管理
        • 删除数据集
        • 操作数据集
        • 查看数据集
        • 新建数据集
      • AI监控大盘
        • 接入监控实例并开启采集任务
        • NVIDIA芯片资源观测
          • AI Job Scheduler组件
          • GPUManager组件
          • GPU资源池总览
          • GPU节点资源
          • GPU工作负载资源
        • 昇腾芯片资源观测
          • 昇腾节点资源
          • 昇腾资源池总览
          • 昇腾工作负载资源
      • AI 加速套件
        • 使用AIAK-Inference 加速推理业务
        • 使用AIAK-Training Pytorch版
        • AIAK 简介
        • 使用 AIAK-Training 部署分布式训练任务
    • Helm管理
      • Helm模板
      • Helm实例
    • 应用管理
      • 部署
      • 保密字典
      • 服务
      • 配置字典
      • 容器组
      • 概述
    • 镜像仓库
      • 使用容器镜像构建服务
      • 镜像仓库基本操作
    • Serverless集群
      • 在Serverless集群中使用Service
      • 产品概述
      • 创建Serverless集群
    • 工作负载
      • 设置工作负载自动水平伸缩
      • Statefulset管理
      • 使用私有镜像创建工作负载
      • Job管理
      • 查看容器组
      • CronJob管理
      • Daemonset管理
      • 免密拉取容器镜像
      • Deployment管理
    • 节点组管理
      • 节点组管理
      • 节点组介绍
      • 升级节点组
      • 添加外部已有节点
      • 自定义节点组 Kubelet 配置
      • 添加备选机型
      • 节点组节点故障检测自愈
      • 配置扩缩容策略
    • 监控日志
      • 使用Prometheus监控集群
      • CCE 事件中心
      • 集群审计仪表盘
      • CCE 集群异常事件报警
      • Java应用监控
      • 集群服务画像
      • 日志管理
      • 集群审计
      • 日志中心
        • 在容器引擎控制台配置采集规则
        • 查看集群控制面日志
        • 日志概述
        • 查看业务日志
        • 使用CRD配置采集规则
    • 网络管理
      • CCE 集群内容器访问集群外服务
      • 容器网段空间耗尽如何继续扩容(VPC-ENI模式)
      • 容器网段空间耗尽如何继续扩容(VPC网络模式)
      • CCE IP Masquerade Agent 用户指南
      • 创建VPC-ENI模式集群
      • 对等连接场景下容器流量转发配置
      • 使用Network Policy网络策略
      • CCE 支持 IPv4 和 IPv6 双栈网络
      • 在CCE集群中使用NetworkPolicy
      • 网络编排
        • 集群 Pod 子网拓扑分布(容器网络 v2)
        • 容器网络 QoS 管理
        • VPC-ENI指定子网分配IP(容器网络 v2)
      • 网络连通性
        • 容器网络通过 NAT 网关访问公网
      • 网络维护
        • CCE容器网络常见错误码对应表
      • DNS
        • DNS 原理概述
        • DNS 问题排查指南
        • CoreDNS 组件手动升级指南
    • 虚拟节点
      • 管理虚拟节点
      • 配置BCIPod
      • 配置bci-profile
    • 备份中心
      • 备份概述
      • 恢复管理
      • 备份仓库
      • 备份管理
    • 巡检与诊断
      • GPU运行环境检查
      • 集群巡检
      • 故障诊断
    • 流量接入
      • NGINX Ingress 使用配置参考
      • CCE基于nginx-ingress实现灰度发布
      • BLB Ingress Annotation说明
      • 通过CCE使用K8S_Ingress
      • 通过YAML创建LoadBalancer_Service
      • 通过CCE使用K8S_Service
      • LoadBalancer Service Annotation说明
      • 使用直连 Pod 模式 LoadBalancer Service
      • Service复用已有负载均衡BLB
      • 通过YAML创建CCE_Ingress
      • 使用 NGINX Ingress
    • 权限管理
      • 配置集群OIDC认证
      • 配置IAM标签权限策略
      • 配置IAM自定义权限策略
      • 配置IAM预置权限策略
      • 权限概述
      • 配置预置RBAC权限策略
    • 配置管理
      • Secret管理
      • Configmap管理
    • 集群管理
      • 集群快照
      • CCE 安全组
      • 查看集群
      • 创建集群
      • 操作集群
      • 升级集群Kubernetes版本
      • 通过kubectl连接集群
      • 托管集群使用说明
      • CCE 支持 GPUSharing 集群
      • CCE节点资源预留说明
      • CCE 节点 CDS 扩容
  • 服务等级协议SLA
    • CCE服务等级协议SLA(V1.0)
  • Solution-Fabric
    • Fabric解决方案
  • API参考
    • 通用说明
    • 公共头和错误返回
    • 概述
  • 常见问题
    • windows下使用kubectl
    • 自动扩缩容常见问题
    • 通过kubectl创建简单的服务
    • 业务应用如何使用负载均衡?
    • 常见问题总览
    • 集群管理常见问题
  • API_V2参考
    • 通用说明
    • Instance相关接口
    • 附录
    • Autoscaler相关接口
    • 组件管理相关接口
    • 套餐适配相关接口
    • Task相关接口
    • 公共头和错误返回
    • Network相关接口
    • 服务域名
    • Cluster相关接口
    • Kubeconfig相关接口
    • InstanceGroup相关接口
    • RBAC相关接口
    • 概述
  • 产品定价
    • 产品定价
  • Solution-Xchain
    • 超级链解决方案
  • SDK
    • Go-SDK
      • 节点组管理
      • 节点管理
      • 集群管理
      • 初始化
      • 安装SDK工具包
      • 概述
所有文档
menu
没有找到结果,请重新输入

容器引擎 CCE

  • 功能发布记录
  • 产品描述
    • 介绍
    • 优势
    • 使用限制
    • 应用场景
    • 核心概念
    • 特性
  • 开发指南
    • EFK日志采集系统部署指南
    • 创建LoadBalancer类型的Service
    • Prometheus监控系统部署指南
    • kubectl管理配置
    • 在CCE集群中使用-Network-Policy
  • 常用工具
    • 视图命令行场景示例
  • 产品公告
    • CCE 新版集群管理发布公告
    • CCE 控制台升级公告
    • Kubernetes 版本发布说明
      • CCE发布Kubernetes 1.18版本说明
      • CCE发布Kubernetes 1.30版本说明
      • CCE Kubernetes 版本更新说明
      • CCE发布Kubernetes 1.22版本说明
      • CCE发布Kubernetes 1.20版本说明
      • CCE发布Kubernetes 1.28版本说明
      • CCE发布Kubernetes 1.24版本说明
      • CCE发布Kubernetes 1.26版本说明
    • 安全漏洞修复公告
      • 漏洞CVE-2020-14386修复公告
      • 修复漏洞CVE-2021-30465公告
      • 漏洞CVE-2019-5736修复公告
      • 漏洞CVE-2025-1097、CVE-2025-1098等修复公告
      • 关于 runc 的安全问题(CVE-2024-21626)影响声明
  • 快速入门
    • 快速部署nginx应用
    • 使用CCE容器引擎流程概述
  • 典型实践
    • CCE集群网络说明及规划
    • CCE典型实践之容器网络模式选择
    • Pod异常问题排查
    • 通过 CCE Ingress 实现虚机和容器服务的统一接入
    • CCE集群使用Jenkins持续发布
    • CCE-访问公网实践
    • Linux系统配置常用参数说明
    • 用户使用自定义 CNI 插件方法
    • CCE典型实践之Guestbook搭建
    • 使用KMS对etcd数据加密
    • 添加CGroup V2节点
    • CCE容器运行时选择
    • CCE使用检查清单
    • VPC-ENI模式集群访问公网实践
    • 利用 Velero 实现将应用跨云迁移到 百度CCE
    • 使用 CNI 配置容器内网络参数
    • CCE Resource Recommender 用户文档
    • CCE集群中使用私有镜像实践
    • 云原生AI
      • 使用 CCE AITraining Operator 实现弹性容错训练
      • 部署 TensorFlow Serving 推理服务
      • GPU虚拟化之隔离性最优型的最佳实践
  • 操作指南
    • 多用户访问控制
    • 使用须知
    • 命名空间管理
      • 设置资源配额
      • 设置资源限制
      • 命名空间基本操作
    • 弹性伸缩
      • 使用 cce-autoscaling-placeholder 实现秒级弹性伸缩
      • CCE 集群节点自动伸缩
      • 容器定时水平伸缩(CronHPA)
      • 容器水平伸缩(HPA)
    • 存储管理
      • 使用云盘CDS
      • 使用并行文件存储PFS
      • 使用对象存储BOS
      • 使用并行文件存储PFS L2
      • 使用本地存储
      • 使用数据湖存储加速工具RapidFS
      • 使用文件存储CFS
      • 概述
    • 节点管理
      • 移出节点
      • kubelet容器监控只读端口风险提示
      • 管理污点
      • 设置GPU显存共享
      • 添加节点
      • 自定义Kubelet参数
      • 设置节点封锁
      • 节点排水
      • 管理节点标签
    • 组件管理
      • CCE CSI BOS Plugin 说明
      • Kube Scheduler 说明文档
      • CCE CSI PFS L2 Plugin
      • CCE NodeLocal DNSCache 说明
      • CCE Ingress NGINX Controller 说明
      • CCE RDMA Device Plugin 说明
      • CCE Node Problem Detector 说明
      • CCE Credential Controller 说明
      • Kube Controller Manager 说明
      • CCE Ingress Controller 说明
      • CCE GPU Manager 说明
      • CCE Backup Controller 说明
      • CCE QoS Agent 说明
      • CCE Descheduler 说明
      • 组件概述
      • CCE Image Accelerate 说明
      • CCE Network Plugin说明
      • Kube ApiServer 说明
      • CCE Log Operator 说明
      • CoreDNS 说明
      • CCE NPU Manager 说明
      • CCE AI Job Scheduler 说明
      • CCE LB Controller 说明
      • CCE P2P Accelerator 说明
      • CCE_Hybrid_Manager说明
      • CCE CSI PFS Plugin 说明
      • CCE Deep Learning Frameworks Operator 说明
      • CCE Node Remedier 说明
      • CCE CSI CDS Plugin 说明
      • CCE Ascend Mindx DL说明
      • CCE Calico Felix 说明
      • CCE Virtual Kubelet组件
      • CCE Fluid说明
      • CCE Onepilot 说明
      • CCE CronHPA Controller 说明
      • CCE 动态调度插件说明
    • 云原生AI
      • 云原生AI概述
      • GPU虚拟化
        • MPS 最佳实践&注意事项
        • GPU独占和共享说明
        • GPU在离线混部使用说明
        • GPU虚拟化适配表
        • 单GPU容器共享多卡使用说明
        • 共享GPU场景下的镜像构建注意事项
        • 关闭节点显存共享功能注意事项
      • 队列管理
        • 逻辑队列和物理队列使用说明
        • 修改队列
        • 删除队列
        • 新建队列
      • 任务管理
        • 基于 NCCL的RDMA分布式训练示例
        • 新建AITraining任务
        • 新建PaddlePaddle任务
        • 删除任务
        • 查看任务信息
        • 新建Mxnet任务
        • 新建TensorFlow任务
        • 新建Pytorch任务
      • 数据集管理
        • 删除数据集
        • 操作数据集
        • 查看数据集
        • 新建数据集
      • AI监控大盘
        • 接入监控实例并开启采集任务
        • NVIDIA芯片资源观测
          • AI Job Scheduler组件
          • GPUManager组件
          • GPU资源池总览
          • GPU节点资源
          • GPU工作负载资源
        • 昇腾芯片资源观测
          • 昇腾节点资源
          • 昇腾资源池总览
          • 昇腾工作负载资源
      • AI 加速套件
        • 使用AIAK-Inference 加速推理业务
        • 使用AIAK-Training Pytorch版
        • AIAK 简介
        • 使用 AIAK-Training 部署分布式训练任务
    • Helm管理
      • Helm模板
      • Helm实例
    • 应用管理
      • 部署
      • 保密字典
      • 服务
      • 配置字典
      • 容器组
      • 概述
    • 镜像仓库
      • 使用容器镜像构建服务
      • 镜像仓库基本操作
    • Serverless集群
      • 在Serverless集群中使用Service
      • 产品概述
      • 创建Serverless集群
    • 工作负载
      • 设置工作负载自动水平伸缩
      • Statefulset管理
      • 使用私有镜像创建工作负载
      • Job管理
      • 查看容器组
      • CronJob管理
      • Daemonset管理
      • 免密拉取容器镜像
      • Deployment管理
    • 节点组管理
      • 节点组管理
      • 节点组介绍
      • 升级节点组
      • 添加外部已有节点
      • 自定义节点组 Kubelet 配置
      • 添加备选机型
      • 节点组节点故障检测自愈
      • 配置扩缩容策略
    • 监控日志
      • 使用Prometheus监控集群
      • CCE 事件中心
      • 集群审计仪表盘
      • CCE 集群异常事件报警
      • Java应用监控
      • 集群服务画像
      • 日志管理
      • 集群审计
      • 日志中心
        • 在容器引擎控制台配置采集规则
        • 查看集群控制面日志
        • 日志概述
        • 查看业务日志
        • 使用CRD配置采集规则
    • 网络管理
      • CCE 集群内容器访问集群外服务
      • 容器网段空间耗尽如何继续扩容(VPC-ENI模式)
      • 容器网段空间耗尽如何继续扩容(VPC网络模式)
      • CCE IP Masquerade Agent 用户指南
      • 创建VPC-ENI模式集群
      • 对等连接场景下容器流量转发配置
      • 使用Network Policy网络策略
      • CCE 支持 IPv4 和 IPv6 双栈网络
      • 在CCE集群中使用NetworkPolicy
      • 网络编排
        • 集群 Pod 子网拓扑分布(容器网络 v2)
        • 容器网络 QoS 管理
        • VPC-ENI指定子网分配IP(容器网络 v2)
      • 网络连通性
        • 容器网络通过 NAT 网关访问公网
      • 网络维护
        • CCE容器网络常见错误码对应表
      • DNS
        • DNS 原理概述
        • DNS 问题排查指南
        • CoreDNS 组件手动升级指南
    • 虚拟节点
      • 管理虚拟节点
      • 配置BCIPod
      • 配置bci-profile
    • 备份中心
      • 备份概述
      • 恢复管理
      • 备份仓库
      • 备份管理
    • 巡检与诊断
      • GPU运行环境检查
      • 集群巡检
      • 故障诊断
    • 流量接入
      • NGINX Ingress 使用配置参考
      • CCE基于nginx-ingress实现灰度发布
      • BLB Ingress Annotation说明
      • 通过CCE使用K8S_Ingress
      • 通过YAML创建LoadBalancer_Service
      • 通过CCE使用K8S_Service
      • LoadBalancer Service Annotation说明
      • 使用直连 Pod 模式 LoadBalancer Service
      • Service复用已有负载均衡BLB
      • 通过YAML创建CCE_Ingress
      • 使用 NGINX Ingress
    • 权限管理
      • 配置集群OIDC认证
      • 配置IAM标签权限策略
      • 配置IAM自定义权限策略
      • 配置IAM预置权限策略
      • 权限概述
      • 配置预置RBAC权限策略
    • 配置管理
      • Secret管理
      • Configmap管理
    • 集群管理
      • 集群快照
      • CCE 安全组
      • 查看集群
      • 创建集群
      • 操作集群
      • 升级集群Kubernetes版本
      • 通过kubectl连接集群
      • 托管集群使用说明
      • CCE 支持 GPUSharing 集群
      • CCE节点资源预留说明
      • CCE 节点 CDS 扩容
  • 服务等级协议SLA
    • CCE服务等级协议SLA(V1.0)
  • Solution-Fabric
    • Fabric解决方案
  • API参考
    • 通用说明
    • 公共头和错误返回
    • 概述
  • 常见问题
    • windows下使用kubectl
    • 自动扩缩容常见问题
    • 通过kubectl创建简单的服务
    • 业务应用如何使用负载均衡?
    • 常见问题总览
    • 集群管理常见问题
  • API_V2参考
    • 通用说明
    • Instance相关接口
    • 附录
    • Autoscaler相关接口
    • 组件管理相关接口
    • 套餐适配相关接口
    • Task相关接口
    • 公共头和错误返回
    • Network相关接口
    • 服务域名
    • Cluster相关接口
    • Kubeconfig相关接口
    • InstanceGroup相关接口
    • RBAC相关接口
    • 概述
  • 产品定价
    • 产品定价
  • Solution-Xchain
    • 超级链解决方案
  • SDK
    • Go-SDK
      • 节点组管理
      • 节点管理
      • 集群管理
      • 初始化
      • 安装SDK工具包
      • 概述
  • 文档中心
  • arrow
  • 容器引擎CCE
  • arrow
  • 操作指南
  • arrow
  • 组件管理
  • arrow
  • CCE 动态调度插件说明
本页目录
  • 组件介绍
  • 功能介绍
  • 使用场景
  • 限制说明
  • 安装组件
  • 依赖部署
  • 配置 Prometheus 采集规则
  • Helm 安装 CCE Dynamic Scheduler
  • 操作步骤
  • 使用案例
  • 1. 热点规避的真实负载调度策略:
  • 2. 基于真实负载的调度策略:

CCE 动态调度插件说明

更新时间:2025-08-21

组件介绍

CCE Dynamic Scheduler 是基于 Kubernetes 原生 Kube-scheduler Extender 机制实现的动态调度器插件,可基于节点 CPU/Memory 真实利用率进行 Pod 动态调度。在容器服务 CCE 集群中安装插件后,该插件利用 scheduler extender 机制向 Kube-Scheduler 注册 Filter、Prioritize 钩子,来干预默认调度器的调度行为,有效避免原生调度器基于 Request 和 Limit 调度机制带来的节点负载不均问题。该组件需要借助于 Prometheus 监控组件及相应的预聚合规则设置才能正常运行。因此,您可以参照本文的 依赖部署 部分进行操作,以免遇到插件不能正常工作的问题。

功能介绍

Kubernetes 自带的调度器 kube-scheduler 的作用是将新出现的 Pod 绑定到某一个最佳的节点。为了实现这一功能,调度器会需要进行一系列的筛选和打分(预选和优选策略),进行一次性的调度。然而,这种调度存在局限:不具备根据 Node 当前和过去一段时间的真实负载情况进行相关调度的决策,因此可能出现调度不合理的情况。 社区版本调度器中提供的节点利用率相关的策略(如 LowNodeUtilization、HighNodeUtilization)是利用 Pod 的 Reqeust 和 Limit 数据,而不是节点的真实利用率,如:集群内部分节点的剩余可调度资源较多(根据节点上运行的 Pod 的 Reqeust 和 Limit 计算出的值),但真实负载却比较高,而另外节点的剩余可调度资源比较少但真实负载却比较低,此时 Kube-scheduler 会优先将 Pod 调度到剩余资源比较多的节点上(根据 LeastRequestedPriority 策略)。

CCE Dynamic Scheduler 新增了 “基于节点真实负载” 的动态调度策略,用户在集群中安装该组件后,组件会根据从 Prometheus 采集的节点指标和用户设置的节点负载阈值对 Pod 实现动态调度。

使用场景

集群资源动态变化:

  • 集群节点资源利用率时刻发生改变,需要 CCE Dynamic Scheduler 进行动态调度

限制说明

  • 集群版本在 1.18.9 及以上, 仅支持独立集群
  • 集群已经通过 Prometheus 实现指标采集
  • 如果需要升级 Kubernetes master 版本,master 版本升级会重置 master 上所有组件的配置,从而影响到 Dynamic Scheduler 插件作为 Scheduler Extender 的配置,因此 Dynamic Scheduler 插件需要卸载后再重新安装

安装组件

依赖部署

CCE Dynamic Scheduler 组件依赖于 Node 当前和过去一段时间的真实负载情况来进行动态调度,需通过 Prometheus 等监控组件获取系统 Node 真实负载信息。在使用 CCE Dynamic Scheduler 组件之前,您需要完成 Prometheus 监控配置。

配置 Prometheus 采集规则

  1. 使用自建 Prometheus 作为监控数据源的情况下,用户需要自行部署两个组件,可参考下面组件官方文档完成部署:
  • NodeExporter
  • Prometheus
  1. 在完成组件部署后,用户需要在 Prometheus 添加对 cAdvisor 和 NodeExporter 的监控指标采任务以及指标聚合规则的配置,具体配置可参考:
YAML
1crape_configs:
2  - job_name: "kubernetes-cadvisor"
3    # Default to scraping over https. If required, just disable this or change to
4    # `http`.
5    scheme: https
6    
7    # Starting Kubernetes 1.7.3 the cAdvisor metrics are under /metrics/cadvisor.
8    # Kubernetes CIS Benchmark recommends against enabling the insecure HTTP
9    # servers of Kubernetes, therefore the cAdvisor metrics on the secure handler
10    # are used.
11    metrics_path: /metrics/cadvisor
12    
13    # This TLS & authorization config is used to connect to the actual scrape
14    # endpoints for cluster components. This is separate to discovery auth
15    # configuration because discovery & scraping are two separate concerns in
16    # Prometheus. The discovery auth config is automatic if Prometheus runs inside
17    # the cluster. Otherwise, more config options have to be provided within the
18    # <kubernetes_sd_config>.
19    tls_config:
20      ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
21      # If your node certificates are self-signed or use a different CA to the
22      # master CA, then disable certificate verification below. Note that
23      # certificate verification is an integral part of a secure infrastructure
24      # so this should only be disabled in a controlled environment. You can
25      # disable certificate verification by uncommenting the line below.
26      #
27      insecure_skip_verify: true
28    authorization:
29      credentials_file: /var/run/secrets/kubernetes.io/serviceaccount/token
30    
31    kubernetes_sd_configs:
32      - role: node
33    
34    relabel_configs:
35      - action: labelmap
36        regex: __meta_kubernetes_node_label_(.+)
37 
38  - job_name: 'node-exporter'
39      kubernetes_sd_configs:
40        - role: pod
41      relabel_configs:
42      - source_labels: [__meta_kubernetes_pod_name]
43        regex: 'node-exporter-(.+)'
44        action: keep
  1. 在使用自建 Prometheus 的情况下,配置指标聚合规则和使用托管集群类似,区别在于规则中不需要考虑 clusterID 维度,该维度由托管 Prometheus 添加。因此,聚合规则可参考:

    该规则实现了对 CCE Dynamic Scheduler 依赖的 machine_cpu_usage_5m和machine_memory_usage_5m等指标的自动汇聚计算。

YAML
1spec:
2  groups:
3    - name: machine_cpu_mem_usage_active
4      interval: 30s
5      rules:
6        - record: machine_memory_usage_active
7          expr: 100*(1-node_memory_MemAvailable_bytes/node_memory_MemTotal_bytes)
8    - name: machine_memory_usage_1m
9      interval: 1m
10      rules:
11        - record: machine_memory_usage_5m
12          expr: 'avg_over_time(machine_memory_usage_active[5m])'
13    - name: machine_cpu_usage_1m
14      interval: 1m
15      rules:
16        - record: machine_cpu_usage_5m
17          expr: >-
18            100 - (avg by (instance)
19            (irate(node_cpu_seconds_total{mode="idle"}[5m])) * 100)

Helm 安装 CCE Dynamic Scheduler

  1. 登录百度智能云官网,并进入管理控制台。
  2. 选择“产品服务 > 云原生 > 容器引擎 CCE”,单击进入容器引擎管理控制台。
  3. 单击左侧导航栏中的 Helm > Helm 模版。
  4. 在 Helm 模版 页面中,单击 百度智能云模版 进入模版管理页面。
  5. 在模版管理页面中选择模版名称 cce-dynamic-scheduler,然后单击 安装。
  6. 在 安装模版 页面中完成相关配置填写,点击 确定 按钮完成组件的安装。
  7. 登陆 Master Node,配置 Kube-Scheduler 启动项,使组件生效。

操作步骤

  1. 用户需单击左侧导航栏中的 Helm > Helm 模版, 在 Helm 模版 页面中,单击 百度智能云模版 进入模版管理页面,找到组件 cce-dynamic-scheduler,然后单击 安装,流程如下图: image.png
  2. 在安装模版界面中,需填写【实例名称】、【部署集群】、【命名空间】、【Prometheus 地址】和【cpu/memory 阈值】,单机 确认 完成组件部署。 image (1).png
  3. 登陆 Master Node,配置 Kube-Scheduler 启动项
  • 输入命令 cd /etc/kubernetes/ && vim scheduler-extender.yaml ,创建 scheduler-extender.yaml ,scheduler-extender.yaml内容如下:
YAML
1apiVersion: kubescheduler.config.k8s.io/v1beta2
2kind: KubeSchedulerConfiguration
3clientConnection:
4  kubeconfig: "/etc/kubernetes/scheduler.conf"
5extenders:
6- urlPrefix: "http://dynamic-scheduler.svc/dynamic/extender" ## 实际 dynamic-scheduler的 svc 地址
7  filterVerb: "filter"
8  prioritizeVerb: "prioritize"
9  weight: 1
10  enableHTTPS: false
11  nodeCacheCapable: true
12  ignorable: true
  • 输入命令 cd manifests/ && vim kube-scheduler.yaml ,修改 Kube-Scheduler.yaml 的配置文件,添加启动参数 - --config=/etc/kubernetes/scheduler-extender.yaml ,Kube-Scheduler.yaml 内容如下:
YAML
1apiVersion: v1
2kind: Pod
3metadata:
4  annotations:
5    scheduler.alpha.kubernetes.io/critical-pod: ""
6  creationTimestamp: null
7  labels:
8    component: kube-scheduler
9    tier: control-plane
10  name: kube-scheduler
11  namespace: kube-system
12spec:
13  containers:
14    - command:
15        ## ...
16        - --config=/etc/kubernetes/scheduler-extender.yaml ## 修改kube-scheduler的配置文件,添加启动参数
17        

使用案例

1. 热点规避的真实负载调度策略:

描述:当节点超过安全水位时,新部署的pod不会调度到超过阈值的 node 节点

  1. 观察工作负载所在节点的负载情况

image1.png

  1. 部署其他服务进行调度
  2. 观察服务调度部署情况,发现部署的服务不会调度到 node-172.16.80.31 上

image3.png

  1. 查看组件日志

image4.png

  1. 预期结果
  • 负载超过阈值的 node 不会再部署其他服务,规避真实超过阈值的调度,调度结果符合预期,调度日志符合预期

2. 基于真实负载的调度策略:

描述:当节点超过安全水位时,新部署的pod会按照当前所有节点的真实负载最优的进行调度

  1. 观察工作负载所在节点的负载情况

1.png

  1. 部署其他服务进行调度,并观察调度日志,发现node-172.16.80.33真实负载最低,得分最高

2.png

  1. 观察服务调度部署情况,发现部署的服务调度到负载最低(得分最高)的节点node-172.16.80.33 上

3.png

  1. 预期结果
  • 负载超过阈值的node不会再部署其他服务,部署的服务会调度到真实负载最低的node-172.16.80.33上,调度结果符合预期

上一篇
CCE CronHPA Controller 说明
下一篇
云原生AI