Thanks again for this link. Super interesting.
Regarding monitoring socket performance with Kubernetes clusters, I've actually been working on deploying the xTCP socket monitoring tool into kubernetes clusters. The intention would be to stream the tcp_diag data out of all the PoD on a regular basis.
The challenge is that ideally from a single process, you could open a netlink socket into every PoD on the kubernetes node. This is not possible, as far as I understand, because a process can only live in a single name space at any given time.
e.g. You can't do this:
The simple solution would be too run many versions of xTCP as a "sidecar" in each PoD, like this:
This isn't great because then xTCP would be duplicated many times, so it would waste RAMs, and you would have lots of Kafka sockets streaming the socket data out out each PoD.
An alternative I was thinking would be to possibly have a small unix domain socket (UDS) to netlink proxy in each PoD. Over the UDS, the xTCP daemonset ( single instance per node) could read and write the tcp_diag data.
(e.g. I was thinking of a little rust binary that would essentially open a UDS socket and a netlink socket, and then essentially copy from one to the other. )
I don't really know if this is a good idea, or if I'm missing some other way to extract the socket data from many PoDs. Happy to hear ideas please! :)
Full xtCP slides, including these "xTCP for kubernetes" here:
Thanks,
Dave Seddon