Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Calico Operator should support running different dataplanes on different nodes in the same Kubernetes cluster #2935

Open
VadimEisenberg opened this issue Oct 19, 2023 · 2 comments
Labels
kind/enhancement New feature or request

Comments

@VadimEisenberg
Copy link

Expected Behavior

When heterogeneous worker nodes are used in a Kubernetes cluster, it can make sense to use different dataplanes for different nodes, for example, iptables on some nodes and VPP on other nodes. Some nodes may require a custom dataplane driver (not the one provided by Calico).

Another use case for supporting multiple dataplanes simultaneously is migrating from one dataplane to another - it can be performed by switching nodes one by one to a new dataplane.

From VPP documentation:

The VPP dataplane is entirely compatible with the other Calico dataplanes, meaning you can have a cluster with VPP-enabled nodes along with regular nodes. This makes it possible to migrate a cluster from Linux or eBPF networking to VPP networking.

Current Behavior

Currently, I do not see how I can instruct the operator to install different dataplanes on different nodes. To specify a dataplane, one creates an Installation CR named "default", and specifies in spec.calicoNetwork.linuxDataplane the following values Iptables, BPF or VPP.

From Installation documentation:

At most one instance of this resource is supported. It must be named “default”.

It seems I cannot specify multiple dataplanes in an Installation CR and I cannot create multiple Installation CRs.

Context

I need to run different dataplanes on different nodes.

Your Environment

@VadimEisenberg
Copy link
Author

cc @sknat @tmjd

@tmjd tmjd added the kind/enhancement New feature or request label Oct 19, 2023
@tmjd
Copy link
Member

tmjd commented Oct 19, 2023

As I mentioned in this slack thread, I'm not sure that the doc's intention was that a persistent state is available with VPP and another data plane running.

But I do think you might be able to achieve what you are looking for but not with the operator managing both calico-node daemonsets. I think you could specify a nodeSelector in the calicoNodeDaemonSet field for the operator to have the calico-node it deploys only go to specific nodes, then you could deploy a 2nd calico node daemonset manually and target the other nodes. I haven't tried this but I believe it would work.

I have marked this issue as a feature request (kind/enhancement) as I can certainly understand wanting the operator to support a mixed environment like you've suggested.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
kind/enhancement New feature or request
Projects
None yet
Development

No branches or pull requests

2 participants