README

Gardener

Gardener Logo

CI Build status Go Report Card GoDoc CII Best Practices

Gardener implements the automated management and operation of Kubernetes clusters as a service and provides a fully validated extensibility framework that can be adjusted to any programmatic cloud or infrastructure provider.

Gardener is 100% Kubernets-native and exposes its own Cluster API to create homogeneous clusters on all supported infrastructures. This API differs from SIG Cluster Lifecycle's Cluster API that only harmonizes how to get to clusters, while Gardener's Cluster API goes one step further and also harmonizes the make-up of the clusters themselves. That means, Gardener gives you homogeneous clusters with exactly the same bill of material, configuration and behavior on all supported infrastructures, which you can see further down below in the section on our K8s Conformance Test Coverage.

In 2020, SIG Cluster Lifecycle's Cluster API made a huge step forward with v1alpha3 and the newly added support for declarative control plane management. This made it possible to integrate managed services like GKE or Gardener. We would be more than happy, if the community would be interested, to contribute a Gardener control plane provider. For more information on the relation between Gardener API and SIG Cluster Lifecycle's Cluster API, please see here.

Gardener's main principle is to leverage Kubernetes concepts for all of its tasks.

In essence, Gardener is an extension API server that comes along with a bundle of custom controllers. It introduces new API objects in an existing Kubernetes cluster (which is called garden cluster) in order to use them for the management of end-user Kubernetes clusters (which are called shoot clusters). These shoot clusters are described via declarative cluster specifications which are observed by the controllers. They will bring up the clusters, reconcile their state, perform automated updates and make sure they are always up and running.

To accomplish these tasks reliably and to offer a high quality of service, Gardener controls the main components of a Kubernetes cluster (etcd, API server, controller manager, scheduler). These so-called control plane components are hosted in Kubernetes clusters themselves (which are called seed clusters). This is the main difference compared to many other OSS cluster provisioning tools: The shoot clusters do not have dedicated master VMs. Instead, the control plane is deployed as a native Kubernetes workload into the seeds (the architecture is commonly referred to as kubeception or inception design). This does not only effectively reduce the total cost of ownership but also allows easier implementations for "day-2 operations" (like cluster updates or robustness) by relying on all the mature Kubernetes features and capabilities.

Gardener reuses the identical Kubernetes design to span a scalable multi-cloud and multi-cluster landscape. Such familiarity with known concepts has proven to quickly ease the initial learning curve and accelerate developer productivity:

  • Kubernetes API Server = Gardener API Server
  • Kubernetes Controller Manager = Gardener Controller Manager
  • Kubernetes Scheduler = Gardener Scheduler
  • Kubelet = Gardenlet
  • Node = Seed cluster
  • Pod = Shoot cluster

Please find more information regarding the concepts and a detailed description of the architecture in our Gardener Wiki and our blog posts on kubernetes.io: Gardener - the Kubernetes Botanist (17.5.2018) and Gardener Project Update (2.12.2019).


K8s Conformance Test Coverage

Conformance test results of latest stable Gardener release, transparently visible at the CNCF test grid:

Provider/K8s v1.20 v1.19 v1.18 v1.17 v1.16 v1.15 v1.14 v1.13 v1.12 v1.11 v1.10
AWS Gardener v1.20 Conformance Tests Gardener v1.19 Conformance Tests Gardener v1.18 Conformance Tests Gardener v1.17 Conformance Tests Gardener v1.16 Conformance Tests [2] [1] [1] [1] [1] [1]
Azure Gardener v1.20 Conformance Tests Gardener v1.19 Conformance Tests Gardener v1.18 Conformance Tests Gardener v1.17 Conformance Tests Gardener v1.16 Conformance Tests [2] [1] [1] [1] [1] [1]
GCP Gardener v1.20 Conformance Tests Gardener v1.19 Conformance Tests Gardener v1.18 Conformance Tests Gardener v1.17 Conformance Tests Gardener v1.16 Conformance Tests [2] [1] [1] [1] [1] [1]
OpenStack Gardener v1.20 Conformance Tests Gardener v1.19 Conformance Tests Gardener v1.18 Conformance Tests Gardener v1.17 Conformance Tests Gardener v1.16 Conformance Tests [2] [1] [1] [1] [1] [1]
Alicloud N/A Gardener v1.19 Conformance Tests Gardener v1.18 Conformance Tests Gardener v1.17 Conformance Tests Gardener v1.16 Conformance Tests [2] N/A N/A N/A N/A N/A
Packet N/A N/A N/A N/A N/A N/A N/A N/A N/A N/A N/A
vSphere N/A N/A N/A N/A N/A N/A N/A N/A N/A N/A N/A

