README
¶
Kubernetes Cluster Federation
Kubernetes Cluster Federation (KubeFed for short) allows you to coordinate the configuration of multiple Kubernetes clusters from a single set of APIs in a hosting cluster. KubeFed aims to provide mechanisms for expressing which clusters should have their configuration managed and what that configuration should be. The mechanisms that KubeFed provides are intentionally low-level, and intended to be foundational for more complex multicluster use cases such as deploying multi-geo applications and disaster recovery.
KubeFed is currently alpha and moving rapidly toward its initial beta release.
Concepts
KubeFed is configured with two types of information:
- Type configuration declares which API types KubeFed should handle
- Cluster configuration declares which clusters KubeFed should target
Propagation refers to the mechanism that distributes resources to federated clusters.
Type configuration has three fundamental concepts:
- Templates define the representation of a resource common across clusters
- Placement defines which clusters the resource is intended to appear in
- Overrides define per-cluster field-level variation to apply to the template
These three abstractions provide a concise representation of a resource intended to appear in multiple clusters. They encode the minimum information required for propagation and are well-suited to serve as the glue between any given propagation mechanism and higher-order behaviors like policy-based placement and dynamic scheduling.
These fundamental concepts provide building blocks that can be used by higher-level APIs:
- Status collects the status of resources distributed by KubeFed across all federated clusters
- Policy determines which subset of clusters a resource is allowed to be distributed to
- Scheduling refers to a decision-making capability that can decide how workloads should be spread across different clusters similar to how a human operator would
Features
Feature | Maturity | Feature Gate | Default |
---|---|---|---|
Push propagation of arbitrary types to remote clusters | Alpha | PushReconciler | true |
CLI utility (kubefedctl ) |
Alpha | ||
Generate KubeFed APIs without writing code | Alpha | ||
Multicluster Service DNS via external-dns |
Alpha | CrossClusterServiceDiscovery | true |
Multicluster Ingress DNS via external-dns |
Alpha | FederatedIngress | true |
Replica Scheduling Preferences | Alpha | SchedulerPreferences | true |
Guides
User Guide
Take a look at our user guide if you are interested in using KubeFed.
Development Guide
Take a look at our development guide if you are interested in contributing.
Code of Conduct
Participation in the Kubernetes community is governed by the Kubernetes Code of Conduct.
Directories
¶
Path | Synopsis |
---|---|
cmd
|
|
controller-manager/app/options
Package options contains flags and options for initializing controller-manager
|
Package options contains flags and options for initializing controller-manager |
hyperfed
A binary that can morph into all of the other kubefed binaries.
|
A binary that can morph into all of the other kubefed binaries. |
kubefedctl
kubefedctl is a tool for managing clusters in a federation.
|
kubefedctl is a tool for managing clusters in a federation. |
apis
Package apis contains Kubernetes API groups.
|
Package apis contains Kubernetes API groups. |
apis/core
Package core contains core API versions
|
Package core contains core API versions |
apis/core/v1alpha1
Package v1alpha1 contains API Schema definitions for the core v1alpha1 API group +k8s:openapi-gen=true +k8s:deepcopy-gen=package,register +k8s:conversion-gen=sigs.k8s.io/kubefed/pkg/apis/core +k8s:defaulter-gen=TypeMeta +groupName=core.kubefed.k8s.io Package v1alpha1 contains API Schema definitions for the core v1alpha1 API group +k8s:openapi-gen=true +k8s:deepcopy-gen=package,register +k8s:conversion-gen=sigs.k8s.io/kubefed/pkg/apis/core +k8s:defaulter-gen=TypeMeta +groupName=core.kubefed.k8s.io
|
Package v1alpha1 contains API Schema definitions for the core v1alpha1 API group +k8s:openapi-gen=true +k8s:deepcopy-gen=package,register +k8s:conversion-gen=sigs.k8s.io/kubefed/pkg/apis/core +k8s:defaulter-gen=TypeMeta +groupName=core.kubefed.k8s.io Package v1alpha1 contains API Schema definitions for the core v1alpha1 API group +k8s:openapi-gen=true +k8s:deepcopy-gen=package,register +k8s:conversion-gen=sigs.k8s.io/kubefed/pkg/apis/core +k8s:defaulter-gen=TypeMeta +groupName=core.kubefed.k8s.io |
apis/core/v1beta1
Package v1beta1 contains API Schema definitions for the core v1beta1 API group +k8s:openapi-gen=true +k8s:deepcopy-gen=package,register +k8s:conversion-gen=sigs.k8s.io/kubefed/pkg/apis/core +k8s:defaulter-gen=TypeMeta +groupName=core.kubefed.k8s.io Package v1beta1 contains API Schema definitions for the core v1beta1 API group +k8s:openapi-gen=true +k8s:deepcopy-gen=package,register +k8s:conversion-gen=sigs.k8s.io/kubefed/pkg/apis/core +k8s:defaulter-gen=TypeMeta +groupName=core.kubefed.k8s.io
|
Package v1beta1 contains API Schema definitions for the core v1beta1 API group +k8s:openapi-gen=true +k8s:deepcopy-gen=package,register +k8s:conversion-gen=sigs.k8s.io/kubefed/pkg/apis/core +k8s:defaulter-gen=TypeMeta +groupName=core.kubefed.k8s.io Package v1beta1 contains API Schema definitions for the core v1beta1 API group +k8s:openapi-gen=true +k8s:deepcopy-gen=package,register +k8s:conversion-gen=sigs.k8s.io/kubefed/pkg/apis/core +k8s:defaulter-gen=TypeMeta +groupName=core.kubefed.k8s.io |
apis/multiclusterdns
Package multiclusterdns contains multiclusterdns API versions
|
Package multiclusterdns contains multiclusterdns API versions |
apis/multiclusterdns/v1alpha1
Package v1alpha1 contains API Schema definitions for the multiclusterdns v1alpha1 API group +k8s:openapi-gen=true +k8s:deepcopy-gen=package,register +k8s:conversion-gen=sigs.k8s.io/kubefed/pkg/apis/multiclusterdns +k8s:defaulter-gen=TypeMeta +groupName=multiclusterdns.kubefed.k8s.io Package v1alpha1 contains API Schema definitions for the multiclusterdns v1alpha1 API group +k8s:openapi-gen=true +k8s:deepcopy-gen=package,register +k8s:conversion-gen=sigs.k8s.io/kubefed/pkg/apis/multiclusterdns +k8s:defaulter-gen=TypeMeta +groupName=multiclusterdns.kubefed.k8s.io
|
Package v1alpha1 contains API Schema definitions for the multiclusterdns v1alpha1 API group +k8s:openapi-gen=true +k8s:deepcopy-gen=package,register +k8s:conversion-gen=sigs.k8s.io/kubefed/pkg/apis/multiclusterdns +k8s:defaulter-gen=TypeMeta +groupName=multiclusterdns.kubefed.k8s.io Package v1alpha1 contains API Schema definitions for the multiclusterdns v1alpha1 API group +k8s:openapi-gen=true +k8s:deepcopy-gen=package,register +k8s:conversion-gen=sigs.k8s.io/kubefed/pkg/apis/multiclusterdns +k8s:defaulter-gen=TypeMeta +groupName=multiclusterdns.kubefed.k8s.io |
apis/scheduling
Package scheduling contains scheduling API versions
|
Package scheduling contains scheduling API versions |
apis/scheduling/v1alpha1
Package v1alpha1 contains API Schema definitions for the scheduling v1alpha1 API group +k8s:openapi-gen=true +k8s:deepcopy-gen=package,register +k8s:conversion-gen=sigs.k8s.io/kubefed/pkg/apis/scheduling +k8s:defaulter-gen=TypeMeta +groupName=scheduling.kubefed.k8s.io Package v1alpha1 contains API Schema definitions for the scheduling v1alpha1 API group +k8s:openapi-gen=true +k8s:deepcopy-gen=package,register +k8s:conversion-gen=sigs.k8s.io/kubefed/pkg/apis/scheduling +k8s:defaulter-gen=TypeMeta +groupName=scheduling.kubefed.k8s.io
|
Package v1alpha1 contains API Schema definitions for the scheduling v1alpha1 API group +k8s:openapi-gen=true +k8s:deepcopy-gen=package,register +k8s:conversion-gen=sigs.k8s.io/kubefed/pkg/apis/scheduling +k8s:defaulter-gen=TypeMeta +groupName=scheduling.kubefed.k8s.io Package v1alpha1 contains API Schema definitions for the scheduling v1alpha1 API group +k8s:openapi-gen=true +k8s:deepcopy-gen=package,register +k8s:conversion-gen=sigs.k8s.io/kubefed/pkg/apis/scheduling +k8s:defaulter-gen=TypeMeta +groupName=scheduling.kubefed.k8s.io |
controller/util
TODO: consider moving it to a more generic package.
|
TODO: consider moving it to a more generic package. |
controller/util/finalizers
Helper functions for manipulating finalizers.
|
Helper functions for manipulating finalizers. |
test
|
|
e2e/framework/ginkgowrapper
Package ginkgowrapper wraps Ginkgo Fail and Skip functions to panic with structured data instead of a constant string.
|
Package ginkgowrapper wraps Ginkgo Fail and Skip functions to panic with structured data instead of a constant string. |