详情页标题前

腾讯云容器服务DynamicScheduler 说明同尘科技

详情页1

温馨提示感谢您对腾讯云容器服务 TKE 的认可与信赖。为了提供更优质的服务和更强大的调度能力,我们计划于2023年11月30日下线扩展组件里的调度器 DynamicScheduler 和 DeScheduler。请注意,自下线日期起,您将无法安装这两个新组件。对于已经安装的组件,不会受到影响,但将无法进行更新。存量的 Dynamic Scheduler 调度器卸载方式请参见 组件卸载。调度器卸载后,对集群本身调度不会产生影响,会默认使用原生的 Kuberentes 调度器。为了减少这次变更对您的影响,我们推荐您使用腾讯云 TKE 原生节点专用调度器。这个调度器完全覆盖了 DynamicScheduler 和 DeScheduler 的功能,无需依赖 Prometheus 监控,提供更加便捷稳定的调度增强能力,并且支持节点虚拟放大能力让节点装箱率超过100%。我们对由此给您带来的不便表示歉意,并感谢您对我们产品的支持和理解。如果您在这个过程中遇到任何问题,或者需要我们的帮助,您可以咨询 在线客服 或 提交工单 来与我们联系。

简介

组件介绍

Dynamic Scheduler 是容器服务 TKE 基于 Kubernetes 原生 Kube-scheduler Extender 机制实现的动态调度器插件,可基于 Node 真实负载进行预选和优选。在 TKE 集群中安装该插件后,该插件将与 Kube-scheduler 协同生效,有效避免原生调度器基于 request 和 limit 调度机制带来的节点负载不均问题。
该组件依赖 Prometheus 监控组件以及相关规则配置,可参见本文 依赖部署 进行操作,避免遇到插件无法正常工作的情况。

部署在集群内的 Kubernetes 对象

Kubernetes 对象名称 类型 请求资源 所属 Namespace
node-annotator Deployment 每个实例 CPU:100m,Memory:100Mi ,共1个实例 kube-system
dynamic-scheduler Deployment 每个实例 CPU:400m,Memory:200Mi,共3个实例 kube-system
dynamic-scheduler Service kube-system
node-annotator ClusterRole kube-system
node-annotator ClusterRoleBinding kube-system
node-annotator ServiceAccount kube-system
dynamic-scheduler-policy ConfigMap kube-system
restart-kube-scheduler ConfigMap kube-system
probe-prometheus ConfigMap kube-system

应用场景

集群负载不均

Kubernetes 原生调度器大部分基于 Pod Request 资源进行调度,并不具备根据 Node 当前和过去一段时间的真实负载情况进行相关调度的决策,因此可能会导致如下问题:
集群内部分节点的剩余可调度资源较多(根据节点上运行的 Pod 的 request 和 limit 计算出的值)但真实负载却比较高,而另外节点的剩余可调度资源比较少但真实负载却比较低,此时 Kube-scheduler 会优先将 Pod 调度到剩余资源比较多的节点上(根据 LeastRequestedPriority 策略)。如下图所示,Kube-Scheduler 会将 Pod 调度到 Node2 上,但明显调度到 Node1(真实负载水位更低)是更优的选择。

腾讯云容器服务DynamicScheduler 说明同尘科技



防止调度热点

为防止低负载的节点被持续调度 Pod,Dynamic Scheduler 支持设置防调度热点策略(统计节点过去几分钟调度 Pod 的数量,并相应减小节点在优选阶段的评分)。
当前采取策略如下:如果节点在过去1分钟调度了超过2个 Pod,则优选评分减去1分。如果节点在过去5分钟调度了超过5个 Pod,则优选评分减去1分。

风险控制

该组件已对接 TKE 的监控告警体系。推荐您为集群开启事件持久化,以便更好的监控组件异常以及故障定位。该组件卸载后,只会删除动态调度器有关调度逻辑,不会对原生 Kube-Scheduler 的调度功能有任何影响。

限制条件

TKE 版本建议 ≥ v1.10.x如果需要升级 Kubernetes master 版本:对于托管集群无需再次设置本插件。对于独立集群,master 版本升级会重置 master 上所有组件的配置,从而影响到 Dynamic Scheduler 插件作为 Scheduler Extender 的配置,因此 Dynamic Scheduler 插件需要卸载后再重新安装。

