当前位置: 首页 > news >正文

kubectl top 查询pod连接数

在 Kubernetes 中,kubectl top 命令默认仅支持查看 Pod 或节点的 CPU/内存资源使用情况,并不直接提供 TCP 连接数的统计功能。若要获取 Pod 的 TCP 连接数,需结合其他工具和方法。以下是具体实现方案:

1. 直接进入容器查看 TCP 连接数

(1) 使用 kubectl exec 执行命令

若容器内已安装 netstat 或 ss 工具:

kubectl exec <pod-name> -n <namespace> -c <container-name> -- \netstat -ant | grep 'ESTABLISHED' | wc -l# 或使用更高效的 ss 命令
kubectl exec <pod-name> -n <namespace> -c <container-name> -- \ss -ant state established | wc -l
(2) 示例输出
5  # 当前容器有 5 个已建立的 TCP 连接

2. 从宿主机查看 Pod 的 TCP 连接数

每个 Pod 的容器共享宿主机的网络命名空间(默认情况下),或使用独立命名空间(如 CNI 插件配置)。可通过以下步骤操作:

(1) 找到 Pod 的容器 ID
kubectl get pod <pod-name> -n <namespace> -o jsonpath='{.status.containerStatuses[0].containerID}' | cut -d'/' -f3
# 输出示例:c0e54c1a1a1a
(2) 进入宿主机的网络命名空间
# 找到容器的进程 PID
PID=$(docker inspect -f '{{.State.Pid}}' <container-id>)# 使用 nsenter 进入网络命名空间
nsenter -t $PID -n ss -ant state established | wc -l

3. 使用 Sidecar 容器监控 TCP 连接

在 Pod 中添加一个 Sidecar 容器,定期采集 TCP 连接数并暴露指标:

(1) 示例 Sidecar 容器配置
apiVersion: v1
kind: Pod
metadata:name: app-with-tcp-monitor
spec:containers:- name: main-appimage: nginx:latest- name: tcp-monitorimage: alpine:latestcommand: ["sh", "-c"]args:- while true; donetstat -ant | grep ESTABLISHED | wc -l > /var/run/tcp_connections;sleep 10;donevolumeMounts:- name: tcp-statsmountPath: /var/runvolumes:- name: tcp-statsemptyDir: {}
(2) 从 Sidecar 读取数据
kubectl exec app-with-tcp-monitor -c tcp-monitor -n <namespace> -- cat /var/run/tcp_connections

4. 通过监控系统采集 TCP 连接数

集成 Prometheus + Grafana 实现自动化监控:

(1) 使用 kube-state-metrics 或自定义 Exporter
  • 部署 kube-ss 等工具,暴露 TCP 连接指标。

  • 或编写自定义 Exporter,通过 ss/netstat 采集数据。

(2) 查询 Prometheus
sum by (pod) (node_netstat_Tcp_CurrEstab{pod="<pod-name>"}
)

5. 快速脚本统计命名空间内所有 Pod 的 TCP 连接数

#!/bin/bash
NAMESPACE="default"# 遍历所有 Pod
kubectl get pods -n $NAMESPACE -o name | while read POD; doPOD_NAME=${POD#pod/}echo "Pod: $POD_NAME"# 遍历每个容器kubectl get pod $POD_NAME -n $NAMESPACE -o jsonpath='{.spec.containers[*].name}' | tr ' ' '\n' | while read CONTAINER; doCOUNT=$(kubectl exec $POD_NAME -n $NAMESPACE -c $CONTAINER -- \sh -c "ss -ant state established 2>/dev/null | wc -l" 2>/dev/null)echo "  Container $CONTAINER: $COUNT TCP 连接"done
done

输出示例

Pod: web-app-5dfd6f846d-xj7hwContainer main-app: 12 TCP 连接Container istio-proxy: 8 TCP 连接

总结

方法适用场景优点缺点
kubectl exec快速临时检查无需额外配置需容器内有 netstat/ss 工具
宿主机检查深度排查网络问题不依赖容器工具需登录宿主机,操作复杂
Sidecar 监控长期监控需求数据持久化增加资源开销
Prometheus生产环境自动化监控集成告警和可视化需部署和维护监控系统

注意事项

1)容器工具缺失
若容器内无 netstat/ss,可挂载宿主机二进制文件(需兼容容器架构):

volumeMounts:
- name: host-binmountPath: /usr/bin/netstatreadOnly: true
volumes:
- name: host-binhostPath:path: /usr/bin/netstat

2)安全权限
宿主机命令可能需要 root 权限,确保 ServiceAccount 有足够权限。

3)性能影响
高频采集可能影响容器性能,建议间隔不低于 30 秒。

相关文章:

  • Go基于plugin的热更新初体验
  • 【赵渝强老师】TiDB SQL层的工作机制
  • 数据分析2
  • 物联网、数字化工厂与智能智慧技术未来发展方向
  • 光的本质(以暗物质维度粒子为介质的能量传导)
  • Kubernetes应用发布方式完整流程指南
  • Java代理
  • ERP学习(二):用友软件产品之系统管理
  • 网络原理(Java)
  • 文生视频模型速读:LTX-Video
  • [ctfshow web入门] web67
  • SolidWork-2023 鼠標工程
  • 宝塔服务安装使用的保姆级教程
  • 客户端建立一个连接需要占用客户端的端口吗
  • C++学习-骑士巡游问题
  • 独立按键控制LED
  • C++(6):逻辑运算符
  • 基于C语言的TCP通信测试程序开发指南
  • [ctfshow web入门] web71
  • 对话 BitMart 新任 CEO Nenter (Nathan) Chow:技术创新、全球扩张和社区赋能
  • 社恐也能嗨起来,《孤独摇滚》千人观影齐舞荧光棒
  • 前四月全国铁路完成固定资产投资1947亿元,同比增长5.3%
  • 重庆大学:对学术不端行为“零容忍”,发现一例、查处一例
  • 第三届“老山国际春茶节”活动在云南麻栗坡举办
  • 央行:货币与物价的关系受多重因素影响,提振物价的关键在于扩大有效需求
  • 阿里CEO:将以饱和式投入打法,聚焦几大核心战役