Database Kubernetes传出连接
我将保持这个简单,并问,有没有一种方法可以查看哪个pod与端点(如数据库端点)有活动连接 我的集群包含几百个名称空间,我的数据库提供商刚刚告诉我,连接的最大数量几乎达到了,我想指出同时使用多个连接到数据库端点的pod 我可以从我的数据库集群中看到连接来自集群节点的IP。。。但它不会说是哪个豆荚。。。我有很多豆荚Database Kubernetes传出连接,database,kubernetes,Database,Kubernetes,我将保持这个简单,并问,有没有一种方法可以查看哪个pod与端点(如数据库端点)有活动连接 我的集群包含几百个名称空间,我的数据库提供商刚刚告诉我,连接的最大数量几乎达到了,我想指出同时使用多个连接到数据库端点的pod 我可以从我的数据库集群中看到连接来自集群节点的IP。。。但它不会说是哪个豆荚。。。我有很多豆荚 感谢您的帮助最简单的方法是在所有Kubernetes节点上运行netstat: $ netstat -tunaple | grep ESTABLISHED | grep <ip a
感谢您的帮助最简单的方法是在所有Kubernetes节点上运行
netstat
:
$ netstat -tunaple | grep ESTABLISHED | grep <ip address of db provider>
然后,在找到容器id后,如果查看所有的pod:
$ kubectl get pod <pod-id> -o=yaml
每个容器使用自己的网络名称空间,因此要检查容器名称空间内的网络连接,需要在该名称空间内运行命令 幸运的是,Pod中的所有容器共享相同的网络名称空间,因此您可以向Pod中添加小的sidecar容器,以打印日志打开连接 或者,您可以在pod内部运行
netstat
命令(如果pod的文件系统中有):
之后,您将在磁盘上有一个文件(netstat.txt
),其中包含有关POD中连接的所有信息
第三条路是最重要的。您需要使用docker ps
查找容器ID,并运行以下命令以获取PID
$ pid = "$(docker inspect -f '{{.State.Pid}}' "container_name | Uuid")"
然后,您需要创建命名命名空间:
(您可以使用任何想要的名称,或容器名称/Uuid/Pod名称作为名称空间名称的替换)
现在,您可以在该命名空间中运行命令:
sudo ip netns exec "namespace_name" netstat -tunaple | grep ESTABLISHED
您需要为每个节点上的每个pod执行此操作。因此,对特定容器进行故障排除可能很有用,但您的任务需要更多的自动化
安装到集群可能会对您有所帮助。它有几项有趣的功能,如本文所述您需要一个中心监控解决方案来监控此类连接和其他许多事情,在DB guy告诉您之前,您应该能够看到这些事情。您是对的,我确实需要更多的监控,但是这些联系并不是很直观,你是否已经尝试过按照Rico的建议获取这些统计数据的方法?我试图一步一步地完全遵循它们,但这对我来说不起作用。netstat没有返回任何与数据库端点建立的连接。。。所以但它不起作用。下面是使用docker获取节点上所有容器连接的另一种方法:
kubectl get pods | grep Running | awk '{ print $1 }' | xargs -I % sh -c 'echo == Pod %; kubectl exec -ti % -- netstat -tunaple' >netstat.txt
# or
kubectl get pods | grep Running | awk '{ print $1 }' | xargs -I % sh -c 'echo == Pod %; kubectl exec -ti % -- netstat -tunaple | grep ESTABLISHED' >netstat.txt
$ pid = "$(docker inspect -f '{{.State.Pid}}' "container_name | Uuid")"
sudo mkdir -p /var/run/netns
sudo ln -sf /proc/$pid/ns/net "/var/run/netns/namespace_name"
sudo ip netns exec "namespace_name" netstat -tunaple | grep ESTABLISHED