I want to schedule an application that is almost fully network IO driven. I fail to find documentation on how to request a a minimum available and QoS protected amount of network bandwidth, at minimum to manage the capacity of the node network interface card.
Ideally, something like what is in place for CPU and memory at Configure Quality of Service for Pods | Kubernetes, but for network. I would like to request e.g. 7GBit/s for my container, and do not want to be scheduled on a node with a 10GBit/s interface that already runs another container that has requested 7GBit/s because 7+7>10. Or on a node that has only 1GBit/s interface.
It is difficult for me to believe that kubernetes does not expose management of the IO resources of the node at deployment for the scheduler, neither network nor disk IO, but I do not find documentation of how to support. Even if assuming the minimum problem complexity that the rest of the network has infinite bandwidth and the only limiting factor is the local NIC. Nonetheless, I do not find advice.
If that should need a development, I could imagine to design flexible, and introduce a custom resource that is attached to a node, and can be referenced and consumed by containers in deployments. That would allow flexibility to the many ways a machine can run out of resources (NW, disk, interrupts, and so on), as a cheap solution.
Something that as well protects the network resource, of course needs to be smarter, and really configure the QoS on the node.
Any advice appreciated.
Kubernetes version: release-1.22
Cloud being used: RaspberryPi
Installation method: k3s.io
Host OS: Ubuntu Server
CNI and version:
CRI and version: