K8S调度不平衡问题分析过程和解决方案

不平衡问题排查

问题描述
1、业务部署大量pod(据反馈,基本为任务型进程)过程中,k8s node内存使用率表现不均衡,范围从80%到百分之几;
2、单个node内存使用率超过95%,仍未发生pod驱逐,存在node不可正常运维风险;
期望效果
尽量保持pod调度平衡;
node内存使用率达到一定阈值,开始触发pod驱逐

分析过程

原理依据

K8S调度涉及到亲和性、资源可用情况等因素,而本案例是可调度但是调度后造成节点内存使用率差距很大,也即pod分布(基于内存使用率)不平衡;
Kube-Scheduler作为控制面节点接触,负责pod如何绑定到node的逻辑执行,一般默认为default-scheduler,且支持插件化配置和开发;
Kubelet作为K8S Node Agent,实际执行着创建、销毁以及驱逐pod的逻辑,其中驱逐分为软驱逐和硬驱逐,参数名为

--evited-hard=memory.available<100Mi 
--evited-soft=memory.available<100Mi

其中memory.available设置了触发驱逐的阈值,也即大于等于此阈值则在当前node发生pod驱逐

案例分析

Pod分布不平衡(按内存使用率)

内存使用率范围(0%,85%),监控如下图:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

驱逐

未明确设定驱逐参数,如下图:
在这里插入图片描述

改进方案

Pod分布不平衡(按内存使用率)

由第二章分析可知,目前集群使用的调度器是default-scheduler,而该调度器不会直接监控节点的内存使用率,因此需要将节点的内存使用率加入调度逻辑(一般是算分阶段,进而影响最终排序),考虑到改动时间成本等因素(可参考第五章使用第三方调度等,单改动较大,风险也大),可以指定scheduler启动配置文件如下:

cat KubeSchedulerConfiguration.yaml

apiVersion: kubescheduler.config.k8s.io/v1beta2
kind: KubeSchedulerConfiguration
profiles:
  - schedulerName: default-scheduler
    plugins:
      score:
        enabled:
          - name: PodTopologySpread
          - name: NodeResourcesFit
    pluginConfig:
      - args:
          scoringStrategy:
            resources:
            - name: cpu
              weight: 1
            - name: memory
              weight: 10
            type: LeastAllocated
        name: NodeResourcesFit
      - name: PodTopologySpread
        args:
          defaultingType: "List"
          defaultConstraints:
          - maxSkew: 1
            topologyKey: kubernetes.io/hostname
            whenUnsatisfiable: ScheduleAnyway
          memoryWeight: 5  # 设置 memory 权重为 5,表示内存使用更重要

参数形如: --config=/path/to/ KubeSchedulerConfiguration.yaml
启动形如:kube-scheduler --config=/path/to/ KubeSchedulerConfiguration.yaml <...其他参数>
效果:
在这里插入图片描述

驱逐

前提:需要安装集群monitor
根据分析过程分析可知,kubelet未指定驱逐参数,此时kubelet会以memory.available<100Mi 运行,而node节点的内存范围为[376G,750G],默认驱逐值明显不适用,因此建议设置合理值,目前推荐如下:

 --evited-hard=memory.available<40G 
 --evited-soft=memory.available<50G

或者按如下kubelet配置:
在这里插入图片描述
效果如下:
在这里插入图片描述

建议

此问题反映出资源分配和调度的问题,涉及范围较为综合,运维侧提供了较为稳定的iaas平台环境,很多场景可以保证资源的使用率,此时从资源充分使用角度落地方案;当节点数固定时,提出了资源使用平衡,则调度器需要较为实时感知到资源使用情况(此案例为内存使用率),以选择适合的节点进行绑定调度。

参考

案例参考:https://segmentfault.com/a/1190000042005893
其他组件:
Trimaran 官网地址:https://github.com/kubernetes-sigs/scheduler-plugins/tree/master/pkg/trimaran
descheduler 官网地址:https://github.com/kubernetes-sigs/descheduler

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/896590.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Janus:开创统一的多模态理解和生成框架