组件原理

动态调度器基于 scheduler extender 扩展机制,从 Prometheus 监控数据中获取节点负载数据,开发基于节点实际负载的调度策略,在调度预选和优选阶段进行干预,优先将 Pod 调度到低负载节点上。该组件由 node-annotator 和 Dynamic-scheduler 构成。

node-annotator

node-annotator 组件负责定期从监控中拉取节点负载 metric,同步到节点的 annotation。如下图所示:注意删除组件后,node-annotator 生成的 annotation 并不会被自动清除。您可根据需要手动清除。

腾讯云容器服务DynamicScheduler 说明同尘科技



Dynamic-scheduler

Dynamic-scheduler 是一个 scheduler-extender,根据 node annotation 负载数据,在节点预选和优选中进行过滤和评分计算。

预选策略

为了避免 Pod 调度到高负载的 Node 上,需要先通过预选过滤部分高负载的 Node(其中过滤策略和比例可以动态配置,具体请参见本文 组件参数说明)。
如下图所示,Node2 过去5分钟的负载,Node3 过去1小时的负载均超过对应的阈值,因此不会参与接下来的优选阶段。

腾讯云容器服务DynamicScheduler 说明同尘科技



优选策略

同时为了使集群各节点的负载尽量均衡,Dynamic-scheduler 会根据 Node 负载数据进行打分,负载越低打分越高。
如下图所示,Node1 的打分最高将会被优先调度(其中打分策略和权重可以动态配置,具体请参见本文 组件参数说明)。

腾讯云容器服务DynamicScheduler 说明同尘科技



组件参数说明

Prometheus 数据查询地址

注意为确保组件可以拉取到所需的监控数据、调度策略生效,请按照 依赖部署 > Prometheus 规则配置步骤配置监控数据采集规则。预选和优选参数已设置默认值,如您无额外需求,可直接采用。如果使用自建 Prometheus,直接填入数据查询 URL(HTTP/HTTPS)即可。如果使用托管 Prometheus,选择托管实例 ID 即可,系统会自动解析实例对应的数据查询 URL。

预选参数

预选参数默认值 说明
5分钟平均 CPU 利用率阈值 节点过去5分钟平均 CPU 利用率超过设定阈值,不会调度 Pod 到该节点上。
1小时最大 CPU 利用率阈值 节点过去1小时最大 CPU 利用率超过设定阈值,不会调度 Pod 到该节点上。
5分钟平均内存利用率阈值 节点过去5分钟平均内存利用率超过设定阈值,不会调度 Pod 到该节点上。
1小时最大内存利用率阈值 节点过去1小时最大内存利用率超过设定阈值,不会调度 Pod 到该节点上。

优选参数

优选参数默认值 说明
5分钟平均 CPU 利用率权重 该权重越大,过去5分钟节点平均 CPU 利用率对节点的评分影响越大。
1小时最大 CPU 利用率权重 该权重越大,过去1小时节点最大 CPU 利用率对节点的评分影响越大。
1天最大 CPU 利用率权重 该权重越大,过去1天内节点最大 CPU 利用率对节点的评分影响越大。
5分钟平均内存利用率权重 该权重越大,过去5分钟节点平均内存利用率对节点的评分影响越大。
1小时最大内存利用率权重 该权重越大,过去1小时节点最大内存利用率对节点的评分影响越大。
1天最大内存利用率权重 该权重越大,过去1天内节点最大内存利用率对节点的评分影响越大。

操作步骤

依赖部署

Dynamic Scheduler 动态调度器依赖于 Node 当前和过去一段时间的真实负载情况来进行调度决策,需通过 Prometheus 等监控组件获取系统 Node 真实负载信息。在使用动态调度器之前,需要部署 Prometheus 等监控组件。在容器服务 TKE 中,您可按需选择采用自建的 Prometheus 监控服务或采用 TKE 推出的云原生监控。自建Prometheus监控服务Prometheus 监控服务

部署 node-exporter 和 prometheus

通过 node-exporter 实现对 Node 指标的监控,用户可以根据业务需求部署 node-exporter 和 prometheus。

