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

如何无需exec进入容器即可获取Kubernetes集群容器内运行的进程列表

Kubernetes集群批量获取所有容器运行进程的替代方案

下面是3种不用手动逐个exec进入容器的可行方案,你可以根据你手里的集群权限选择:

方案1:通过节点容器运行时命令批量采集

如果你有权限登录pod所在的工作节点,或者可以通过DaemonSet在节点上执行命令,直接用容器运行时原生命令批量获取即可:

  • 第一步先拿到所有目标容器的ID和所在节点:
kubectl get pods -o jsonpath='{range .items[*]}{.metadata.name}{"\t"}{.spec.nodeName}{"\t"}{range .status.containerStatuses[*]}{.containerID}{"\n"}{end}{end}'

输出结果会按「Pod名 节点名 容器ID」的格式列出所有容器信息。

  • 第二步登录对应节点,根据你集群的容器运行时执行对应命令:
    • 若使用containerd:crictl ps -q | xargs -I {} crictl exec {} ps aux
    • 若使用docker:docker ps -q | xargs -I {} docker exec {} ps aux
      执行后会直接输出节点上所有运行容器的进程列表,结合第一步拿到的容器ID过滤,就能得到你需要的目标进程。

方案2:自动遍历脚本批量执行exec,无需手动逐个操作

要是你没有节点登录权限,只有kubectl的exec权限,也不需要手动敲命令逐个进容器,用一行脚本就能自动遍历所有pod和容器执行ps:

kubectl get pods -o jsonpath='{range .items[*]}{.metadata.name}{" "}{range .spec.containers[*]}{.name}{"\n"}{end}{end}' | xargs -l bash -c 'echo "=== Pod: $0, Container: $1 ==="; kubectl exec $0 -c $1 -- ps aux'

这个命令会自动遍历当前命名空间下的所有pod和对应容器,自动执行ps并输出归属标识,全程不需要手动输入任何资源名称,效率远高于手动逐个操作。

方案3:通过节点/proc文件系统直接采集,完全无需进入容器

容器进程本质上是宿主机上做了资源隔离的普通进程,所有进程信息都存在宿主机的/proc目录下,你完全可以不执行任何进入容器的操作,直接在宿主机上过滤进程:

ps axfZ | grep -E 'containerd.io/.*[0-9a-f]{64}|docker/.*[0-9a-f]{64}'

输出结果会携带对应容器的ID,和第一步拿到的容器ID做映射后,就能直接匹配到每个进程所属的pod和容器,不会触发任何容器内操作。

注意:以上方案需要的权限各有不同,方案1和3需要节点登录及容器运行时操作权限,方案2只需要kubectl的exec权限,你可以根据集群的权限管控规则选择合适的方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 23:15:00