Janus是DeepSeek开源的多模式自回归框架&#xff0c;统一了多模态理解和生成&#xff0c;既可以理解图片内容又可以生成图片。 1.简介 Janus 是一种新颖的自回归框架&#xff0c;它将多模态理解和生成统一起来。它通过将视觉编码解耦为单独的路径来解决以前方法的局限性&…

jmeter发送post请求

在jmeter中&#xff0c;有两种常用的请求方式&#xff0c;get和post.它们两者的区别在于get请求的参数一般是放在路径中&#xff0c;可以使用用户自定义变量和函数助手等方式进行参数化&#xff0c;而post请求的参数不能随url发送&#xff0c;而是作为请求体提交给服务器。而在…

OpenWRT 和 Padavan 路由器配置网络打印机 实现远程打印

本文首发于只抄博客&#xff0c;欢迎点击原文链接了解更多内容。 前言 之前有给大家介绍过 Armbian 安装 CUPS 作为打印服务器&#xff0c;像是 N1 盒子、玩客云&#xff0c;甚至是随身 WiFi 都可以通过 CUPS 来进行打印。但是有些朋友不想专门为打印机添置一个设备&#xff0…

Spring AI 1.0.0 M1版本新特性!

Spring AI 1.0.0 M1版本新特性介绍 前言一、在1.0.0 M1版本中&#xff0c;主要有以下新特性&#xff1a;1.ChatModel2.ChatClient3.多模态的支持4.模型评估RequestResponseAdvisor接口MessageChatMemoryAdvisorPromptChatMemoryAdvisorQuestionAnswerAdvisor动态过滤表达式 Vec…

爬虫逆向-js进阶(续写,搭建网站)

1.搭建简单网站1 from flask import Flask,render_template import requests import json app Flask(name)# **location**的温度是**temp**度&#xff0c;天气状况&#xff1a;**desc**app.route(/) # 绑定处理函数 def index_url():location 101010100data get_weather(lo…

黑马JavaWeb-day02

什么是JavaScript&#xff1f; JavaScript&#xff1a;简称Js,是一门跨平台、面向对象的脚本语言。是用来控制网页行为的&#xff0c;它能使网页可交互 JavaScript和Java是完全不同的语言&#xff0c;无论是概念还是设计。但是基础语法类似。 JavaScript JavaScript引入方式…

第三方软件测试中心有什么特点?江苏软件测试中心推荐

随着软件市场的激烈竞争&#xff0c;软件企业越来越多&#xff0c;为了更好的服务用户以及专心于产品开发工作&#xff0c;将软件测试外包给第三方软件测试中心已经成为了行业发展趋势。第三方软件测试中心顾名思义就是区别于软件开发方和需求方的第三方存在&#xff0c;是专门…

使用 MongoDB 构建 AI:利用实时客户数据优化产品生命周期

在《使用 MongoDB 构建 AI》系列博文中&#xff0c;我们看到越来越多的企业正在利用 AI 技术优化产品研发和用户支持流程。例如&#xff0c;我们介绍了以下案例&#xff1a; Ventecon 的 AI 助手帮助产品经理生成和优化新产品规范 Cognigy 的对话式 AI 帮助企业使用任意语言&a…

《MYSQL实战45讲 》 优化器如何选择索引?

SHOW VARIABLES LIKE long_query_time; set long_query_time0 优化器如何选择索引&#xff1f; 1.扫描的行数 估计出各个索引大致的要扫描的行数&#xff0c;行数越少&#xff0c;效率越高。 索引的基数也叫区分度&#xff0c;就是这个索引所在的字段上不同的值又多少个。优…

10.21 多进程间通信-信号、消息队列

作业&#xff1a;使用消息队列实现两个进程间通信 编程代码&#xff1a;使用父子进程实现通信 msgsnd.c #include <myhead.h> //定义自定义函数用于接收僵尸进程 void handler(int signo){if(signoSIGCHLD){while(waitpid(-1,NULL,WNOHANG)>0);} } //定义存储消息队…