聚合规则配置

在 node-exporter 获取节点监控数据后,需要通过 Prometheus 对原始的 node-exporter 采集数据进行聚合计算。为了获取动态调度器中需要的 cpu_usage_avg_5mcpu_usage_max_avg_1hcpu_usage_max_avg_1dmem_usage_avg_5mmem_usage_max _avg_1hmem_usage_max_avg_1d 等指标,需要在 Prometheus 的 rules 规则进行如下配置:

apiVersion: monitoring.coreos.com/v1kind: PrometheusRulemetadata:  name: example-recordspec:  groups:    - name: cpu_mem_usage_active      interval: 30s      rules:        - record: cpu_usage_active          expr: 100 - (avg by (instance) (irate(node_cpu_seconds_total{mode="idle"}[30s])) * 100)        - record: mem_usage_active          expr: 100*(1-node_memory_MemAvailable_bytes/node_memory_MemTotal_bytes)    - name: cpu-usage-5m      interval: 5m      rules:        - record: cpu_usage_max_avg_1h          expr: max_over_time(cpu_usage_avg_5m[1h])        - record: cpu_usage_max_avg_1d          expr: max_over_time(cpu_usage_avg_5m[1d])    - name: cpu-usage-1m      interval: 1m      rules:        - record: cpu_usage_avg_5m          expr: avg_over_time(cpu_usage_active[5m])    - name: mem-usage-5m      interval: 5m      rules:        - record: mem_usage_max_avg_1h          expr: max_over_time(mem_usage_avg_5m[1h])        - record: mem_usage_max_avg_1d          expr: max_over_time(mem_usage_avg_5m[1d])    - name: mem-usage-1m      interval: 1m      rules:        - record: mem_usage_avg_5m          expr: avg_over_time(mem_usage_active[5m])

Prometheus 文件配置

1. 上述定义了动态调度器所需要的指标计算的 rules,需要将 rules 配置到 Prometheus 中,参考一般的 Prometheus 配置文件。示例如下:

