混合调度

容器实例 BCI

  • 产品定价
  • 功能发布记录
  • 操作指南(旧)
    • 创建容器组
  • 产品描述
    • 产品特性
    • 使用限制
    • 核心概念
    • 什么是BCI?
  • BCI服务等级协议SLA
    • BCI服务等级协议SLA
  • API参考
    • 通用说明
    • 附录
    • 服务域名
    • 公共请求头与响应头
    • 错误码
    • 概述
    • 实例相关接口
      • 批量删除实例
      • 查询实例列表
      • 创建实例
      • 删除实例
      • 查询实例详情
    • 镜像缓存相关接口
      • 创建镜像缓存
      • 查询镜像缓存列表
      • 批量删除镜像缓存
  • 操作指南
    • 通过BCI控制台和API使用BCI
      • 多用户访问控制
      • 运维
        • 使用coredump分析实例程序异常
      • 网络
        • 连接公网
      • 监控
        • 查看实例监控指标
      • 镜像
        • 使用CCR镜像仓库
        • 使用第三方镜像仓库
        • 镜像缓存
          • 管理镜像缓存
          • 镜像缓存概述
      • 存储
        • 挂载CFS数据卷
        • 挂载EmptyDir数据卷
        • 挂载ConfigMap数据卷
      • 容器配置
        • 设置容器启动命令和参数
      • 通过控制台使用BCI
        • 连接BCI实例
        • 删除BCI实例
        • 创建BCI实例
        • 查看BCI实例的详情和事件
      • BCI Pod
        • BCI Pod生命周期
        • BCI Pod概述
      • 成本优化
        • 预留实例券
          • 购买预留实例券
          • 预留实例券与实例的匹配
          • 查看预留实例券使用明细
          • 查看可抵扣的实例
          • 预留实例券概述
    • 通过CCE使用BCI
      • 运维
        • 使用coredump分析实例程序异常
        • 常见问题
      • 网络
        • 配置BCI Pod所属安全组
        • 连接公网
        • 支持自定义DNSConfig
        • 通过Service访问BCI服务
        • 配置BCI Pod访问集群内Service
      • 监控
        • 查看实例监控指标
        • 通过VK获取实例监控指标
      • 镜像
        • 使用CCR镜像仓库
        • 使用第三方镜像仓库
        • 镜像缓存
      • 存储
        • 挂载容器标准输出日志
        • 挂载EmptyDir数据卷
        • 挂载CFS文件存储
        • 挂载ConfigMap数据卷
        • 挂载BOS数据卷
        • 挂载PFS并行文件存储
      • 对接BCI
        • 对接概述
        • 混合调度
        • 通过标签将Pod调度到VNode上运行
        • 将Pod调度到VNode
        • BCI自定义Condition
      • 容器配置
        • 设置容器时区
        • 容器生命周期回调
        • 在容器内获取元数据
        • 配置NTP服务
        • 强制终止Sidecar容器并忽略容器退出码
        • 使用探针对容器进行健康检查
        • 忽略Sidecar容器的NotReady状态
        • 设置容器终止消息
        • 设置容器启动命令和参数
      • 日志
        • BLS日志采集使用方式
      • BCI Pod
        • 指定vCPU和内存创建Pod
        • BCI Pod生命周期
        • BCI Pod概述
        • 自定义设置BCI Pod的hosts
        • 创建GPU实例
        • 配置资源规整时忽略特定容器
        • 设置BCI Pod的故障处理策略
        • 为BCI Pod绑定自定义标签
        • 自定义设置BCI Pod的最大Pending时长
        • BCI Pod Annotation
        • 配置bci-profile
        • 多可用区创建实例
      • 成本优化
        • 预留实例券
          • 购买预留实例券
          • 预留实例券与实例的匹配
          • 查看预留实例券使用明细
          • 查看可抵扣的实例
          • 预留实例券概述
    • 通过自建集群使用BCI
      • 运维
        • 使用coredump分析实例程序异常
      • 监控
        • 查看实例监控指标
        • 通过VK获取实例监控指标
      • 存储管理
        • 挂载EmptyDir数据卷
        • 挂载CFS文件存储
        • 挂载ConfigMap数据卷
        • 挂载PFS并行文件存储
      • 镜像管理
        • 使用CCR镜像仓库
        • 使用第三方镜像仓库
        • 使用镜像缓存
          • 查询镜像缓存
          • 镜像缓存概述
      • 对接BCI
        • 自建Kubernetes集群对接VNode
        • 对接概述
        • 混合调度
        • 通过标签将Pod调度到VNode上运行
        • 将Pod调度到VNode
        • BCI自定义condition
      • 容器配置
        • 设置容器时区
        • 容器生命周期回调
        • 在容器内获取元数据
        • 配置NTP服务
        • 强制终止Sidecar容器并忽略容器退出码
        • 使用探针对容器进行健康检查
        • 忽略Sidecar容器的NotReady状态
        • 设置容器终止消息
        • 设置容器启动命令和参数
      • 网络管理
        • 配置BCI Pod所属安全组
        • 连接公网
        • 支持自定义DNSConfig
        • 配置BCI Pod访问集群内Service
      • 预留实例券
        • 购买预留实例券
        • 预留实例券与实例的匹配
        • 查看预留实例券使用明细
        • 查看可抵扣的实例
        • 预留实例券概述
      • 日志
        • 采集日志到百度云BLS
        • bls日志采集使用方式
      • BCI Pod
        • 指定vCPU和内存创建Pod
        • BCI Pod生命周期
        • BCI Pod概述
        • 自定义设置BCI Pod的hosts
        • 创建GPU实例
        • 配置资源规整时忽略特定容器
        • 设置BCI Pod的故障处理策略
        • 为BCI Pod绑定自定义标签
        • 自定义设置BCI Pod的最大Pending时长
        • BCI Pod Annotation
        • 多可用区创建实例
  • SDK
    • Java-SDK
      • 异常处理
      • 版本变更记录
      • 初始化
      • 安装SDK工具包
      • 概述
      • 实例相关
        • 批量删除实例
        • 查询实例列表
        • 创建实例
        • 删除实例
        • 查询实例详情
    • Go-SDK
      • 异常处理
      • BCI实例
      • 初始化
      • 安装SDK工具包
      • 概述
