当节点内存管理遇上 Kubernetes:自动调度与控制

news2024/12/24 11:29:40

原理

在现代的容器化环境中,节点资源的管理是一个重要的任务。特别是对于内存资源的管理,它直接影响着容器应用的性能和可用性。在 Kubernetes 中,我们可以利用自动调度和控制的机制来实现对节点内存的有效管理。本文将介绍一种基于 Bash 脚本的节点内存管理方案,并探讨其原理、优势、缺点以及部署和应用趋势。

背景

注意到一个节点的内存使用率非常高,一些 Pods 在这个节点上无法正常运行并不断重启。经过仔细研究,发现是因为这个节点的内存资源不足,导致一些高内存需求的 Pods 无法正常运行。您决定实施一种解决方案,以确保这些高内存需求的 Pods 不会被调度到这个节点上,直到您能够通过扩容或升级硬件等方式来解决这个问题。
在这里插入图片描述在这里插入图片描述

方案

为了实现这个解决方案,您决定使用 Kubernetes 中的污点(Taint)和容忍度(Toleration)机制。您将首先添加一个污点到这个节点,以标识它当前无法容纳高内存需求的 Pods。然后,您将在这些 Pods 的 YAML 文件中添加容忍度字段,以允许它们在具有更充足内存资源的其他节点上运行。最后,您将设置 SchedulingDisabled 标志,以确保后续的 Pods 不会被调度到这个节点上,直到您解决了该节点的内存问题。

脚本

#!/bin/bash

# 功能:控制节点内存
# 如果节点内存占用率超过 90%,则禁止在该节点上调度 Pod
# 如果节点内存占用率低于平均值且平均值小于 90%,则允许在该节点上调度 Pod

# 使用 kubectl top 命令获取节点的内存占用率,并忽略掉一些特定的节点
data=$(kubectl top node | grep -v "MEMORY" | grep -v "cn-shenzhen" | sed "s/%//g")
# 计算所有节点的内存占用率的平均值
avg=$(echo "$data" | awk '{ sum += $NF } END { print sum / NR }' | awk -F. '{ print $1 }')
# 逐行读取每个节点的信息(节点名称和内存占用率)
echo "$data" | awk '{ print $1, $NF }' | while read line
do
  # 获取节点名称和内存占用率
  n=$(echo $line | awk '{ print $1 }')
  m=$(echo $line | awk '{ print $2 }')
  # 如果内存占用率超过 90%,并且该节点没有被设置为不可调度状态,则禁止在该节点上调度 Pod
  if [ "$m" -ge "90" ];then
    if kubectl get node | grep $n | grep -q "SchedulingDisabled";then
      continue
    else
      kubectl cordon $n
    fi
  # 如果内存占用率低于平均值且平均值小于 90%,并且该节点已被设置为不可调度状态,则允许在该节点上调度 Pod
  elif [ "$m" -lt "$avg" ] && [ "$avg" -lt "90" ];then
    if kubectl get node | grep $n | grep -q "SchedulingDisabled";then
      kubectl uncordon $n
    fi
  fi
done

在这里插入图片描述
在这里插入图片描述

原理

该脚本的原理是通过获取节点的内存占用率,并根据预设的阈值进行判断和操作。具体流程如下:

  1. 使用 kubectl top 命令获取节点的内存占用率,并忽略掉特定的节点。
  2. 计算所有节点的内存占用率的平均值。
  3. 逐行读取每个节点的信息,包括节点名称和内存占用率。
  4. 如果节点内存占用率超过设定的阈值(例如 90%),并且该节点没有被设置为不可调度状态,则禁止在该节点上调度 Pod。
  5. 如果节点内存占用率低于平均值且平均值小于阈值,并且该节点已被设置为不可调度状态,则允许在该节点上调度 Pod。

通过这样的原理,我们可以在集群中实现对节点内存的动态管理,确保节点资源的合理利用和容器应用的稳定运行。

