如何查询Kubernetes Deployment中同时为AVAILABLE和UP-TO-DATE的Pod数量
统计Deployment同时满足AVAILABLE和UP-TO-DATE条件的Pod数量的方法
方法1:标签筛选统计
Kubernetes会为每个版本的ReplicaSet生成唯一的pod-template-hash标签,属于最新版本的Pod会携带该标签,对应Deployment的UP-TO-DATE计数;处于就绪状态的Pod对应Deployment的AVAILABLE计数,结合两个条件即可统计符合要求的Pod数量:
- 获取目标Deployment最新版本的哈希值:
# 替换为实际Deployment名称、命名空间 DEPLOY_NAME="web-deployment" NS="default" NEW_RS_HASH=$(kubectl get rs -n $NS -l <你的Deployment匹配标签> --sort-by=.metadata.creationTimestamp -o jsonpath='{.items[-1].metadata.labels.pod-template-hash}')
注:<你的Deployment匹配标签>替换为Deployment的spec.selector.matchLabels中配置的业务标签,例如app=web
- 统计同时符合最新版本、就绪状态的Pod数量:
READY_NEW_COUNT=$(kubectl get pods -n $NS -l pod-template-hash=$NEW_RS_HASH -o jsonpath='{range .items[*]}{.status.conditions[?(@.type=="Ready")].status}{"\n"}{end}' | grep -c "True") echo $READY_NEW_COUNT
方法2:自定义列直观查看所有Pod状态
如果需要逐个确认Pod的状态,可以直接用自定义输出列展示所有相关Pod的属性:
kubectl get pods -n $NS -l <你的Deployment匹配标签> -o custom-columns=POD名称:.metadata.name,是否就绪:.status.conditions[?(@.type=="Ready")].status,版本哈希:.metadata.labels.pod-template-hash
输出中是否就绪为True且版本哈希和最新RS哈希一致的Pod,就是同时满足两个条件的实例。
快速校验方式
如果不需要具体数量,只需确认是否所有最新版本Pod都已就绪,可直接执行滚动发布状态校验命令:
kubectl rollout status deployment/$DEPLOY_NAME -n $NS
若返回deployment "$DEPLOY_NAME" successfully rolled out说明所有UP-TO-DATE的Pod都可用,否则说明存在发布失败、新旧版本Pod并存的问题。
内容的提问来源于stack exchange,提问作者collimarco
相关产品推荐
相关产品推荐