[1] Version is technically supported but no longer actively tested. Regressions will go unnoticed.
[2] Conformance tests are still executed and validated, unfortunately no longer shown in TestGrid.

Besides the conformance tests, over 400 additional e2e tests are executed on a daily basis. Get an overview of the test results at testgrid.

Start using or developing the Gardener locally

See our documentation in the /docs repository, please find the index here.

Setting up your own Gardener landscape in the Cloud

The quickest way to test drive Gardener is to install it virtually onto an existing Kubernetes cluster, just like you would install any other Kubernetes-ready application. Launch your automatic installer here

We also have a Gardener Helm Chart. Alternatively you can use our garden setup project to create a fully configured Gardener landscape which also includes our Gardener Dashboard.

Feedback and Support

Feedback and contributions are always welcome!

All channels for getting in touch or learning about our project are listed under the community section. We are cordially inviting interested parties to join our bi-weekly meetings.

Please report bugs or suggestions about our Kubernetes clusters as such or the Gardener itself as GitHub issues or join our Slack channel #gardener (please invite yourself to the Kubernetes workspace here).

Learn More!

Please find further resources about our project here:

Expand ▾ Collapse ▴

Directories

Path Synopsis
cmd
extensions
hack
local-development/common
This package imports things required by build scripts, to force `go mod` to see them as dependencies
This package imports things required by build scripts, to force `go mod` to see them as dependencies
pkg
api
apis/core
Package core is the internal version of the API.
Package core is the internal version of the API.
apis/core/v1alpha1
Package v1alpha1 is a version of the API.
Package v1alpha1 is a version of the API.
apis/core/v1beta1
Package v1beta1 is a version of the API.
Package v1beta1 is a version of the API.
apis/extensions/v1alpha1
Package v1alpha1 is the v1alpha1 version of the API.
Package v1alpha1 is the v1alpha1 version of the API.
apis/seedmanagement
Package seedmanagement is the internal version of the API.
Package seedmanagement is the internal version of the API.
apis/seedmanagement/v1alpha1
Package v1alpha1 is a version of the API.
Package v1alpha1 is a version of the API.
apis/settings
Package settings is the internal version of the API.
Package settings is the internal version of the API.
apis/settings/v1alpha1
Package v1alpha1 is a version of the API.
Package v1alpha1 is a version of the API.
client/core/clientset/internalversion
This package has the automatically generated clientset.
This package has the automatically generated clientset.
client/core/clientset/internalversion/fake
This package has the automatically generated fake clientset.
This package has the automatically generated fake clientset.
client/core/clientset/internalversion/scheme
This package contains the scheme of the automatically generated clientset.
This package contains the scheme of the automatically generated clientset.
client/core/clientset/internalversion/typed/core/internalversion
This package has the automatically generated typed clients.
This package has the automatically generated typed clients.
client/core/clientset/internalversion/typed/core/internalversion/fake
Package fake has the automatically generated clients.
Package fake has the automatically generated clients.
client/core/clientset/versioned
This package has the automatically generated clientset.
This package has the automatically generated clientset.
client/core/clientset/versioned/fake
This package has the automatically generated fake clientset.
This package has the automatically generated fake clientset.
client/core/clientset/versioned/scheme
This package contains the scheme of the automatically generated clientset.
This package contains the scheme of the automatically generated clientset.
client/core/clientset/versioned/typed/core/v1alpha1
This package has the automatically generated typed clients.
This package has the automatically generated typed clients.
client/core/clientset/versioned/typed/core/v1alpha1/fake
Package fake has the automatically generated clients.
Package fake has the automatically generated clients.
client/core/clientset/versioned/typed/core/v1beta1
This package has the automatically generated typed clients.
This package has the automatically generated typed clients.
client/core/clientset/versioned/typed/core/v1beta1/fake
Package fake has the automatically generated clients.
Package fake has the automatically generated clients.
client/extensions/clientset/versioned
This package has the automatically generated clientset.
This package has the automatically generated clientset.
client/extensions/clientset/versioned/fake
This package has the automatically generated fake clientset.
This package has the automatically generated fake clientset.
client/extensions/clientset/versioned/scheme
This package contains the scheme of the automatically generated clientset.
This package contains the scheme of the automatically generated clientset.
client/extensions/clientset/versioned/typed/extensions/v1alpha1
This package has the automatically generated typed clients.
This package has the automatically generated typed clients.
client/extensions/clientset/versioned/typed/extensions/v1alpha1/fake
Package fake has the automatically generated clients.
Package fake has the automatically generated clients.
client/seedmanagement/clientset/versioned
This package has the automatically generated clientset.
This package has the automatically generated clientset.
client/seedmanagement/clientset/versioned/fake
This package has the automatically generated fake clientset.
This package has the automatically generated fake clientset.
client/seedmanagement/clientset/versioned/scheme
This package contains the scheme of the automatically generated clientset.
This package contains the scheme of the automatically generated clientset.
client/seedmanagement/clientset/versioned/typed/seedmanagement/v1alpha1
This package has the automatically generated typed clients.
This package has the automatically generated typed clients.
client/seedmanagement/clientset/versioned/typed/seedmanagement/v1alpha1/fake
Package fake has the automatically generated clients.
Package fake has the automatically generated clients.
client/settings/clientset/versioned
This package has the automatically generated clientset.
This package has the automatically generated clientset.
client/settings/clientset/versioned/fake
This package has the automatically generated fake clientset.
This package has the automatically generated fake clientset.
client/settings/clientset/versioned/scheme
This package contains the scheme of the automatically generated clientset.
This package contains the scheme of the automatically generated clientset.
client/settings/clientset/versioned/typed/settings/v1alpha1
This package has the automatically generated typed clients.
This package has the automatically generated typed clients.
client/settings/clientset/versioned/typed/settings/v1alpha1/fake
Package fake has the automatically generated clients.
Package fake has the automatically generated clients.
mock/apimachinery/api/meta
Package meta is a generated GoMock package.
Package meta is a generated GoMock package.
mock/apimachinery/runtime
Package runtime is a generated GoMock package.
Package runtime is a generated GoMock package.
mock/apiserver/authorization/authorizer
Package authorizer is a generated GoMock package.
Package authorizer is a generated GoMock package.
mock/client-go/core/v1
Package v1 is a generated GoMock package.
Package v1 is a generated GoMock package.
mock/client-go/discovery
Package discovery is a generated GoMock package.
Package discovery is a generated GoMock package.
mock/client-go/kubernetes
Package kubernetes is a generated GoMock package.
Package kubernetes is a generated GoMock package.
mock/client-go/listers/core/v1
Package v1 is a generated GoMock package.
Package v1 is a generated GoMock package.
mock/client-go/rest
Package rest is a generated GoMock package.
Package rest is a generated GoMock package.
mock/client-go/tools/record
Package record is a generated GoMock package.
Package record is a generated GoMock package.
mock/controller-runtime/cache
Package cache is a generated GoMock package.
Package cache is a generated GoMock package.
mock/controller-runtime/client
Package client is a generated GoMock package.
Package client is a generated GoMock package.
mock/controller-runtime/manager
Package manager is a generated GoMock package.
Package manager is a generated GoMock package.
mock/gardener/chartrenderer
Package chartrenderer is a generated GoMock package.
Package chartrenderer is a generated GoMock package.
mock/gardener/client/core/clientset/versioned
Package versioned is a generated GoMock package.
Package versioned is a generated GoMock package.
mock/gardener/client/core/clientset/versioned/typed/core/v1beta1
Package v1beta1 is a generated GoMock package.
Package v1beta1 is a generated GoMock package.
mock/gardener/client/kubernetes
Package kubernetes is a generated GoMock package.
Package kubernetes is a generated GoMock package.
mock/gardener/client/kubernetes/clientmap
Package clientmap is a generated GoMock package.
Package clientmap is a generated GoMock package.
mock/gardener/controllermanager/controller/shoot
Package shoot is a generated GoMock package.
Package shoot is a generated GoMock package.
mock/gardener/extensions/controller
Package controller is a generated GoMock package.
Package controller is a generated GoMock package.
mock/gardener/extensions/controller/backupentry/genericactuator
Package genericactuator is a generated GoMock package.
Package genericactuator is a generated GoMock package.
mock/gardener/extensions/controller/cmd
Package cmd is a generated GoMock package.
Package cmd is a generated GoMock package.
mock/gardener/extensions/controller/controlplane
Package controlplane is a generated GoMock package.
Package controlplane is a generated GoMock package.
mock/gardener/extensions/controller/controlplane/genericactuator
Package genericactuator is a generated GoMock package.
Package genericactuator is a generated GoMock package.
mock/gardener/extensions/terraformer
Package terraformer is a generated GoMock package.
Package terraformer is a generated GoMock package.
mock/gardener/extensions/util
Package util is a generated GoMock package.
Package util is a generated GoMock package.
mock/gardener/extensions/webhook
Package controlplane is a generated GoMock package.
Package controlplane is a generated GoMock package.
mock/gardener/extensions/webhook/cloudprovider
Package cloudprovider is a generated GoMock package.
Package cloudprovider is a generated GoMock package.
mock/gardener/extensions/webhook/controlplane/genericmutator
Package genericmutator is a generated GoMock package.
Package genericmutator is a generated GoMock package.
mock/gardener/operation/botanist/component
Package component is a generated GoMock package.
Package component is a generated GoMock package.
mock/gardener/operation/botanist/controlplane/clusterautoscaler
Package clusterautoscaler is a generated GoMock package.
Package clusterautoscaler is a generated GoMock package.
mock/gardener/operation/botanist/controlplane/etcd
Package etcd is a generated GoMock package.
Package etcd is a generated GoMock package.
mock/gardener/operation/botanist/controlplane/konnectivity
Package konnectivity is a generated GoMock package.
Package konnectivity is a generated GoMock package.
mock/gardener/operation/botanist/controlplane/kubecontrollermanager
Package kubecontrollermanager is a generated GoMock package.
Package kubecontrollermanager is a generated GoMock package.
mock/gardener/operation/botanist/controlplane/kubescheduler
Package kubescheduler is a generated GoMock package.
Package kubescheduler is a generated GoMock package.
mock/gardener/operation/botanist/controlplane/resourcemanager
Package resourcemanager is a generated GoMock package.
Package resourcemanager is a generated GoMock package.
mock/gardener/operation/botanist/systemcomponents/metricsserver
Package metricsserver is a generated GoMock package.
Package metricsserver is a generated GoMock package.
mock/gardener/utils/chart
Package chart is a generated GoMock package.
Package chart is a generated GoMock package.
mock/gardener/utils/context
Package context is a generated GoMock package.
Package context is a generated GoMock package.
mock/gardener/utils/errors
Package errors is a generated GoMock package.
Package errors is a generated GoMock package.
mock/gardener/utils/flow
Package flow is a generated GoMock package.
Package flow is a generated GoMock package.
mock/gardener/utils/kubernetes/client
Package client is a generated GoMock package.
Package client is a generated GoMock package.
mock/gardener/utils/retry
Package retry is a generated GoMock package.
Package retry is a generated GoMock package.
mock/gardener/utils/secrets
Package secrets is a generated GoMock package.
Package secrets is a generated GoMock package.
mock/gardener/utils/time
Package time is a generated GoMock package.
Package time is a generated GoMock package.
mock/go-logr/logr
Package logr is a generated GoMock package.
Package logr is a generated GoMock package.
mock/go/context
Package context is a generated GoMock package.
Package context is a generated GoMock package.
mock/go/io
Package io is a generated GoMock package.
Package io is a generated GoMock package.
mock/go/time
Package time is a generated GoMock package.
Package time is a generated GoMock package.
operation/botanist/extensions/backupentry/mock
Package backupentry is a generated GoMock package.
Package backupentry is a generated GoMock package.
operation/botanist/extensions/containerruntime/mock
Package containerruntime is a generated GoMock package.
Package containerruntime is a generated GoMock package.
operation/botanist/extensions/controlplane/mock
Package controlplane is a generated GoMock package.
Package controlplane is a generated GoMock package.
operation/botanist/extensions/extension/mock
Package extension is a generated GoMock package.
Package extension is a generated GoMock package.
operation/botanist/extensions/infrastructure/mock
Package infrastructure is a generated GoMock package.
Package infrastructure is a generated GoMock package.
operation/botanist/extensions/operatingsystemconfig/downloader/templates
Package templates generated by go-bindata.// sources: scripts/download-cloud-config.tpl.sh
Package templates generated by go-bindata.// sources: scripts/download-cloud-config.tpl.sh
operation/botanist/extensions/operatingsystemconfig/executor/templates
Package templates generated by go-bindata.// sources: scripts/execute-cloud-config.tpl.sh
Package templates generated by go-bindata.// sources: scripts/execute-cloud-config.tpl.sh
operation/botanist/extensions/operatingsystemconfig/mock
Package operatingsystemconfig is a generated GoMock package.
Package operatingsystemconfig is a generated GoMock package.
operation/botanist/extensions/operatingsystemconfig/original/components/containerd/templates
Package templates generated by go-bindata.// sources: scripts/health-monitor.tpl.sh scripts/init.tpl.sh
Package templates generated by go-bindata.// sources: scripts/health-monitor.tpl.sh scripts/init.tpl.sh
operation/botanist/extensions/operatingsystemconfig/original/components/docker/templates
Package templates generated by go-bindata.// sources: scripts/health-monitor.tpl.sh
Package templates generated by go-bindata.// sources: scripts/health-monitor.tpl.sh
operation/botanist/extensions/operatingsystemconfig/original/components/gardeneruser/templates
Package templates generated by go-bindata.// sources: scripts/create.tpl.sh
Package templates generated by go-bindata.// sources: scripts/create.tpl.sh
Package kubelet is a generated GoMock package.
operation/botanist/extensions/operatingsystemconfig/original/components/kubelet/templates
Package templates generated by go-bindata.// sources: scripts/health-monitor.tpl.sh
Package templates generated by go-bindata.// sources: scripts/health-monitor.tpl.sh
Package mock is a generated GoMock package.
operation/botanist/extensions/operatingsystemconfig/utils/mock
Package utils is a generated GoMock package.
Package utils is a generated GoMock package.
operation/botanist/extensions/worker/mock
Package worker is a generated GoMock package.
Package worker is a generated GoMock package.
operation/botanist/matchers
this file is copy of https://github.com/kubernetes/kubernetes/blob/f247e75980061d7cf83c63c0fb1f12c7060c599f/staging/src/k8s.io/apiserver/pkg/admission/plugin/webhook/rules/rules.go with some modifications for the webhook matching use-case.
this file is copy of https://github.com/kubernetes/kubernetes/blob/f247e75980061d7cf83c63c0fb1f12c7060c599f/staging/src/k8s.io/apiserver/pkg/admission/plugin/webhook/rules/rules.go with some modifications for the webhook matching use-case.
operation/seed/scheduler/configurator
Package configurator contains the Configurator interface It is a separate package to avoid dependency cycle.
Package configurator contains the Configurator interface It is a separate package to avoid dependency cycle.
operation/seed/scheduler/v18
Package v18 a kube-scheduler specific configuration for 1.18 Kubernetes version.
Package v18 a kube-scheduler specific configuration for 1.18 Kubernetes version.
operation/seed/scheduler/v19
Package v19 a kube-scheduler specific configuration for 1.19 Kubernetes version.
Package v19 a kube-scheduler specific configuration for 1.19 Kubernetes version.
operation/seed/scheduler/v20
Package v20 a kube-scheduler specific configuration for 1.20 Kubernetes version.
Package v20 a kube-scheduler specific configuration for 1.20 Kubernetes version.
utils/flow
Package flow provides utilities to construct a directed acyclic computational graph that is then executed and monitored with maximum parallelism.
Package flow provides utilities to construct a directed acyclic computational graph that is then executed and monitored with maximum parallelism.
version
Deprecated: use k8s.io/component-base/version instead.
Deprecated: use k8s.io/component-base/version instead.
version/verflag
Deprecated: use k8s.io/component-base/version/verflag instead.
Deprecated: use k8s.io/component-base/version/verflag instead.
plugin
test
integration/shoots/maintenance
Deprecated: this is the deprecated gardener testframework.
Deprecated: this is the deprecated gardener testframework.
third_party
forked/kubernetes/plugin/pkg/admission/resourcequota
Package resourcequota enforces all incoming requests against any applied quota in the namespace context of the request
Package resourcequota enforces all incoming requests against any applied quota in the namespace context of the request
forked/kubernetes/plugin/pkg/admission/resourcequota/apis/resourcequota/install
Package install installs the experimental API group, making it available as an option to all of the API encoding/decoding machinery.
Package install installs the experimental API group, making it available as an option to all of the API encoding/decoding machinery.
Package v1 is the v1 version of the API.
forked/kubernetes/plugin/pkg/admission/resourcequota/apis/resourcequota/v1alpha1
Package v1alpha1 is the v1alpha1 version of the API.
Package v1alpha1 is the v1alpha1 version of the API.
forked/kubernetes/plugin/pkg/admission/resourcequota/apis/resourcequota/v1beta1
Package v1beta1 is the v1beta1 version of the API.
Package v1beta1 is the v1beta1 version of the API.