计算
弹性云服务器 ECS
Flexus云服务
裸金属服务器 BMS
弹性伸缩 AS
镜像服务 IMS
专属主机 DeH
函数工作流 FunctionGraph
云手机服务器 CPH
Huawei Cloud EulerOS
网络
虚拟私有云 VPC
弹性公网IP EIP
虚拟专用网络 VPN
弹性负载均衡 ELB
NAT网关 NAT
云专线 DC
VPC终端节点 VPCEP
云连接 CC
企业路由器 ER
企业交换机 ESW
全球加速 GA
安全与合规
安全技术与应用
Web应用防火墙 WAF
企业主机安全 HSS
云防火墙 CFW
安全云脑 SecMaster
DDoS防护 AAD
数据加密服务 DEW
数据库安全服务 DBSS
云堡垒机 CBH
数据安全中心 DSC
云证书管理服务 CCM
边缘安全 EdgeSec
威胁检测服务 MTD
CDN与智能边缘
内容分发网络 CDN
CloudPond云服务
智能边缘云 IEC
迁移
主机迁移服务 SMS
对象存储迁移服务 OMS
云数据迁移 CDM
迁移中心 MGC
大数据
MapReduce服务 MRS
数据湖探索 DLI
表格存储服务 CloudTable
云搜索服务 CSS
数据接入服务 DIS
数据仓库服务 GaussDB(DWS)
数据治理中心 DataArts Studio
数据可视化 DLV
数据湖工厂 DLF
湖仓构建 LakeFormation
企业应用
云桌面 Workspace
应用与数据集成平台 ROMA Connect
云解析服务 DNS
专属云
专属计算集群 DCC
IoT物联网
IoT物联网
设备接入 IoTDA
智能边缘平台 IEF
用户服务
账号中心
费用中心
成本中心
资源中心
企业管理
工单管理
国际站常见问题
ICP备案
我的凭证
支持计划
客户运营能力
合作伙伴支持计划
专业服务
区块链
区块链服务 BCS
Web3节点引擎服务 NES
解决方案
SAP
高性能计算 HPC
视频
视频直播 Live
视频点播 VOD
媒体处理 MPC
实时音视频 SparkRTC
数字内容生产线 MetaStudio
存储
对象存储服务 OBS
云硬盘 EVS
云备份 CBR
存储容灾服务 SDRS
高性能弹性文件服务 SFS Turbo
弹性文件服务 SFS
云硬盘备份 VBS
云服务器备份 CSBS
数据快递服务 DES
专属分布式存储服务 DSS
容器
云容器引擎 CCE
容器镜像服务 SWR
应用服务网格 ASM
华为云UCS
云容器实例 CCI
管理与监管
云监控服务 CES
统一身份认证服务 IAM
资源编排服务 RFS
云审计服务 CTS
标签管理服务 TMS
云日志服务 LTS
配置审计 Config
资源访问管理 RAM
消息通知服务 SMN
应用运维管理 AOM
应用性能管理 APM
组织 Organizations
优化顾问 OA
IAM 身份中心
云运维中心 COC
资源治理中心 RGC
应用身份管理服务 OneAccess
数据库
云数据库 RDS
文档数据库服务 DDS
数据管理服务 DAS
数据复制服务 DRS
云数据库 GeminiDB
云数据库 GaussDB
分布式数据库中间件 DDM
数据库和应用迁移 UGO
云数据库 TaurusDB
人工智能
人脸识别服务 FRS
图引擎服务 GES
图像识别 Image
内容审核 Moderation
文字识别 OCR
AI开发平台ModelArts
图像搜索 ImageSearch
对话机器人服务 CBS
华为HiLens
视频智能分析服务 VIAS
语音交互服务 SIS
应用中间件
分布式缓存服务 DCS
API网关 APIG
微服务引擎 CSE
分布式消息服务Kafka版
分布式消息服务RabbitMQ版
分布式消息服务RocketMQ版
多活高可用服务 MAS
事件网格 EG
企业协同
华为云会议 Meeting
云通信
消息&短信 MSGSMS
云生态
合作伙伴中心
云商店
开发者工具
SDK开发指南
API签名指南
Terraform
华为云命令行工具服务 KooCLI
其他
产品价格详情
系统权限
管理控制台
客户关联华为云合作伙伴须知
消息中心
公共问题
开发与运维
应用管理与运维平台 ServiceStage
软件开发生产线 CodeArts
需求管理 CodeArts Req
部署 CodeArts Deploy
性能测试 CodeArts PerfTest
编译构建 CodeArts Build
流水线 CodeArts Pipeline
制品仓库 CodeArts Artifact
测试计划 CodeArts TestPlan
代码检查 CodeArts Check
代码托管 CodeArts Repo
云应用引擎 CAE
开天aPaaS
云消息服务 KooMessage
云手机服务 KooPhone
云空间服务 KooDrive

