k8s自动清理pod脚本分享

检查会遇到集群节点内存消耗超过90%,我们可以筛选一些可以进行重启的pods,如脚本中涉及svc-开头的,进行触发即重启的shell编写。此项会涉及metrics组件需要安装。

复制代码
#!/bin/bash

# 设置内存使用率阈值为90%
MEMORY_THRESHOLD=90

# 初始化一个数组来存储需要处理的节点名
EXCEED_NODES=()

# 获取所有节点的内存使用信息
NODES=$(sudo kubectl top node)

# 逐行处理节点信息
while IFS= read -r line; do
    # 跳过表头行
    if [[ $line =~ ^NAME ]]; then
        continue
    fi
    
    # 提取节点名称和内存使用百分比
    NODE=$(echo "$line" | awk '{print $1}')
    MEMORY_PERCENT=$(echo "$line" | awk '{print $4}' | tr -d '%')
    
    # 检查是否超过阈值
    if [[ $MEMORY_PERCENT -gt $MEMORY_THRESHOLD ]]; then
        EXCEED_NODES+=("$NODE")
        echo "Node $NODE memory usage is over $MEMORY_THRESHOLD%, checking for svc- prefixed Pods..."
    else
        echo "Node $NODE is within acceptable memory usage."
    fi
done <<< "$(echo "$NODES" | awk '/^[^[:space:]]/ {print}')"

# 特定命名空间
NAMESPACE="test"

# 对于每一个超过阈值的节点,查找并重启svc-开头的Pods
for NODE in "${EXCEED_NODES[@]}"; do
    # 获取该节点上所有名称以svc-开头的Pods
    PODS=$(sudo kubectl get pods -n $NAMESPACE -o wide | grep "$NODE" | grep "^.*\ssvc-" | awk '{print $1}')
    
    # 如果有符合条件的Pods,则尝试删除它们
    if [ -n "$PODS" ]; then
        for POD in $PODS; do
            sudo kubectl delete pod $POD -n $NAMESPACE
            echo "Deleted Pod $NAMESPACE/$POD"
        done
    else
        echo "No svc- prefixed Pods found on Node $NODE."
    fi
done

# 输出最终状态
if [ ${#EXCEED_NODES[@]} -eq 0 ]; then
    echo "No Pods deleted, all nodes are below the threshold."
else
    echo "Some Pods were deleted due to high memory usage."
fi
相关推荐
祖力554 小时前
快速学会数据结构中的链式队列与循环队列
linux·c语言·数据结构·算法
原凉是这样的丶4 小时前
Qwen3.8-27B 开源后,我用双 RTX 4090 跑通了:vLLM 0.27.1、128K 上下文与 MTP 实测
linux·算法
qq_2153978974 小时前
docker镜像打包
运维·docker·容器
北京迅为5 小时前
【迅为开发板专属工具】把烧写入口放进浏览器|Topeet RK Flash
linux·人工智能·嵌入式·rk3568·烧写
xiebingsuccess5 小时前
Ubuntu 22.04 在 VMware 上的安装与远程桌面配置 — 任务报告
linux·运维·ubuntu·ai+嵌入式开发
程序员AlbertTu5 小时前
Linux 系统 Bug 调试操作手册
linux·postgresql·bug
juesdo5 小时前
vulnos OS-00118靶场通关
linux·web安全·网络安全·docker
霸刀5 小时前
nslookup 与 dig 使用指南:DNS 查询、区别对比及真实案例解读
linux·cdn·dns
郝亚军5 小时前
asqlite-autoconf-3310100 的ubuntu 22.04 aarch64交叉编译
linux·运维·ubuntu