global:  evaluation_interval: 30s  scrape_interval: 30s  external_labels:rule_files:- /etc/prometheus/rules/*.yml # /etc/prometheus/rules/*.yml就是定义的rules文件

2. 将 rules 配置复制到一个文件(例如 dynamic-scheduler.yaml),文件放到上述 prometheus 容器的 /etc/prometheus/rules/ 目录下。3. 加载 Prometheus server,即可从 Prometheus 获取到动态调度器需要的指标。说明通常情况下,上述 Prometheus 配置文件和 rules 配置文件都是通过 configmap 存储,再挂载到 Prometheus server 容器,因此修改相应的 configmap 即可。1. 登录容器服务控制台,在左侧导航中选择 Prometheus 监控。2. 在 Prometheus 监控页面,单击新建,创建与 Cluster 处于同一 VPC 下的 Prometheus 实例,并 关联集群。如下图所示:

腾讯云容器服务DynamicScheduler 说明同尘科技

3. 与原生托管集群关联后,可以在用户集群查看到每个节点都已安装 node-exporter。如下图所示:

腾讯云容器服务DynamicScheduler 说明同尘科技

4. 设置 Prometheus 聚合规则。代码示例如下:

apiVersion: monitoring.coreos.com/v1kind: PrometheusRulemetadata:  name: example-recordspec:  groups:    - name: cpu_mem_usage_active      interval: 30s      rules:        - record: cpu_usage_active          expr: 100 - (avg by (instance) (irate(node_cpu_seconds_total{mode="idle"}[30s])) * 100)        - record: mem_usage_active          expr: 100*(1-node_memory_MemAvailable_bytes/node_memory_MemTotal_bytes)    - name: cpu-usage-5m      interval: 5m      rules:        - record: cpu_usage_max_avg_1h          expr: max_over_time(cpu_usage_avg_5m[1h])        - record: cpu_usage_max_avg_1d          expr: max_over_time(cpu_usage_avg_5m[1d])    - name: cpu-usage-1m      interval: 1m      rules:        - record: cpu_usage_avg_5m          expr: avg_over_time(cpu_usage_active[5m])    - name: mem-usage-5m      interval: 5m      rules:        - record: mem_usage_max_avg_1h          expr: max_over_time(mem_usage_avg_5m[1h])        - record: mem_usage_max_avg_1d          expr: max_over_time(mem_usage_avg_5m[1d])    - name: mem-usage-1m      interval: 1m      rules:        - record: mem_usage_avg_5m          expr: avg_over_time(mem_usage_active[5m])

安装组件

1. 登录 容器服务控制台,在左侧导航栏中选择集群。2. 在集群列表中,单击目标集群 ID,进入集群详情页。3. 选择左侧菜单栏中的组件管理,在组件管理页面单击新建。4.新建组件管理页面中勾选 DynamicScheduler(动态调度器插件)。5. 单击参数配置,按照 参数说明 填写组件所需参数。6. 单击完成即可创建组件。安装成功后,Dynamic Scheduler 即可正常运行,无需进行额外配置。
容器服务官网1折活动,限时活动,即将结束,速速收藏
同尘科技为腾讯云授权服务中心。
购买腾讯云产品享受折上折,更有现金返利。同意关联立享优惠

转转请注明出处:http://www.yunxiaoer.com/147628.html

(0)
上一篇 2023年12月9日 下午12:42
下一篇 2023年12月9日 下午12:43
详情页2

相关推荐

  • 腾讯云负载均衡配置 HTTPS 监听器

    您可以在负载均衡实例上添加一个 HTTPS 监听器转发来自客户端的 HTTPS 协议请求。HTTPS 协议适用于需要加密传输的 HTTP 应用。 前提条件 您需要 创建负载均衡实例。 操作步骤 步骤一:配置监听器 1. 登录 负载均衡控制台,在左侧导航栏单击实例管理。2. 在 CLB 实例列表页面左上角选择地域,在实例列表右侧的操作列中单击配置监听器。3. …

    2023年12月9日
  • 腾讯云对象存储媒体截图接口

    简介 本文档提供关于媒体截图接口的 API 概览和 SDK 示例代码。 API 操作名 操作描述 GetSnapshot 查询截图 用于查询媒体文件在某个时间的截图 注意 使用此接口前,请确保已打开官网控制台中数据处理下的媒体处理开关,否则会报错media bucket unbinded, bucket’s host is unavailable。详情请参见…

    腾讯云 2023年12月9日
  • 云服务器中的mysql数据库为什么会被清空掉。-云小二-阿里云

    云服务器中的mysql数据库为什么会被清空掉。我自己在学习一个项目,昨天登录还好好的,今天登上去发现数据库中我自己建的库和表都没了。为什么会发生这样的问题,我自己的ip和密码也没给过别人。 以下为热心网友提供的参考意见 云服务器中的MySQL数据库被清空的原因可能有多种。以下是一些可能的原因: 人为操作失误:可能是您在操作过程中不小心删除了数据库或表,或者有…

    阿里云 2023年12月5日
  • 阿里云RDS数据库Performance Agent-云淘科技

    Performance Agent是AliSQL提供的一种更加便捷的性能数据统计方案。通过MySQL插件的方式,实现MySQL实例内部各项性能数据的采集与统计。 背景信息 Performance Agent在information_schema系统库下新增了一张内存表PERF_STATISTICS,用于统计最近一段时间的性能数据,您可以直接查询该表获取相关指…

    2023年12月9日
  • 信息流广告,信息流部分建议宽度830px,只针对默认列表样式,顺序随机
  • 在阿里函数计算里上传ZIP包代码有SDK或者API能实现吗?-云小二-阿里云

    在阿里函数计算里上传ZIP包代码有SDK或者API能实现吗? 以下为热心网友提供的参考意见 阿里云CLI不支持直接通过CLI方式上传代码包。请将代码包在本地压缩成.zip包,预先上传到OSS的Bucket,然后在创建函数时,指定OSS的Bucket和Object名称。 默认条件下,阿里云CLI工具创建的OSS资源与函数计算资源在同一地域。 创建OSS Buc…

    阿里云 2023年12月13日

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信
本站为广大会员提供阿里云、腾讯云、华为云、百度云等一线大厂的购买,续费优惠,保证底价,买贵退差。