Documentation for Kubernetes v1.10 is no longer actively maintained. The version you are currently viewing is a static snapshot. For up-to-date documentation, see the latest version.

Edit This Page

Developing Cloud Controller Manager

FEATURE STATE: Kubernetes 1.8 alpha
This feature is currently in a alpha state, meaning:

  • The version names contain alpha (e.g. v1alpha1).
  • Might be buggy. Enabling the feature may expose bugs. Disabled by default.
  • Support for feature may be dropped at any time without notice.
  • The API may change in incompatible ways in a later software release without notice.
  • Recommended for use only in short-lived testing clusters, due to increased risk of bugs and lack of long-term support.

Before going into how to build your own cloud controller manager, some background on how it works under the hood is helpful. The cloud controller manager is code from kube-controller-manager utilizing Go interfaces to allow implementations from any cloud to be plugged in. Most of the scaffolding and generic controller implementations will be in core, but it will always exec out to the cloud interfaces it is provided, so long as the cloud provider interface is satisfied.

To dive a little deeper into implementation details, all cloud controller managers will import packages from Kubernetes core, the only difference being each project will register their own cloud providers by calling cloudprovider.RegisterCloudProvider where a global variable of available cloud providers is updated.


Out of Tree

To build an out-of-tree cloud-controller-manager for your cloud, follow these steps:

  1. Create a go package with an implementation that satisfies cloudprovider.Interface.
  2. Use main.go in cloud-controller-manager from Kubernetes core as a template for your main.go. As mentioned above, the only difference should be the cloud package that will be imported.
  3. Import your cloud package in main.go, ensure your package has an init block to run cloudprovider.RegisterCloudProvider.

Using existing out-of-tree cloud providers as an example may be helpful. You can find the list here.

In Tree

For in-tree cloud providers, you can run the in-tree cloud controller manager as a Daemonset in your cluster. See the running cloud controller manager docs for more details.


Create an Issue Edit this Page