当前位置: 首页 > news >正文

k8s自动清理节点服务

要在 Kubernetes 中实现当某个节点的 CPU 或内存使用超过 90% 时清理该节点上的服务,你可以使用以下几种方法:

  1. 自定义脚本和 cron job:编写一个脚本监控节点的资源使用情况,并在超过阈值时触发清理操作。
  2. 使用 DaemonSet 运行监控容器:在每个节点上运行一个监控容器,监控资源使用情况并执行清理操作。
  3. Prometheus 和 Alertmanager:结合使用 Prometheus 和 Alertmanager 来监控资源使用情况,并在超过阈值时触发清理操作。

以下是使用自定义脚本和 cron job 实现的详细步骤:

步骤 1:编写监控和清理脚本

创建一个脚本(例如 cleanup.sh),该脚本将检查节点的 CPU 和内存使用情况,并在超过阈值时清理节点上的服务:

#!/bin/bash# 设置阈值
CPU_THRESHOLD=90
MEM_THRESHOLD=90# 获取节点的名称
NODE_NAME=$(hostname)# 获取节点的 CPU 和内存使用情况
CPU_USAGE=$(kubectl top node $NODE_NAME --no-headers | awk '{print $3}' | sed 's/%//')
MEM_USAGE=$(kubectl top node $NODE_NAME --no-headers | awk '{print $5}' | sed 's/%//')# 检查是否超过阈值
if [[ $CPU_USAGE -gt $CPU_THRESHOLD ]] || [[ $MEM_USAGE -gt $MEM_THRESHOLD ]]; thenecho "Node $NODE_NAME CPU or Memory usage is above threshold. Cleaning up..."# 获取节点上的所有以 "svc" 开头的 PodPODS=$(kubectl get pods --all-namespaces -o wide | grep $NODE_NAME | awk '{if ($2 ~ /^svc/) print $2" -n "$1}')# 删除节点上的所有以 "svc" 开头的 Podfor POD in $PODS; dokubectl delete pod $POD --grace-period=0 --forcedone
fi

步骤 2:在节点上设置 cron job

将脚本部署到每个节点上,并使用 cron job 定期运行该脚本:

  1. 将脚本复制到节点上(例如 /usr/local/bin/cleanup.sh):

    scp cleanup.sh user@node:/usr/local/bin/cleanup.sh
    
  2. 在每个节点上为脚本添加可执行权限:

    chmod +x /usr/local/bin/cleanup.sh
    
  3. 在每个节点上编辑 crontab 文件:

    crontab -e
    

    添加以下行来每 5 分钟运行一次脚本:

    */5 * * * * /usr/local/bin/cleanup.sh >> /var/log/cleanup.log 2>&1
    

这样,脚本将每 5 分钟检查一次节点的 CPU 和内存使用情况,并在超过阈值时清理节点上的服务。

注意事项

  • 清理操作的影响:强制删除节点上的 Pod 可能会影响你的服务。确保在清理之前有足够的冗余和容错机制。
  • 权限:确保运行脚本的用户有足够的权限执行 kubectl 命令。
  • 改进:可以改进脚本,使其更智能,比如只删除特定命名空间的 Pod,或者优先删除低优先级的 Pod。
http://www.lryc.cn/news/389800.html

相关文章:

  • JS如何把年月日转为时间戳
  • 【YOLOv5进阶】——引入注意力机制-以SE为例
  • 【C++题解】1456. 淘淘捡西瓜
  • 用Python读取Word文件并提取标题
  • Windows编程上
  • BiTCN-Attention一键实现回归预测+8张图+特征可视化图!注意力全家桶再更新!
  • zoom缩放问题(关于ElementPlus、Echarts、Vue3draggable等组件偏移问题)
  • 【后端面试题】【中间件】【NoSQL】MongoDB的配置服务器、复制机制、写入语义和面试准备
  • 视频监控汇聚平台LntonCVS视频监控业务平台具体有哪些功能?
  • 我不小心把生产的数据改错了!同事帮我用MySQL的BinLog挽回了罚款
  • Windows系统安装NVM,实现Node.js多版本管理
  • k8s部署单节点redis
  • 云微客矩阵系统:如何利用智能策略引领营销新时代?
  • 嵌入式Linux系统编程 — 6.3 kill、raise、alarm、pause函数向进程发送信号
  • Swoole实践:如何使用协程构建高性能爬虫
  • 基于人脸68特征点识别的美颜算法(一) 大眼算法 C++
  • 算法金 | 欧氏距离算法、余弦相似度、汉明、曼哈顿、切比雪夫、闵可夫斯基、雅卡尔指数、半正矢、Sørensen-Dice
  • 项目实战--Spring Boot大数据量报表Excel优化
  • C#编程技术指南:从入门到精通的全面教程
  • Redis+定式任务实现简易版消息队列
  • 学习在 C# 中使用 Lambda 运算符
  • 数据结构和算法,单链表的实现(kotlin版)
  • Jdk17是否有可能代替 Jdk8
  • oca和 ocp有什么区别
  • 煤矿安全大模型:微调internlm2模型实现针对煤矿事故和煤矿安全知识的智能问答
  • C++中的C++中的虚析构函数的作用和重要性
  • 机器学习 - 文本特征处理之 TF 和 IDF
  • 因为自己淋过雨所以想给嵌入式撑把伞
  • 《C++20设计模式》中单例模式
  • 前端技术(说明篇)