kubernetes-retired / multi-tenancy

A working place for multi-tenancy related proposals and prototypes.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Describe how you compare to vcluster?

marvin-hansen opened this issue · comments

How does your implementation compares with https://github.com/loft-sh/vcluster

Are you aware of, or working with, this team?

Would be great to see a reference in the documentation in the sense of what else is around.

VC and vcluster are equal from user's perspective. Each user gets a dedicated control plane. The key differences are:

  1. vcluster uses per tenant cluster syncer approach but VC uses one syncer for many tenant control planes;
  2. vcluster uses one namespace to combine all tenant resources in super cluster but VC uses 1:1 mapping between tenant namespace and super master namespace (the key architectural difference) to maximally retain API compatibility;
  3. VC provides comprehensive consistency checks to handle various rare races/failures.
  4. VC supports extension for syncing CRDs.
  5. VC fully supports native k8s as virtualcluster. vcluster relies on a K3s distribution because the apiserver needs to be modified to proxy kubelet requests.
  6. Now VC looks more like a framework. It can be easily extended to implement more advanced features such as supporting multiple super clusters.

You may find more subtle implementation differences when looking at both projects in more details.

Last but not least, VC is a production grade project which has been used in cloud serverless production for quite some time. We have done many optimizations and feature enhancements to satisfy various production requirements.
You can check our ICDCS paper for more if you are interested.
https://github.com/kubernetes-sigs/multi-tenancy/blob/master/incubator/virtualcluster/doc/vc-icdcs.pdf

We will discuss with Loft people to seek collaboration.

Thanks @Fei-Guo for your detail summary , while checking with the differences of two project .

I think most differences coming from

No. 2:

vcluster uses one namespace to combine all tenant resources in super cluster but VC uses 1:1 mapping between tenant namespace and super master namespace (the key architectural difference) to maximally retain API compatibility;

vcluster deal resources inside one ns , comparing to , VC need handle cluster-wide resources/RBAC .

No. 5

VC fully supports native k8s as virtualcluster. vcluster relies on a K3s distribution because the apiserver needs to be modified to proxy kubelet requests.

Besides , from the feature aspect , looks like VC is more mature . vcluster is still a baby :-)

I think this is settled. Closing for now.
Feel free to copy the answer somewhere in a FAQ in case this topic comes up again.
Thank you!