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

如何查看Kubernetes中各Pod对应的Context?

问题

我通过以下命令创建了关联DevDan-context的Pod:

kubectl config set-context DevDan-context \
 --cluster=kubernetes \
 --namespace=development \
 --user=DevDan

执行kubectl --context=DevDan-context get pods能看到这个Pod,但直接执行kubectl get pods看不到。我想知道有没有办法显示所有Pod并附带Context列?

我知道kubectl get pods --all-namespaces命令,但它只展示Pod信息,不会标注每个Pod对应的Context,执行后输出示例如下:

ubuntu@HOST:~$ kubectl get pods --all-namespaces
NAMESPACE     NAME                                       READY   STATUS    RESTARTS   AGE
development   nginx-8586cf59-plq29                      1/1     Running   0          19h
kube-system   etcd-HOST                                 1/1     Running   1          9d
kube-system   kube-apiserver-HOST                       1/1     Running   1          9d
kube-system   kube-controller-manager-HOST              1/1     Running   1          9d
kube-system   kube-dns-6f4fd4bdf-25ddh                  3/3     Running   3          9d
kube-system   kube-flannel-ds-5vgd9                     1/1     Running   1          9d
kube-system   kube-flannel-ds-vvstn                     1/1     Running   0          9d
kube-system   kube-proxy-62xrx                          1/1     Running   1          9d
kube-system   kube-proxy-g7w7l                          1/1     Running   0          9d
kube-system   kube-scheduler-HOST                       1/1     Running   1          9d

目前我只能先执行kubectl config get-contexts获取所有Context,再逐个执行kubectl --context=<my_context> get pods,但Context多的时候操作太繁琐,有没有更高效的办法?

解决方案

方法1:用kubectl自定义输出批量查询

你可以直接用shell循环遍历所有Context,结合kubectl的自定义列功能,把Context作为固定列输出。试试这个命令:

for ctx in $(kubectl config get-contexts -o name); do
  kubectl --context="$ctx" get pods -o custom-columns="CONTEXT:=$ctx,NAMESPACE:.metadata.namespace,NAME:.metadata.name,READY:.status.readyReplicas,STATUS:.status.phase,RESTARTS:.status.containerStatuses[0].restartCount,AGE:.metadata.creationTimestamp" --all-namespaces
done

这个命令会自动遍历所有Context,查询每个Context下的所有Pod,并且在结果里明确标注每个Pod所属的Context,输出格式和常规kubectl get pods的风格保持一致。

方法2:封装成脚本简化操作

如果需要频繁使用这个功能,把逻辑封装成shell脚本会更方便。比如创建一个名为kubectl-get-pods-with-context.sh的文件,内容如下:

#!/bin/bash
# 打印表头
echo -e "CONTEXT\t\tNAMESPACE\tNAME\t\t\t\tREADY\tSTATUS\tRESTARTS\tAGE"
echo -e "-------\t\t----------\t----\t\t\t\t-----\t------\t---------\t---"
# 遍历所有Context
for ctx in $(kubectl config get-contexts -o name); do
  # 查询当前Context下的Pod,去掉表头后添加Context列
  kubectl --context="$ctx" get pods --all-namespaces | tail -n +2 | awk -v ctx="$ctx" '{print ctx "\t" $1 "\t" $2 "\t\t\t" $3 "\t" $4 "\t" $5 "\t\t" $6}'
done

给脚本添加执行权限:

chmod +x kubectl-get-pods-with-context.sh

之后直接运行脚本,就能看到排版整齐的带Context列的Pod列表了。

方法3:用jq优化JSON格式输出(可选)

如果你习惯用JSON格式查看或者后续要做数据处理,可以结合jq工具来格式化输出。先确保系统已经安装jq,然后执行:

for ctx in $(kubectl config get-contexts -o name); do
  kubectl --context="$ctx" get pods -o json --all-namespaces | jq --arg ctx "$ctx" '.items[] | {CONTEXT: $ctx, NAMESPACE: .metadata.namespace, NAME: .metadata.name, READY: .status.readyReplicas, STATUS: .status.phase, RESTARTS: .status.containerStatuses[0].restartCount, AGE: .metadata.creationTimestamp}'
done | jq -s '.'

这个命令会把所有结果整理成一个标准的JSON数组,方便你做进一步的分析或处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:47:03