[云] Deploying Your First Serverless Application

• Goal: • Hands-on lab to get started with Serverless • Agenda: • Deploying Your First Serverless Application • Assignment Introduction Create and test function in AWS Lambda • Lets create an addition function using AWS Lambda. • To create the addi…

pipeline开发笔记

pipeline开发笔记 jenkins常用插件Build Authorization Token Root配置GitLab的webhooks(钩子)配置构建触发器--示例 piblish over sshBlue OceanWorkspace Cleanup PluginGit插件PipelineLocalization: Chinese (Simplified) --中文显示Build Environment Plugin 显示构建过程…

vscode离线状态ssh连接不断输入密码登不上:配置commit_id

如题&#xff0c;vscode在一个离线服务器上&#xff0c;通过remote-ssh登录远程服务器&#xff0c;不断弹出密码框&#xff0c;总是进不去&#xff0c;后来了解到主要是不同vscode版本需要下载对应抑制commit-id的vscode-server-linux-x64.tar.gz包。 1&#xff09;vscode, 点…

Jupyter Notebook汉化(中文版)

原版jupyter notebook是英文的&#xff0c;想要将其改为中文 在jupyter notebook所在环境输入以下命令 pip install jupyterlab-language-pack-zh-CN打开jupyter notebook&#xff0c;在设置语言中将其设置为中文

提升小学语文教学效果的思维导图方法

众所周知&#xff0c;教学不仅仅是站在讲台上传授知识&#xff0c;它还包括了备课、评估学生学习成果以及不断调整教学方法等多个环节。在面对教学中的各种挑战时&#xff0c;思维导图可以成为解决这些问题的有力工具。思维导图是一种利用图形来组织和表达发散性思维的工具&…

【DBA Part01】国产Linux上安装Oracle进行数据迁移

内容如下&#xff1a; 1.1.生产环境RHEL/OEL Linux8Oracle11gR2安装配置 1.2.国产麒麟操作系统Oracle11gR2安装配置 1.3.国产麒麟操作系统Oracle11gR2 RAC集群安装配置 1.4.Oracle11gR2迁移到国产麒麟操作系统&#xff08;单机/RAC&#xff09; 本阶段课程项目需求说明&am…

Spring配置/管理bean-IOC(控制反转) 非常详细!基于XML及其注解!案例分析! 建议复习收藏!

目录 1.Spring配置/管理bean介绍 2.基于XML配置bean 2.1基于id来获取bean对象 2.2基于类型获取bean对象 2.3通过指定构造器配置bean对象 2.4通过p名称空间配置bean 2.5通过ref配置bean(实现依赖注入) 2.6注入内部Bean对象&#xff0c;依赖注入另一种方式 2.7 注入集合…

PCL 基于距离阈值去除错误对应关系

目录 一、概述 1.1原理 1.2实现步骤 1.3应用场景 二、代码实现 2.1关键函数 2.1.1 获取初始对应点对 2.1.2 基于距离的对应关系筛选函数 2.1.3 可视化函数 2.2完整代码 三、实现效果 PCL点云算法汇总及实战案例汇总的目录地址链接&#xff1a; PCL点云算法与项目实…

批量处理文件权限:解决‘/usr/bin/chmod: Argument list too long’的有效方法

批量处理文件权限&#xff1a;解决‘/usr/bin/chmod: Argument list too long’的有效方法 错误原因解决方案1. 分批处理2. 使用xargs3. 增加ARG_MAX限制4. 使用脚本 结论 在Linux系统中&#xff0c;有时你可能会遇到这样的错误消息&#xff1a;“/usr/bin/chmod: Argument lis…

大数据之hive(分布式SQL计算工具)加安装部署

1.分布式SQL计算: 对数据进行统计分析&#xff0c; SQL是目前最为方便的编程工具. 2.hive:主要功能: 将 SQL语句翻译成MapReduce程序运行,提供用户分布式SQL计算能力 3.构建分布式SQL计算:(hive核心组件) 需要有: 一:元数据管理功能, 即&#xff1a;数据位置,数据结构,等对数…