You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取命名空间中已存在至少1天的故障Pod

获取命名空间中存在超1天的故障Pod并关联Deployment缩容

一、筛选符合条件的故障Pod

要同时满足「存在至少1天」和「至少一个容器处于Waiting状态」两个条件,可结合kubectl和jq工具实现精准筛选,命令如下:

kubectl get pods -n <你的命名空间> -o json | jq -r '.items[] | select(.status.containerStatuses[]? | .state.waiting != null) | select(.metadata.creationTimestamp | fromdateiso8601 < (now - 86400)) | .metadata.name'

命令说明:

  • .items[]:遍历所有Pod资源条目
  • select(.status.containerStatuses[]? | .state.waiting != null):筛选出至少包含一个Waiting状态容器的Pod,[]?避免因Pod无容器状态数据导致的报错
  • select(.metadata.creationTimestamp | fromdateiso8601 < (now - 86400)):筛选创建时间超过1天的Pod(86400秒为1天,可按需调整数值)
  • .metadata.name:输出符合条件的Pod名称

二、关联对应的Deployment并缩容

如果需要直接获取这些Pod所属的Deployment并批量缩容,可扩展命令提取Deployment名称,再编写脚本批量操作:

完整Bash脚本示例

#!/bin/bash
# 替换为目标命名空间
TARGET_NAMESPACE="default"
# 缩容后的副本数,按需调整
TARGET_REPLICAS=0

# 获取符合条件的唯一Deployment列表
TARGET_DEPLOYS=$(kubectl get pods -n $TARGET_NAMESPACE -o json | jq -r '.items[] | select(.status.containerStatuses[]? | .state.waiting != null) | select(.metadata.creationTimestamp | fromdateiso8601 < (now - 86400)) | .metadata.ownerReferences[]? | select(.kind == "Deployment") | .name' | sort | uniq)

# 遍历执行缩容操作
for deploy in $TARGET_DEPLOYS; do
    echo "开始缩容Deployment: $deploy (命名空间: $TARGET_NAMESPACE) 至 $TARGET_REPLICAS 副本"
    kubectl scale deployment $deploy -n $TARGET_NAMESPACE --replicas=$TARGET_REPLICAS
done

注意事项

  • 确保集群节点或执行脚本的机器已安装jq工具(可通过apt install jq或yum install jq安装)
  • 若需调整时间阈值,修改now - 86400中的数值即可(如now - 172800代表2天)
  • 缩容前可先注释kubectl scale命令,仅通过echo输出待操作的Deployment,确认无误后再执行实际缩容
  • 若需处理StatefulSet等其他控制器,只需修改select(.kind == "Deployment")中的kind值即可

内容的提问来源于stack exchange,提问作者wwillfred

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 10:43:11