如何用kubectl检查AWS EKS集群中应用容器/Pod的AZ分布情况?
检查Pod的可用区分布
以下是几个实用的kubectl命令,可以帮你快速确认AWS EKS集群中应用Pod的可用区(AZ)分布情况:
1. 查看Pod所在节点及基础信息
先获取目标应用的Pod列表,同时显示它们绑定的节点:
kubectl get pods -n <你的命名空间> -l <应用标签> -o wide
比如你的应用在prod命名空间,标签是app=order-service,命令替换后为:
kubectl get pods -n prod -l app=order-service -o wide
输出的NODE列会显示Pod所在节点,EKS节点名称通常自带AZ标识(比如ip-10-0-2-3.us-west-2b.compute.internal中的us-west-2b),但这种方式不够严谨,建议用下面的方法直接读取节点的AZ标签。
2. 一次性输出Pod、节点及对应AZ
用这条命令可以直接关联Pod和其所在的可用区:
kubectl get pods -n <你的命名空间> -l <应用标签> -o jsonpath='{range .items[*]}{.metadata.name}{"\t"}{.spec.nodeName}{"\n"}{end}' | while read pod node; do echo -e "$pod\t$node\t$(kubectl get node "$node" -o jsonpath='{.metadata.labels.topology\.kubernetes\.io/zone}')" done
AWS EKS会默认给节点添加topology.kubernetes.io/zone标签,值就是对应的可用区(比如us-east-1a),这条命令会遍历每个Pod,查询节点标签后输出Pod名 节点名 可用区的格式,清晰展示每个Pod的分布位置。
3. 汇总统计各AZ的Pod数量
如果只想快速确认分布情况,统计每个AZ下的Pod数量,用这条命令:
kubectl get pods -n <你的命名空间> -l <应用标签> -o jsonpath='{range .items[*]}{.spec.nodeName}{"\n"}{end}' | xargs -I {} kubectl get node {} -o jsonpath='{.metadata.labels.topology\.kubernetes\.io/zone}{"\n"}' | sort | uniq -c
输出结果类似:
4 us-east-1a 3 us-east-1c
如果结果只有一行,说明所有Pod都运行在同一个可用区;多行则表示Pod分散在不同AZ中。
内容的提问来源于stack exchange,提问作者ca9163d9
相关产品推荐
相关产品推荐