所有文档
menu
没有找到结果,请重新输入

容器实例 BCI

  • 产品定价
  • 功能发布记录
  • 操作指南(旧)
    • 创建容器组
  • 产品描述
    • 产品特性
    • 使用限制
    • 核心概念
    • 什么是BCI?
  • BCI服务等级协议SLA
    • BCI服务等级协议SLA
  • API参考
    • 通用说明
    • 附录
    • 服务域名
    • 公共请求头与响应头
    • 错误码
    • 概述
    • 实例相关接口
      • 批量删除实例
      • 查询实例列表
      • 创建实例
      • 删除实例
      • 查询实例详情
    • 镜像缓存相关接口
      • 创建镜像缓存
      • 查询镜像缓存列表
      • 批量删除镜像缓存
  • 操作指南
    • 通过BCI控制台和API使用BCI
      • 多用户访问控制
      • 运维
        • 使用coredump分析实例程序异常
      • 网络
        • 连接公网
      • 监控
        • 查看实例监控指标
      • 镜像
        • 使用CCR镜像仓库
        • 使用第三方镜像仓库
        • 镜像缓存
          • 管理镜像缓存
          • 镜像缓存概述
      • 存储
        • 挂载CFS数据卷
        • 挂载EmptyDir数据卷
        • 挂载ConfigMap数据卷
      • 容器配置
        • 设置容器启动命令和参数
      • 通过控制台使用BCI
        • 连接BCI实例
        • 删除BCI实例
        • 创建BCI实例
        • 查看BCI实例的详情和事件
      • BCI Pod
        • BCI Pod生命周期
        • BCI Pod概述
      • 成本优化
        • 预留实例券
          • 购买预留实例券
          • 预留实例券与实例的匹配
          • 查看预留实例券使用明细
          • 查看可抵扣的实例
          • 预留实例券概述
    • 通过CCE使用BCI
      • 运维
        • 使用coredump分析实例程序异常
        • 常见问题
      • 网络
        • 配置BCI Pod所属安全组
        • 连接公网
        • 支持自定义DNSConfig
        • 通过Service访问BCI服务
        • 配置BCI Pod访问集群内Service
      • 监控
        • 查看实例监控指标
        • 通过VK获取实例监控指标
      • 镜像
        • 使用CCR镜像仓库
        • 使用第三方镜像仓库
        • 镜像缓存
      • 存储
        • 挂载容器标准输出日志
        • 挂载EmptyDir数据卷
        • 挂载CFS文件存储
        • 挂载ConfigMap数据卷
        • 挂载BOS数据卷
        • 挂载PFS并行文件存储
      • 对接BCI
        • 对接概述
        • 混合调度
        • 通过标签将Pod调度到VNode上运行
        • 将Pod调度到VNode
        • BCI自定义Condition
      • 容器配置
        • 设置容器时区
        • 容器生命周期回调
        • 在容器内获取元数据
        • 配置NTP服务
        • 强制终止Sidecar容器并忽略容器退出码
        • 使用探针对容器进行健康检查
        • 忽略Sidecar容器的NotReady状态
        • 设置容器终止消息
        • 设置容器启动命令和参数
      • 日志
        • BLS日志采集使用方式
      • BCI Pod
        • 指定vCPU和内存创建Pod
        • BCI Pod生命周期
        • BCI Pod概述
        • 自定义设置BCI Pod的hosts
        • 创建GPU实例
        • 配置资源规整时忽略特定容器
        • 设置BCI Pod的故障处理策略
        • 为BCI Pod绑定自定义标签
        • 自定义设置BCI Pod的最大Pending时长
        • BCI Pod Annotation
        • 配置bci-profile
        • 多可用区创建实例
      • 成本优化
        • 预留实例券
          • 购买预留实例券
          • 预留实例券与实例的匹配
          • 查看预留实例券使用明细
          • 查看可抵扣的实例
          • 预留实例券概述
    • 通过自建集群使用BCI
      • 运维
        • 使用coredump分析实例程序异常
      • 监控
        • 查看实例监控指标
        • 通过VK获取实例监控指标
      • 存储管理
        • 挂载EmptyDir数据卷
        • 挂载CFS文件存储
        • 挂载ConfigMap数据卷
        • 挂载PFS并行文件存储
      • 镜像管理
        • 使用CCR镜像仓库
        • 使用第三方镜像仓库
        • 使用镜像缓存
          • 查询镜像缓存
          • 镜像缓存概述
      • 对接BCI
        • 自建Kubernetes集群对接VNode
        • 对接概述
        • 混合调度
        • 通过标签将Pod调度到VNode上运行
        • 将Pod调度到VNode
        • BCI自定义condition
      • 容器配置
        • 设置容器时区
        • 容器生命周期回调
        • 在容器内获取元数据
        • 配置NTP服务
        • 强制终止Sidecar容器并忽略容器退出码
        • 使用探针对容器进行健康检查
        • 忽略Sidecar容器的NotReady状态
        • 设置容器终止消息
        • 设置容器启动命令和参数
      • 网络管理
        • 配置BCI Pod所属安全组
        • 连接公网
        • 支持自定义DNSConfig
        • 配置BCI Pod访问集群内Service
      • 预留实例券
        • 购买预留实例券
        • 预留实例券与实例的匹配
        • 查看预留实例券使用明细
        • 查看可抵扣的实例
        • 预留实例券概述
      • 日志
        • 采集日志到百度云BLS
        • bls日志采集使用方式
      • BCI Pod
        • 指定vCPU和内存创建Pod
        • BCI Pod生命周期
        • BCI Pod概述
        • 自定义设置BCI Pod的hosts
        • 创建GPU实例
        • 配置资源规整时忽略特定容器
        • 设置BCI Pod的故障处理策略
        • 为BCI Pod绑定自定义标签
        • 自定义设置BCI Pod的最大Pending时长
        • BCI Pod Annotation
        • 多可用区创建实例
  • SDK
    • Java-SDK
      • 异常处理
      • 版本变更记录
      • 初始化
      • 安装SDK工具包
      • 概述
      • 实例相关
        • 批量删除实例
        • 查询实例列表
        • 创建实例
        • 删除实例
        • 查询实例详情
    • Go-SDK
      • 异常处理
      • BCI实例
      • 初始化
      • 安装SDK工具包
      • 概述
  • 文档中心
  • arrow
  • 容器实例BCI
  • arrow
  • 操作指南
  • arrow
  • 通过自建集群使用BCI
  • arrow
  • 对接BCI
  • arrow
  • 混合调度