重调度(Descheduler)

更新时间:2024-01-04 GMT+08:00

集群中的调度是将pending状态的Pod分配到节点运行的过程,在CCE集群之中,Pod的调度依赖于集群中的调度器(kube-scheduler或者Volcano调度器)。调度器是通过一系列算法计算出Pod运行的最佳节点,但是Kubernetes集群环境是存在动态变化的,例如某一个节点需要维护,这个节点上的所有Pod会被驱逐到其他节点,但是当维护完成后,之前被驱逐的Pod并不会自动回到该节点上来,因为Pod一旦被绑定了节点是不会触发重新调度的。由于这些变化,集群在一段时间之后就可能会出现不均衡的状态。

为了解决上述问题,Volcano调度器可以根据设置的策略,驱逐不符合配置策略的Pod,让其重新进行调度,达到均衡集群负载、减少资源碎片化的目的。

重调度功能特性

负载感知重调度(LoadAware)

在K8s集群治理过程中,常常会因CPU、内存等高使用率状况而形成热点,既影响了当前节点上Pod的稳定运行,也会导致节点发生故障的几率的激增。为了应对集群节负载不均衡等问题,动态平衡各个节点之间的资源使用率,需要基于节点的相关监控指标,构建集群资源视图,在集群治理阶段,通过实时监控,在观测到节点资源率较高、节点故障、Pod 数量较多等情况时,可以自动干预,迁移资源使用率高的节点上的一些Pod到利用率低的节点上。

图1 LoadAware策略示意图

使用该插件时,highThresholds需要大于lowThresholds,否则重调度器无法启用。

  • 正常节点:资源利用率大于等于30%且小于等于80%的节点。此节点的负载水位区间是期望达到的合理区间范围。
  • 热点节点:资源利用率高于80%的节点。热点节点将驱逐一部分Pod,降低负载水位,使其不超过80%。重调度器会将热点节点上面的Pod调度到空闲节点上面。
  • 空闲节点:资源利用率低于30%的节点。

CPU和内存资源碎片率整理策略(HighNodeUtilization)

从分配率低的节点上驱逐Pod。这个策略必须与Volcano调度器的binpack策略或者kube-scheduler调度器的MostAllocated策略一起使用。阈值可以分为CPU和内存两种资源角度进行配置。

前提条件

  • 已创建v1.19.16及以上版本的集群,具体操作请参见购买集群
  • 集群中已安装1.11.5及以上版本的Volcano插件,具体操作请参见Volcano调度器

约束与限制

  • 重调度之后的Pod,需要调度器进行调度,重调度器并未进行任何对于Pod和节点的标记行为,所以被驱逐的Pod调度到节点的行为完全被调度器控制,存在驱逐之后,被驱逐的Pod调度到原来节点的可能性。
  • 重调度功能暂不支持Pod间存在反亲和性的场景。如果使用重调度功能驱逐某个Pod后,由于该Pod与其他已运行的Pod存在反亲和性,调度器仍可能将其调度回驱逐前的节点上。
  • 配置负载感知重调度(LoadAware)时,Volcano调度器需要同时开启负载感知调度;配置CPU和内存资源碎片率整理策略(HighNodeUtilization)时,Volcano调度器需要同时开启binpack调度策略。

配置负载感知重调度策略

