如何使用kubectl命令列出Pod内各容器及其运行明细信息
查看Pod内单容器重启状态的操作方法
默认kubectl get pod输出的RESTARTS字段为Pod内所有容器重启次数的加总值,无法直接定位发生重启的具体容器,可通过以下方案实现容器级状态的直接查询:
方法1:原生kubectl实现(无额外依赖)
不需要安装第三方工具,直接利用kubectl内置的jsonpath能力遍历容器状态字段,执行时替换<目标Pod名称>为实际要查询的Pod即可:kubectl get pod <目标Pod名称> -o jsonpath='{"NAME\tSTATUS\tRESTARTS\tPOD_CREATION_TIME\n"}{range .status.containerStatuses[*]}{.name}{"\t"}{if .state.running then "Running" elif .state.waiting then .state.waiting.reason else .state.terminated.reason end}{"\t"}{.restartCount}{"\t"}{$.metadata.creationTimestamp}{"\n"}{end}'注意:该方案输出的时间字段为Pod创建的原始时间戳格式,不会自动转换为
14h这类简化可读的时长格式,如需格式化输出请使用方法2。方法2:配合jq输出对齐的可读格式(完全匹配预期输出)
如果环境已安装jqJSON处理工具,可执行以下命令,自动转换运行时长格式、对齐表格列,输出效果和需求示例完全一致:kubectl get pod <目标Pod名称> -o json | jq -r ' def calc_age: (now - (.metadata.creationTimestamp | fromdateiso8601)) as $duration | if $duration < 3600 then "\($duration/60 | floor)m" elif $duration < 86400 then "\($duration/3600 | floor)h" else "\($duration/86400 | floor)d" end; ["NAME", "STATUS", "RESTARTS", "AGE"], (.status.containerStatuses | map([ .name, (.state | to_entries[0].key | ascii_upcase | .[:1] + .[1:]), .restartCount, calc_age ]))[] | @tsv' | column -t执行后输出示例:
NAME STATUS RESTARTS AGE container-1 Running 2 14h container-2 Running 3 14h扩展:批量查询当前命名空间下所有Pod的容器状态
如需一次性排查所有Pod的容器重启情况,可执行以下循环命令:for p in $(kubectl get pods -o name); do echo -e "\n=== $p ===" kubectl get $p -o json | jq -r ' def calc_age: (now - (.metadata.creationTimestamp | fromdateiso8601)) as $d | if $d < 3600 then "\($d/60|floor)m" elif $d < 86400 then "\($d/3600|floor)h" else "\($d/86400|floor)d" end; ["NAME","STATUS","RESTARTS","AGE"], (.status.containerStatuses|map([.name,(.state|to_entries[0].key|ascii_upcase|.[:1]+.[1:]),.restartCount,calc_age]))[]|@tsv' | column -t done
内容的提问来源于stack exchange,提问作者anonymous user
相关产品推荐
相关产品推荐