本页目录
  • 1. 前提条件
  • 2. 插件安装
  • 3. 通过 ScheduleProfile 控制 pod在k8s集群和BCI之间的分布
  • 4. 约束和说明
  • 5. 使用样例
  • 6. 插件卸载

混合调度

更新时间:2025-08-20

以多云的方式混合部署的客户,稳态资源一般用自建/公有云K8S集群IDC,弹性资源用BCI容器实例, 混合调度插件负责无侵入协调客户负载在K8S集群节点及BCI分布。其主要场景是帮助客户将弹性负载弹性到云上容器实例。
基于该插件,支持如下3种调度策略:

策略 功能描述
bciOnly 工作负载容器强制调度到BCI
localOnly 工作负载强制调度到本地/公有云IDC
localprefer 当工作负载扩容时,当自建/公有云IDC有资源,优先调度到自建/公有云IDC节点;若自建/公有云IDC没资源,可调度到BCI。 当工作负载缩容时,根据配置,优先缩容缩容优先级高的BCI或IDC的实例。还可限制本地IDC/BCI最多可部署的实例数。

1. 前提条件

用户在所使用的 k8s 集群中,已部署 virtual kubelet,如何部署详见 https://cloud.baidu.com/doc/BCI/s/slbdd8fue

2. 插件安装