配置负载感知重调度(LoadAware)时,Volcano调度器需要同时开启负载感知调度,示例步骤如下。

  1. 登录CCE控制台,单击集群名称进入集群,单击左侧导航栏的“插件中心”,在右侧找到Volcano调度器,单击“安装”“编辑”
  2. “参数配置”中修改高级配置,配置负载感知重调度策略,同时开启负载感知调度usage插件(该插件为Volcano开源能力,详情请参见usage)。

    {
      "colocation_enable": "",
      "default_scheduler_conf": {
        "actions": "allocate, backfill",
        "tiers": [
          {
            "plugins": [
              {
                "name": "priority"
              },
              {
                "enablePreemptable": false,
                "name": "gang"
              },
              {
                "name": "conformance"
              },
              {
                "name": "usage",
                "arguments": {
                  "usage.weight": 5,
                  "thresholds": {
                    "CPUUsageAvg.5m": 60,
                    "MEMUsageAvg.5m": 65
                  }
                }
              }
            ]
          },
          {
            "plugins": [
              {
                "enablePreemptable": false,
                "name": "drf"
              },
              {
                "name": "predicates"
              },
              {
                "name": "nodeorder"
              }
            ]
          },
          {
            "plugins": [
              {
                "name": "cce-gpu-topology-predicate"
              },
              {
                "name": "cce-gpu-topology-priority"
              },
              {
                "name": "cce-gpu"
              }
            ]
          },
          {
            "plugins": [
              {
                "name": "nodelocalvolume"
              },
              {
                "name": "nodeemptydirvolume"
              },
              {
                "name": "nodeCSIscheduling"
              },
              {
                "name": "networkresource"
              }
            ]
          }
        ]
      },
      "deschedulerPolicy": {
        "profiles": [
          {
            "name": "ProfileName",
            "pluginConfig": [
              {
                "args": {
                  "ignorePvcPods": true,
                  "nodeFit": true,
                  "priorityThreshold": {
                    "value": 100
                  }
                },
                "name": "DefaultEvictor"
              },
              {
                "args": {
                  "evictableNamespaces": {
                    "exclude": ["kube-system"]
                  },
                  "metrics": {
                  },
                  "targetThresholds": {
                    "cpu": 80,
                    "memory": 85
                  },
                  "thresholds": {
                    "cpu": 30,
                    "memory": 30
                  }
                },
                "name": "LoadAware"
              }
            ],
            "plugins": {
              "balance": {
                "enabled": ["LoadAware"]
              }
            }
          }
        ]
      },
      "descheduler_enable": "true",
      "deschedulingInterval": "10m"
    }
    表1 集群重调度策略关键参数

    参数

    说明

    descheduler_enable

    集群重调度策略开关。

    • true:启用集群重调度策略。
    • false:不启用集群重调度策略。

    deschedulingInterval

    重调度的周期。

    deschedulerPolicy

    集群重调度策略,详情请参见表2

    表2 deschedulerPolicy配置参数

    参数

    说明

    profiles.[].plugins.balance.enable.[]

    指定集群重调度策略类型。

    LoadAware:表示使用负载感知重调度策略。

    profiles.[].pluginConfig.[].name

    使用负载感知重调度策略时,会使用以下配置:

    • DefaultEvictor:默认驱逐策略。
    • LoadAware:负载感知重调度策略。

    profiles.[].pluginConfig.[].args

    集群重调度策略的具体配置。

    • 对于DefaultEvictor配置,配置参数如下:
      • ignorePvcPods:是否忽略挂载PVC的Pod,true表示忽略,false表示不忽略。该忽略动作未根据PVC类型(LocalPV/SFS/EVS等)进行区分。
      • nodeFit:是否重调度时是否考虑节点上存在的调度配置,例如节点亲和性、污点等。true表示考虑,false表示不考虑。
      • priorityThreshold:优先级设置。当Pod的优先级大于或者等于该值时,不会被驱逐。示例如下:
        {
          "value": 100
        }
    • 对于LoadAware配置,配置参数如下:
      • evictableNamespaces:驱逐策略的适用命名空间,默认范围设置为除kube-system命名空间。示例如下:
        {
          "exclude": ["kube-system"]
        }
      • metrics:监控数据采集方式,当前支持通过Prometheus 直接查询。
        Volcano 1.11.5至1.11.16版本推荐使用Prometheus 直接查询的方式获取监控数据,需填写prometheus server的地址信息,示例如下:
        {
          "address": "http://10.247.119.103:9090",
          "type": "prometheus"
        }
      • targetThresholds:节点驱逐Pod的阈值,当节点上高于此阈值时,上面的Pod会被驱逐。示例如下:
        {
          "cpu": 60,
          "memory": 65
        }
      • thresholds:节点承载Pod的阈值,当节点低于此阈值时,表示该节点可以承载被驱逐的Pod。示例如下:
        {
          "cpu": 30,
          "memory": 30
        }

  3. 完成以上配置后,单击“确定”。

配置资源碎片整理策略

