首页 > 其他分享 >解决k8s调度不均

解决k8s调度不均

时间:2024-05-15 16:43:42浏览次数:18  
标签:node kubectl 不均 使用率 调度 Pod k8s 节点

在近期的工作中,我们发现 k8s 集群中有些节点资源使用率很高,有些节点资源使用率很低,尝试重新部署应用和驱逐 Pod,发现并不能有效解决负载不均衡问题。

调度不均衡的问题可能有多个原因导致,下面是一些可能的原因:

  1. 节点资源分配不均:某些节点可能被分配了更多的资源(如CPU、内存)而导致使用率高,而其他节点可能分配较少的资源而使用率低。这可能是由于初始资源配置不均或者节点上运行的应用程序对资源的需求不同所导致。

  2. Pod亲和性设置不当:Kubernetes允许设置Pod的亲和性规则,即将Pod调度到特定的节点上。如果亲和性设置不当,可能导致一些Pod被调度到相同的高使用率节点上,而其他节点上的资源利用率较低。(目前我们未对服务做亲和性规则限制)

  3. Pod资源请求和限制不合理:Pod的资源请求和限制设置对于调度均衡也很重要。如果某些Pod的资源请求设置过高,调度器可能无法将其调度到资源利用率较低的节点上,从而导致负载不均衡。

解决方法:

编写一个脚本来定期采集节点的内存使用率,并根据阈值设置禁止调度。

#!/bin/bash

THRESHOLD=80  # 定义内存使用率的阈值,超过该阈值将禁止调度
NODES=(node1 node2 node3)  # 定义要监测的节点列表

for node in "${NODES[@]}"; do
  memory_usage=$(kubectl describe node $node | grep -i "memory pressure" | awk '{print $3}' | tr -d '%')
  
  if [[ $memory_usage -gt $THRESHOLD ]]; then
    kubectl cordon $node  # 设置节点为禁止调度
    echo "Node $node is cordoned due to high memory usage."
  else
    kubectl uncordon $node  # 放开节点的调度
    echo "Node $node is uncordoned."
  fi
done

  

脚本中使用kubectl describe node命令来获取节点的内存使用率,并通过grepawk命令提取出所需的信息。然后,根据内存使用率是否超过设定的阈值,使用kubectl cordon命令禁止调度或使用kubectl uncordon命令放开调度。

将脚本保存为.sh文件,并使用cron等工具定期执行该脚本,以实现定期检查和调度节点的功能。

标签:node,kubectl,不均,使用率,调度,Pod,k8s,节点
From: https://www.cnblogs.com/yangx124/p/18194178

相关文章

  • 自己动手实现一个轻量无负担的任务调度ScheduleTask
    至于任务调度这个基础功能,重要性不言而喻,大多数业务系统都会用到,世面上有很多成熟的三方库比如Quartz,Hangfire,Coravel这里我们不讨论三方的库如何使用而是从0开始自己制作一个简易的任务调度技术栈用到了:BackgroundService和NCrontab库第一步我们定义一个简单的任务约定......
  • K8S之yaml 文件详解pod、deployment、service(转)
    原文:https://blog.csdn.net/footless_bird/article/details/125946101作者:墨鸦_Cormorant来源:CSDN K8S中的yaml文件yaml语法学习 Kubernetes支持YAML和JSON格式管理资源对象 JSON格式:主要用于api接口之间消息的传递 YAML格式:用于配置和管理,YAML是一种简......
  • k8s nodeName与nodeSelector的简单应用(转)
    原文:https://blog.csdn.net/xhredeem/article/details/127687465作者:xhredeem来源:CSDN默认情况下,k8smaster管理节点有污点标签,默认是NoSchedule,即不会被调度。新创建的pod会随机选择除了master管理节点的以外的node工作节点上创建。如果想要使某个新建pod在某个node节点创建......
  • 从0到1,百亿级任务调度平台的架构与实现
    文章很长,且持续更新,建议收藏起来,慢慢读!疯狂创客圈总目录博客园版为您奉上珍贵的学习资源:免费赠送:《尼恩Java面试宝典》持续更新+史上最全+面试必备2000页+面试必备+大厂必备+涨薪必备免费赠送:《尼恩技术圣经+高并发系列PDF》,帮你实现技术自由,完成职业升级,薪......
  • k8s 维护有状态服务难的问题,他解决了
        介绍:它是基于Kubernetes的云原生数据基础设施,为用户提供了关系型数据库、NoSQL数据库、向量数据库以及流计算系统的管理控制功能。可以使用提供的命令轻松部署处理数据库实例。github:https://github.com/apecloud/kubeblocks官网:https://kubeblocks.io......
  • Cron表达式-任务调度
    当我们谈论任务调度时,cron(Cron表达式)是一种非常常见和常用的方式。它是一种用于在特定时间间隔内定期执行任务的调度表达式。cron表达式由6个字段组成,分别代表分钟、小时、日期、月份、星期几和要执行的命令或脚本。下面是cron表达式的每个字段的含义:09***command分钟(0-5......
  • k8s——configmap-secret-nginx实验
    简介configmapsecret一、实验环境二、实验描述三、实验1:步骤1.使用configmap投射到nginx.conf配置文件到pod里1.1需要准备nginx.conf配置文件1.2将nginx.conf内容存放到configmap里(通过文件的方式,,这样简单一点)1.3启动ngnix的pod,使用configmap里的nginx.conf配置文件2.......
  • k8s部署实时计算平台dinky1.0
    k8s部署实时计算平台dinky1.0.2源码编译IDEA编译推荐使用IDEA进行编译,因为IDEA在打开项目时会自动下载依赖,而且编译速度快,方便调试.Clone项目注意:本次直接clone的是Dinky主仓库,如果你想要二次开发/基于自己的仓库进行二次开发,请先fork项目,然后再c......
  • 【k8s】基于猪齿鱼部署相关概念辨析
    相关链接:https://golangguide.top/架构/云原生/核心知识点/k8s到底是什么.html集群命名空间NODEDeploymentpodcontainer......
  • 在Linux中,如何使用cron进行任务调度?
    Cron是Linux系统中用于任务调度的一个强大工具,它允许用户安排命令或脚本在特定的时间周期性地自动执行,无需用户干预。Cron作业可以按分钟、小时、日期、月份、星期几来设置执行时间。以下是使用cron进行任务调度的基本步骤:1.编辑Crontab文件Crontab(crontable)文件包含了所有计......