This page shows how Clusternet manages resources in a separate view inside a Kubernetes cluster.
Clusternet is designed as an add-on that can be deployed to a Kubernetes cluster. So the problem is how we differentiate
resources creations from
kube-apiserver. For example, when we create a
Kubernetes control plane gets notified and provisions pods with desired replicas. For multiple cluster management, this
behavior is not what we want, because we don’t want pods created in our management cluster. What we do want is to regard
Deployment as a template resource, so we can distribute it to multiple child clusters.
Thus, we need to create a separate view for these resources. In Clusternet, we create shadow APIs to implement this.
clusternet-hub runs as an aggregated apiserver and serves at
shadow/v1alpha1 to provide shadow
APIs for all registered resources, including native Kubernetes resources (
and custom resources.
Below image shows how Clusternet creates a separate view for all kinds of resources. Clusternet provides
a client-go wrapper to automatically transform requests
shadow/v1alpha1 group. For example, this wrapper will transform requests
/apis/shadow/v1alpha1/namespace/abc/deployments. All these
transformed requests will be automatically forwarded to
kube-apiserver. All CRDs defined by
Clusternet will not be shadowed.
clusternet-hub will interpret the object and store as a
Manifest object. In such a
way, Clusternet creates a separate view for all kinds of resources.
For command line operations, we can use
kubectl clusternet to manage these resources, such as creation, deletion,
modification, etc. This plugin brings a consistent using experience with
kubectl. Learn more
from kubectl clusternet plugin.
Below command snippets show the magic of shadow APIs, where we can have a separate view for resources.
# list namespaces with kubectl clusternet plugin # we can not see those kube namespaces $ kubectl clusternet get ns No resources found # create namespace with kubectl clusternet plugin $ kubectl clusternet create ns abc namespace/abc created # list namespaces with kubectl clusternet plugin $ kubectl clusternet get ns NAME STATUS AGE abc 3s # list namespaces natively with kubectl # namespace abc is not in this list as well $ kubectl get ns NAME STATUS AGE clusternet-reserved Active 98s clusternet-system Active 98s default Active 12m kube-flannel Active 2m36s kube-node-lease Active 12m kube-public Active 12m kube-system Active 12m
For client-go operations, please follow clusternet wrapper in client-go.
Was this page helpful?
Glad to hear it! Please tell us how we can improve.
Sorry to hear that. Please tell us how we can improve.