配置CPU和内存资源碎片率整理策略(HighNodeUtilization)时,Volcano调度器需要同时开启binpack调度策略,示例步骤如下。

  1. 登录CCE控制台,单击集群名称进入集群,单击左侧导航栏的“插件中心”,在右侧找到Volcano调度器,单击“安装”“编辑”
  2. “参数配置”中修改高级配置,配置资源碎片整理策略。

    {
      "colocation_enable": "",
      "default_scheduler_conf": {
        "actions": "allocate, backfill",
        "tiers": [
          {
            "plugins": [
              {
                "name": "priority"
              },
              {
                "enablePreemptable": false,
                "name": "gang"
              },
              {
                "name": "conformance"
              },
              {
                "arguments": {
                  "binpack.weight": 5
                },
                "name": "binpack"
              }
            ]
          },
          {
            "plugins": [
              {
                "enablePreemptable": false,
                "name": "drf"
              },
              {
                "name": "predicates"
              },
              {
                "name": "nodeorder"
              }
            ]
          },
          {
            "plugins": [
              {
                "name": "cce-gpu-topology-predicate"
              },
              {
                "name": "cce-gpu-topology-priority"
              },
              {
                "name": "cce-gpu"
              }
            ]
          },
          {
            "plugins": [
              {
                "name": "nodelocalvolume"
              },
              {
                "name": "nodeemptydirvolume"
              },
              {
                "name": "nodeCSIscheduling"
              },
              {
                "name": "networkresource"
              }
            ]
          }
        ]
      },
      "deschedulerPolicy": {
        "profiles": [
          {
            "name": "ProfileName",
            "pluginConfig": [
              {
                "args": {
                  "ignorePvcPods": true,
                  "nodeFit": true,
                  "priorityThreshold": {
                    "value": 100
                  }
                },
                "name": "DefaultEvictor"
              },
              {
                "args": {
                  "evictableNamespaces": {
                    "exclude": ["kube-system"]
                  },
                  "thresholds": {
                    "cpu": 25,
                    "memory": 25
                  }
                },
                "name": "HighNodeUtilization"
              }
            ],
            "plugins": {
              "balance": {
                "enabled": ["HighNodeUtilization"]
              }
            }
          }
        ]
      },
      "descheduler_enable": "true",
      "deschedulingInterval": "10m"
    }
    表3 集群重调度策略关键参数

    参数

    说明

    descheduler_enable

    集群重调度策略开关。

    • true:启用集群重调度策略。
    • false:不启用集群重调度策略。

    deschedulingInterval

    重调度的周期。

    deschedulerPolicy

    集群重调度策略,详情请参见表4

    表4 deschedulerPolicy配置参数

    参数

    说明

    profiles.[].plugins.balance.enable.[]

    指定集群重调度策略类型。

    HighNodeUtilization:表示使用资源碎片整理策略。

    profiles.[].pluginConfig.[].name

    使用负载感知重调度策略时,会使用以下配置:

    • DefaultEvictor:默认驱逐策略。
    • HighNodeUtilization:资源碎片整理策略。

    profiles.[].pluginConfig.[].args

    集群重调度策略的具体配置。

    • 对于DefaultEvictor配置,配置参数如下:
      • ignorePvcPods:是否忽略挂载PVC的Pod,true表示忽略,false表示不忽略。
      • nodeFit:是否重调度时是否考虑节点上存在的调度配置,例如节点亲和性、污点等。true表示考虑,false表示不考虑。
      • priorityThreshold:优先级设置。当Pod的优先级大于或者等于该值时,不会被驱逐。示例如下:
        {
          "value": 100
        }
    • 对于HighNodeUtilization配置,配置参数如下:
      • evictableNamespaces:驱逐策略的适用命名空间,默认范围设置为除kube-system命名空间。示例如下:
        {
          "exclude": ["kube-system"]
        }
      • thresholds:节点驱逐Pod的阈值,当节点低于此阈值时,该节点上的Pod会被驱逐。示例如下:
        {
          "cpu": 25,
          "memory": 25
        }

  3. 完成以上配置后,单击“确定”。

使用案例

资源碎片整理策略(HighNodeUtilization)使用案例

  1. 查看集群之中的节点,发现存在部分分配率过低的节点。

  2. 编辑Volcano参数,开启重调度器,并设置CPU和内存的阈值为25。即表示节点的分配率小于25%时,该节点上的Pod会被驱逐。

  3. 设置该策略后,将192.168.44.152节点上的Pod迁移到节点192.168.54.65,达到碎片整理的目的。

常见问题

当输入参数错误时,会有报警事件,例如:输入的配置不符合阈值范围、输入的配置格式不正确。如下图所示,可以按照事件提示进行修改。

我们使用cookie来确保您的高速浏览体验。继续浏览本站,即表示您同意我们使用cookie。 详情

文档反馈

文档反馈

意见反馈

0/500

标记内容

同时提交标记内容