Plain Text
1# 1. 添加 bci helm repo
2helm repo add bci https://registry.baidubce.com/chartrepo/bci-online-public
3# 2. 安装 bci schedule profile 混合调度插件
4helm install schedule-profile --version 0.2 bci/schedule-profile

3. 通过 ScheduleProfile 控制 pod在k8s集群和BCI之间的分布

用户可以通过创建ScheduleProfile资源,控制pod在本地IDC和BCI之间的分布情况,ScheduleProfile 具体定义如下

Plain Text
1apiVersion: scheduling.bci.cloud.baidu.com/v1
2kind: ScheduleProfile
3metadata:
4  name: test-schedule-profile
5  namespace: default
6spec:
7  objectSelector:
8    namespace:
9      labels:
10        type: hybrid 
11    pod:
12      labels:
13        type: hybrid 
14  strategy: localprefer
15  distribution:
16    local: 
17      maxNum: 20
18      deletionPriority: 10
19    bci: 
20      deletionPriority: 20

参数说明:

  • objectSelector:控制调度策略覆盖的对象范围。当设置 namespace labels 时,匹配 labels 的所有 namespace 中的 pod,在该调度策略覆盖范围。当设置 pod labels 时,匹配 labels 的所有 pod,在该调度策略覆盖范围。

    • 当 namespace 或者 pod 的 labels 中有多个条目时,对应 namespace 或者 pod 需同时匹配所有 label,才在该调度策略覆盖范围;仅匹配单个 label 不在该调度策略覆盖范围。e.g.
    Plain Text
    1objectSelector:
    2  namespace:
    3    labels:
    4      type: hybrid 
    5      exp_enabled: false
    6 此时,同时包含 type: hybrid 和 exp_enabled: false 的 namespace 中的 pod 在调度策略覆盖范围
    • namespace 和 pod 的 labels 同时存在时,匹配 namespace labels 的 namespace 中的 pod 及 匹配 pod labels 的所有 pod 都在该调度策略覆盖范围。
    • 当且仅当一个pod只对应一个ScheduleProfile时,这个pod在其调度策略覆盖范围内。若一个 pod 同时匹配多个 ScheduleProfile 或不匹配任何 ScheduleProfile,则这个 pod 不受任何 ScheduleProfile 影响。若需要通过多个 ScheduleProfile 管理不同的工作负载,建议通过配置 pod labels 进行区分,规避工作负载同时匹配多个 ScheduleProfile 的风险。
  • strategy:调度策略选择,目前支持 localprefer/bciOnly/localOnly三种。
  • distribution:仅localprefer策略可设置该字段。

    • local 描述本地IDC的部署策略,maxNum 限制本地IDC最多可部署的pod数目;deletionPriority 的作用是,当deployment缩容时,部署在本地IDC的pod被删除的优先级,值越大,越容易被删除。
    • bci 描述bci的部署策略,maxNum 限制bci最多可部署的pod数目,任何时刻都不会被打破;deletionPriority 的作用是,当deployment缩容时,部署在bci的pod被删除的优先级,值越大,越容易被删除。
    • bci 和 local 中的 maxNum 不能同时设置,maxNum取值范围 [0~int32],0为不限制;deletionPriority取值范围[-100, 100]。

