Skip to content

gardener/machine-controller-manager-provider-local

machine-controller-manager-provider-local

REUSE status Go Report Card

Out of tree (controller-based) implementation for local as a new provider. The local out-of-tree provider implements the interface defined at MCM OOT driver.

Fundamental Design Principles

Following are the basic principles kept in mind while developing the external plugin.

  • Communication between this Machine Controller (MC) and Machine Controller Manager (MCM) is achieved using the Kubernetes native declarative approach.
  • Machine Controller (MC) behaves as the controller used to interact with the cloud provider AWS and manage the VMs corresponding to the machine objects.
  • Machine Controller Manager (MCM) deals with higher level objects such as machine-set and machine-deployment objects.

Testing the Controller

  1. Open terminal and change directory to $GOPATH/src/github.com/gardener. Clone this repository.

  2. Navigate to $GOPATH/src/github.com/gardener/machine-controller-manager-provider-local:

    • In the MAKEFILE make sure $TARGET_KUBECONFIG points to the cluster where you wish to manage machines. $CONTROL_NAMESPACE represents the namespaces where MCM is looking for machine CR objects, and $CONTROL_KUBECONFIG points to the cluster which holds these machine CRs.

    • Run the machine controller (driver) using the command below.

      make start
  3. On the second terminal pointing to $GOPATH/src/github.com/gardener,

    • Clone the latest MCM code:

      git clone git@github.com:gardener/machine-controller-manager.git
    • Navigate to the newly created directory:

      cd machine-controller-manager
    • Deploy the required CRDs from the machine-controller-manager repo:

      kubectl apply -f kubernetes/crds.yaml
    • Run the machine-controller-manager:

      make start
  4. On the third terminal pointing to $GOPATH/src/github.com/gardener/machine-controller-manager-provider-local

    • Fill in the object files given below and deploy them as described below.

    • Deploy the machine-class

      kubectl apply -f kubernetes/machine-class.yaml
    • Deploy the kubernetes secret if required.

      kubectl apply -f kubernetes/secret.yaml
    • Deploy the machine object and make sure it joins the cluster successfully.

      kubectl apply -f kubernetes/machine.yaml
    • Once machine joins, you can test by deploying a machine-deployment.

    • Deploy the machine-deployment object and make sure it joins the cluster successfully.

      kubectl apply -f kubernetes/machine-deployment.yaml
    • Make sure to delete both the machine and machine-deployment object after use.

      kubectl delete -f kubernetes/machine.yaml
      kubectl delete -f kubernetes/machine-deployment.yaml

Static code checks and tests can be executed by running make verify. We are using Go modules for Golang package dependency management and Ginkgo/Gomega for testing.

Feedback and Support

Feedback and contributions are always welcome. Please report bugs or suggestions as GitHub issues or join our Slack channel #gardener (please invite yourself to the Kubernetes workspace here).