kubernetes-nmstate
Node-networking configuration driven by Kubernetes and executed by
nmstate.
The "Why"
With hybrid clouds, node-networking setup is becoming even more challenging.
Different payloads have different networking requirements, and not everything
can be satisfied as overlays on top of the main interface of the node (e.g.
SR-IOV, L2, other L2).
The Container Network Interface
(CNI) standard enables different
solutions for connecting networks on the node with pods. Some of them are
part of the standard, and there are
others that extend support for Open vSwitch bridges,
SR-IOV, and more...
However, in all of these cases, the node must have the networks setup before the
pod is scheduled. Setting up the networks in a dynamic and heterogenous cluster,
with dynamic networking requirements, is a challenge by itself - and this is
what this project is addressing.
The "How"
We use nmstate to perform state driven network
configuration on each node, as well as to return back its current state.
The system defines 1 objects, NodeNetworkState
that
is used to report and configure cluster node networks.
For more information, please check
kubernetes-nmstate design document,
developer guide and
deployment and usage section.
Node Network State
Node Network State objects are created per each node in the cluster and can be
used to configure and report available interfaces and network configuration.
Example of NodeNetworkState listing network configuration of node01 can be
found at state example.
Deployment and Usage
You can choose to deploy this plugin on a
local virtualized cluster or on your
arbitrary cluster.
After that, you can follow one of the following guides that will guide you
through node state reporting and interface configuration.
Development and Contributing
Contributions are welcome! Find details about the project's design and
development workflow in the developer guide.
Releasing
To cut a release , push images to quay and publish it on GitHub
the command make release
do all this automatically, the version is at
version/version.go
and the description at version/description
.
So the step would be:
- Change version/version.go and versions/description
- Create a PR to review it
- Merge it to master
- Call
make release
from master
The environment variable GITHUB_TOKEN is needed to publish at github it points
to a token generated by github to access projects.