4. 约束和说明

  • localprefer策略本地自建IDC和BCI的最大部署pod数(maxNum)不能同时设置。
  • 可以调整ScheduleProfile的覆盖范围(objectSelector),但是要注意,ScheduleProfile对存量已调度pod无影响,比如调大ScheduleProfile的覆盖范围后,新纳入覆盖范围的pod的删除优先级不会发生变化。
  • deletionPriority 仅对 1.22 版本以上的 k8s 集群有效。若集群版本低于 1.22,工作负载缩容时,随机选择实例删除。
  • 在deployment滚动升级场景下,推荐配置尽可能小的maxSurge值(如直接配置为0),避免出现升级时限制maxNum的区域实际部署数少于maxNum的现象。
  • Pod只能关联一个ScheduleProfile,如果一个Pod的labels或所属namespace的labels存在于多个ScheduleProfile中,系统不会对该Pod做任何操作,效果类似于Pod没有关联的ScheduleProfile。
  • ScheduleProfile的增删,可能导致Pod所属的ScheduleProfile变化,进而打破MaxNum等策略的限制。
  • 若用户负载中明确指定了 nodeName,其关联的 pod 不受 ScheduleProfile 限制,可能打破 MaxNum 等策略的限制。
  • 为了避免混合调度影响系统组件,对于需要开启混合调度的 namespace,必须打上开启混合调度的标签“hybrid-schedule = enabled”

5. 使用样例

使用profile配置管理集群内pod,通过labelSelector类方式关联profile和pod,并配置关联pod的分配策略,实现pod在自建/公有云K8S集群IDC和云上BCI的分配或数量限制。
本地突发负载弹性上容器实例场景
当工作负载扩容,本地资源不足或者达到设置的最大值时,将实例溢出到云端BCI容器实例,限制本地最多创建30个实例。工作负载缩容时,优先释放云端BCI容器实例。工作负载缩容时,优先释放云端实例。
为避免影响k8s系统组件,对需要开启混合调度功能的 namespace 打上 label,以 default namespace 为例
注:此处仅仅只是在某个名字空间开启混合调度功能,如果想让整个名字空间都被某个调度策略覆盖(受某个调度策略管理),仍然需要在 ScheduleProfile 的 objectSelector 中配置。

(1)对需要开启混合调度功能的 namespace 打上开启混合调度功能标签“hybrid-schedule=enabled”

Plain Text
1kubectl label namespace default hybrid-schedule=enabled

(2)配置 ScheduleProfile

Plain Text
1apiVersion: scheduling.bci.cloud.baidu.com/v1
2kind: ScheduleProfile
3metadata:
4  name: burst-to-cloud
5  namespace: default
6spec:
7  objectSelector:
8    pod:
9      labels:
10        type: hybrid
11  strategy: localprefer
12  distribution:
13    local: 
14      maxNum: 3
15      deletionPriority: 10
16    bci: 
17      deletionPriority: 20

(3) 提交工作负载,以下为一个工作负载样例

Plain Text
1kind: Deployment
2apiVersion: apps/v1
3metadata:
4  name: nginx
5spec:
6  replicas: 10
7  selector:
8    matchLabels:
9      app: nginx
10  template:
11    metadata:
12      labels:
13        app: nginx
14        type: hybrid
15    spec:
16      containers:
17        - name: container-1
18          image: nginx:latest
19          imagePullPolicy: IfNotPresent
20      imagePullSecrets:
21        - name: default-secret

本地强制负载弹性到容器实例场景
将工作负载强制调度到BCI容器实例时,可使用bciOnly策略。

(1)对需要开启混合调度功能的 namespace 打上开启混合调度功能标签“hybrid-schedule=enabled”

Plain Text
1kubectl label namespace default hybrid-schedule=enabled

(2)配置 ScheduleProfile

Plain Text
1apiVersion: scheduling.bci.cloud.baidu.com/v1
2kind: ScheduleProfile
3metadata:
4  name: burst-to-cloud
5  namespace: default
6spec:
7  objectSelector:
8    pod:
9      labels:
10        type: hybrid
11  strategy: bciOnly

6. 插件卸载

Plain Text
1helm uninstall schedule-profile

上一篇
对接概述
下一篇
通过标签将Pod调度到VNode上运行