优势

自动化管理: 该脚本实现了自动化的节点内存管理,无需手动干预,减轻了运维人员的负担。
实时监测:通过定期执行脚本,可以实时监测节点的内存占用情况,及时做出调整,提高了容器应用的性能和可用性。
智能决策:根据设定的阈值和平均值,脚本能够智能地决策是否禁止或允许在节点上调度 Pod,确保资源的合理分配。

缺点

依赖性: 该脚本依赖于 Kubernetes 命令行工具 kubectl 和集群的配置,因此需要保证环境的正确配置和可用性。
单一维度: 该脚本仅基于节点的内存占用率进行管理,没有考虑其他资源(如 CPU、存储)的情况,因此在综合资源管理方面还有待完善。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

EM中等效原理

EM中等效原理 一、基本简介 电磁等效定理对于简化许多问题的解是有用的。此外,它们还提供了对麦克斯韦系统电磁场行为的物理见解。它们与唯一性定理和惠更斯原理密切相关。一个应用是它们在研究来自孔径天线或来自激光腔输出的辐射中的用途。 等效源原理&#xf…

3.2 掌握RDD算子

一、准备工作 (一)准备文件 1、准备本地系统文件 2、把文件上传到HDFS (二)启动Spark Shell 1、启动HDFS服务 2、启动Spark服务 3、启动Spark Shell 二、掌握转换算子 (一)映射算子 - map() …

Sketch在线版免费使用,Windows也能用的Sketch!

Sketch 的最大缺点是它对 Windows/PC 用户不友好。它是一款 Mac 工具,无法在浏览器中运行。此外,使用 Sketch 需要安装其他插件才能获得更多响应式设计工具。然而,现在有了 Sketch 网页版工具即时设计替代即时设计! 即时设计几乎…

通达信凹口平量柱选股公式,倍量柱之后调整再上升

凹口平量柱是一组量柱形态,表现为量柱两边高、中间扁平或圆底的形态。如下图所示,左右各有一根高度持平的高量柱,中间夹杂着三五根甚至更多根低量柱。 凹口平量柱选股公式需要结合量柱以及K线,主要考虑以下三点: 1、倍…

git各阶段代码修改回退撤销操作

git push origin master 的含义是将本地当前分支的提交推送到名为 origin 的远程仓库的 master 分支上。 各阶段代码修改回退撤销的操作 case1 git checkout -- . 修改了文件内容但没还有git add 或git commit时撤销当前目录下所有文件的修改 case2 当完成了git add 之后&a…

项目管理:面对未知的挑战时,如何获取和使用信息?

一项实验展示了人们在面对未知的挑战时,对信息的获取和使用的影响。在下面的实验中,三组人被要求步行到十公里外的三个村庄。 第一组人没有任何信息,只跟着向导走。他们在走了短短的两三公里后就开始抱怨和情绪低落,同时感到疲惫…

2022年天府杯全国大学生数学建模竞赛E题地铁线路的运营与规划解题全过程文档及程序

2022年天府杯全国大学生数学建模竞赛 E题 地铁线路的运营与规划 原题再现: 地铁是一种非常绿色快捷的交通出行方式,全国各大城市也都在如火如荼地进行地铁线路建设与规划。但乘坐地铁有时候会感觉特别拥挤,这一时期我们称为高峰期。如何合理…

sqlserver中的merge into语句

merge into语句是用来合并两张表的数据的,比如我们想把一张表的数据批量更新到另外一张表,就可以用merge into语句。具体有哪些业务场景呢? 1.数据同步 2.数据转换 3.基于源表对目标表进行增,删,改的操作。 实践步骤…

JavaScript了解调用带参函数,无参函数的代码

以下为JavaScript了解调用带参函数,无参函数的程序代码和运行截图 目录 前言 一、带参函数 1.1 运行流程及思想 1.2 代码段 1.3 JavaScript语句代码 1.4 运行截图 二、无参函数 2.1 运行流程及思想 2.2 代码段 2.3 JavaScript语句代码 2.4 运行截图 前言…

