You need to enable JavaScript to run this app.
文档中心
容器服务

容器服务

复制全文
下载 pdf
调度管理
负载感知调度
复制全文
下载 pdf
负载感知调度
本文主要描述如何使用容器服务提供的负载感知调度能力,实现节点负载均衡的目标。​
功能概述​
负载感知调度是容器服务提供的基于节点真实负载,进行合理调度的策略。调度过程中,通过参考节点负载的历史统计,将 Pod 优先调度到负载较低的节点,实现节点负载均衡的目标,避免出现因单个节点负载过高而导致的应用程序或节点故障。​
​alt​​
前提条件​
  • 集群处于 运行中 状态,且集群中存在两个及以上节点需要均衡节点的负载情况。详细操作,请参见 新增节点。​
  • 集群 Kubernetes 版本需要满足如下要求,才能支持负载感知调度能力。详细操作,请参见 升级集群。​
使用方法​
步骤一:开启调度器的负载感知调度功能​
在集群中开启调度器的负载感知调度功能,支持通过 容器服务控制台 或调用 CreateAddon/UpdateAddonConfig API 接口开启该功能。​
  • 通过控制台开启​
  • 在满足条件的集群中,设置 scheduler-plugin 组件配置,开启 负载感知调度 能力。详细操作,请参见 scheduler-plugin 组件。​
  • ​
    参数​
    说明​
    生效范围​
    负载感知调度的生效范围。​
    • 仅选择 特定 Pod 时,按照本文操作方式,为指定的 Pod 配置负载感知调度 Annotation。​
    • 选择 全局 时,集群上的所有 Pod 默认使用负载感知调度,不需要进行额外配置。​
    说明​
    • 仅如下 Kubernetes 版本的集群中,才能看到 生效范围 参数配置:​
    • 集群中若从未开启过负载感知调度,首次开启时,默认全局生效。​
    高级配置​
    负载感知调度的节点资源相关配置,按实际需求自定义配置:​
    • 节点资源利用率阈值:自定义设置节点的 CPU 和 Memory(内存)使用率,负载感知调度按照该设定值对节点进行筛选。​
    • 节点打分资源权重:在负载感知调度插件根据资源利用率对节点进行打分时,不同资源维度对应的权重,取值范围为 1~10,权重越大得分越高。​
    ​
  • 通过 API 开启​
  • 调用 CreateAddon 接口,在满足条件的集群中安装 scheduler-plugin 组件,或者调用 UpdateAddonConfig 接口更新组件配置时,配置如下参数,开启负载感知调度:​
  • LoadAwareSchedulingEnabled 参数配置为 true。​
  • LoadAwareSchedulingConfig 参数下的 Scope 子参数配置为 pod。​
步骤二:为 Pod 添加启用负载感知调度的 Annotation​
通过在 Pod 中添加 Annotations 来标识该 Pod 是否基于节点的真实负载情况,开启负载感知调度。​
​
Annotation Key​
Annotation Value 示例值​
说明​
vke.volcengine.com/load-aware-enabled​
true​
是否开启负载感知调度。取值如下:​
  • true:开启。​
  • false:不开启。​
​
YAML 文件示例如下所示。​
​
apiVersion: v1​
kind: Pod​
metadata:​
annotations:​
vke.volcengine.com/load-aware-enabled: "true" # 是否开启负载感知调度。​
labels:​
app: load-aware-pod​
name: load-aware-pod # Pod 名称。​
namespace: default # Pod 所在命名空间。​
spec:​
containers:​
- name: hello-pod # 容器名称。​
image: nginx:latest # 容器镜像地址。​
ports:​
- containerPort: 8080 # 容器端口。​
​
使用示例​
本文以集群中存在 3 个节点(4 Core、16 GiB 规格)为例,对比使用负载感知调度前后的节点负载差异,介绍如何将业务 Pod 调度到负载较小的节点上,实现节点负载均衡的方法。​
未使用负载感知调度​
  1. 连接目标集群。详细操作,请参见 连接集群。​
  1. 创建工作负载的 YAML 文件。下文以创建 Deployment 为例,示例文件stress-test.yaml代码如下所示。​
  • ​
    apiVersion: apps/v1​
    kind: Deployment​
    metadata:​
    name: stress-test # Deployment 名称。​
    namespace: default # Deployment 所属命名空间。​
    labels:​
    app: stress-test​
    spec:​
    replicas: 2 # Pod 实例个数。​
    selector:​
    matchLabels:​
    app: stress-test​
    template:​
    metadata:​
    name: stress-test​
    labels:​
    app: stress-test​
    spec:​
    containers:​
    - args:​
    - '--vm'​
    - '3'​
    - '--vm-bytes'​
    - '1800M'​
    - '-c'​
    - '3'​
    - '--vm-hang'​
    - '10'​
    command:​
    - stress​
    image: polinux/stress​
    imagePullPolicy: Always​
    name: stress​
    resources:​
    limits:​
    cpu: '3'​
    memory: 6Gi​
    requests:​
    cpu: '3'​
    memory: 6Gi​
    restartPolicy: Always​
    ​
  1. 执行如下命令,创建工作负载。​
  • ​
    kubectl apply -f stress-test.yaml​
    ​
  1. 查看上一步创建的工作负载的 Pod 被调度到的节点。​
  • ​
    kubectl get pods -o wide​
    ​
  • 预期返回结果如下所示,表示 Pod 被调度到192.168.1.5和192.168.1.3节点上。​
  • ​alt​​
  1. 查看节点的资源使用情况。​
  • ​
    kubectl top nodes​
    ​
  • 预期返回结果如下所示,表示192.168.1.5和192.168.1.3节点是高负载节点。​
  • ​alt​​
使用负载感知调度​
上述结果表示节点的负载不均衡,期望后续将 Pod 尽量调度到192.168.1.4节点时,按如下说明,在业务 Pod 中添加 Annotations,开启负载感知调度。​
  1. 创建有 6 个 Pod 的工作负载并启用负载感知调度,每个 Pod 的容器申请 500 mCore CPU。​
  • ​
    apiVersion: apps/v1​
    kind: Deployment​
    metadata:​
    name: nginx # Deployment 名称。​
    namespace: default # Deployment 所属命名空间。​
    labels:​
    app: nginx​
    spec:​
    replicas: 6​
    selector:​
    matchLabels:​
    app: nginx​
    template:​
    metadata:​
    annotations:​
    vke.volcengine.com/load-aware-enabled: "true" # 开启负载感知调度。​
    name: nginx​
    labels:​
    app: nginx​
    spec:​
    containers:​
    - name: nginx-cantainer​
    image: nginx:latest # Pod 的容器镜像地址和 Tag。​
    resources:​
    limits:​
    cpu: 500m # 容器 CPU 上限。​
    requests:​
    cpu: 500m # 容器 CPU 请求。​
    ​
  1. 查看上一步创建的工作负载的 Pod 被调度到的节点。​
  • ​
    kubectl get pods -owide​
    ​
  • 预期返回结果如下所示,6 个 Pod 均被调度到192.168.1.4节点上。​
  • ​alt​​
​
最近更新时间:2025.12.05 17:52:16
这个页面对您有帮助吗?
有用
有用
无用
无用