让代码创造童话,共建快乐世界:六一儿童节特辑

让代码创造童话,共建快乐世界:六一儿童节特辑 六一儿童节即将来临,这是一个属于孩子们的快乐节日。为了让这个节日更加有趣,我们发起了“让代码创造童话,共建快乐世界”六一活动。在这个活动中,我们邀请您…

使用Tensorrt对YOLOv5目标检测的代码进行加速

文章目录 1. 前言2. 官网3. 安装依赖3.1. 安装OpenCV3.1.1. 安装3.1.2. 添加环境变量3.1.3. 查看版本 3.2. 安装TensorRT3.2.1. 下载3.2.2. 安装3.2.3. 添加环境变量 4. 下载项目5. 生成WTS模型6. cmake6.1. 生成Makefile6.1.1. 配置CMakeLists.txt6.1.1.1. 修改编译依赖的路径…

通过python采集1688商品评论数据封装接口、1688评论数据接口

1688商品评论数据是指在1688网站上对商品的评价和评论信息。这些信息包括买家对商品的使用、品质、包装、服务等方面的评价和意见,可以帮助其他用户更好地了解商品的优缺点和性能,从而做出更明智的购买决策。 1688网站是中国最大的B2B电子商务网站之一&…

RK3566调试EC20

参考博客:RK3568开发笔记-buildroot移远EC20模块调试记录 一、内核配置 cd 到kernel目录,执行make ARCHarm64 menuconfig, Device Drivers >USB support > USB Serial Converter support 选中 USB driver for GSM and CDMA modems选…

04.hadoop上课笔记之java编程和hbase

1.win查看服务 netstat -an #linux也有#R数学建模语言 SCALAR 2.java连接注意事项,代码要设置用户 System.setProperty("HADOOP_USER_NAME", "hadoop");3.伪分布式的好处(不用管分布式细节,直接连接一台机器…,适合用于学习) 4.官方文档 查看类(static |…

5个UI设计师必备的Figma汉化插件

即时设计插件广场提供了许多有用的 UI 插件,帮助优化产品设计过程。其中,产品组件库 Figma 汉化插件对常用的 PC 端和移动端组件进行了筛选,使其更加聚焦和精简。PC 端组件包括基础、按钮、菜单和其他元素,移动端组件包括基础、按…

电子阅读器calibre的使用技巧

十条calibre使用技巧: 1. 添加电子书:可以单独添加文件、添加文件夹、添加zipped书籍,或者通过网络链接直接添加。 2. 转换电子书格式:可以将电子书转换为不同的格式,如AZW3、EPUB、MOBI、PDF等。 3. 修改元数据&am…

文件夹加密超级大师的金钻加密和闪电加密有什么区别?

作为一款专业的文件夹加密软件,文件夹加密超级大师提供了5种文件加密类型,其中金钻加密和闪电加密在加密后效果看似差不多,那么它们有什么区别呢?下面我们就来了解一下吧。 闪电加密更快速 当我们想要加密那些超级庞大的文件夹时…

Docker安装kafka可视化管理工具 - Kafka Manager

说明:此处是在前面使用Docker安装kafka的基础之上,再来使用Docker安装kafka-manager 第一步:使用下述命令从Docker Hub查找镜像,此处我们要选择的是sheepkiller所构建的kafka-manager镜像 docker search kafka-manager 第二步&a…

人工智能生成内容(AIGC):概念、发展历史及其机遇、挑战与未来方向

人工智能生成内容(AIGC) 人工智能生成内容(Artificial Intelligence Generated Content, AIGC), AIGC 是指使用生成式 AI (Generative Artificial Intelligence, GAI) 技术生成的内容&#xff…

基于SSM+Vue前后端分离的勤工助学管理系统

末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端:Vue 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目:是 Web服…